Merge pull request #32 from storytold/jan-18-mithoo

slightly tweaked mocapnet alt container
This commit is contained in:
Kasisnu
2024-01-18 19:24:57 +05:30
committed by GitHub
294 changed files with 99862 additions and 2 deletions
@@ -35,7 +35,7 @@ jobs:
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build image
run: cd animation/MocapNET/ && docker build . --file docker/Dockerfile --tag $IMAGE_NAME --label "runnumber=${GITHUB_RUN_ID}"
run: cd animation/MocapNET-kasisnu/ && docker build . --file docker/Dockerfile --tag $IMAGE_NAME --label "runnumber=${GITHUB_RUN_ID}"
- name: Push image to GitHub Container Registry
run: |
+378
View File
@@ -0,0 +1,378 @@
project( MocapNETProject )
cmake_minimum_required( VERSION 2.8.13 )
#Make fast, lean and platform independent binaries..
#The -fuse-ld=gold flag solves issue https://github.com/FORTH-ModelBasedTracker/MocapNET/issues/34
#However it causes https://github.com/FORTH-ModelBasedTracker/MocapNET/issues/38
set(CMAKE_CXX_FLAGS "-s -O3 -fPIC -march=native -mtune=native") #-fuse-ld=gold
set(CMAKE_C_FLAGS "-s -O3 -fPIC -march=native -mtune=native") #-fuse-ld=gold
OPTION(ENABLE_OPENGL OFF)
OPTION(INTEL_OPTIMIZATIONS OFF)
SET (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
INCLUDE(FindSSE)
FindSSE ()
IF(SSE2_FOUND)
SET(INTEL_OPTIMIZATIONS ON)
MESSAGE("SSE2 detected and will be used..")
ENDIF(SSE2_FOUND)
if (INTEL_OPTIMIZATIONS)
add_definitions(-DINTEL_OPTIMIZATIONS)
endif(INTEL_OPTIMIZATIONS)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
#JPEG/PNG libraries..
set(JPG_Libs jpeg)
set(PNG_Libs png)
#------------------------------------------------------------------------------------------------------------------------------------------------
#First search for Tensorflow 2.x
#------------------------------------------------------------------------------------------------------------------------------------------------
IF(EXISTS "${CMAKE_SOURCE_DIR}/dependencies/libtensorflow/lib/libtensorflow.so.2")
MESSAGE("Using locally found libtensorflow v2 C-API")
set(TENSORFLOW_ROOT "${CMAKE_SOURCE_DIR}/dependencies/libtensorflow/lib/" CACHE PATH "tensorflow root")
set(TENSORFLOW_INCLUDE_ROOT "${CMAKE_SOURCE_DIR}/dependencies/libtensorflow/include/" CACHE PATH "tensorflow include")
set(TENSORFLOW2_FOUND true CACHE BOOL "Tensorflow 2 available")
set(TENSORFLOW_SOURCE_FILES
${CMAKE_SOURCE_DIR}/src/NeuralNetworkAbstractionLayer/neuralNetworkAbstraction.cpp
${CMAKE_SOURCE_DIR}/src/Tensorflow/tensorflow.cpp
${CMAKE_SOURCE_DIR}/src/Tensorflow/tf_utils.cpp
)
ELSEIF(EXISTS "/usr/local/lib/libtensorflow.so.2")
MESSAGE("Using system-wide found libtensorflow v2 C-API")
set(TENSORFLOW_ROOT "/usr/local/lib/" CACHE PATH "tensorflow root")
set(TENSORFLOW_INCLUDE_ROOT "/usr/local/include/" CACHE PATH "tensorflow include")
set(TENSORFLOW2_FOUND true CACHE BOOL "Tensorflow 2 available")
set(TENSORFLOW_SOURCE_FILES
${CMAKE_SOURCE_DIR}/src/NeuralNetworkAbstractionLayer/neuralNetworkAbstraction.cpp
${CMAKE_SOURCE_DIR}/src/Tensorflow/tensorflow.cpp
${CMAKE_SOURCE_DIR}/src/Tensorflow/tf_utils.cpp
)
#------------------------------------------------------------------------------------------------------------------------------------------------
#If we can't find it then search for Tensorflow 1.x
#------------------------------------------------------------------------------------------------------------------------------------------------
ELSEIF(EXISTS "${CMAKE_SOURCE_DIR}/dependencies/libtensorflow/lib/libtensorflow.so")
MESSAGE("Using locally found libtensorflow v1 C-API")
set(TENSORFLOW_ROOT "${CMAKE_SOURCE_DIR}/dependencies/libtensorflow/lib/" CACHE PATH "tensorflow root")
set(TENSORFLOW_INCLUDE_ROOT "${CMAKE_SOURCE_DIR}/dependencies/libtensorflow/include/" CACHE PATH "tensorflow include")
set(TENSORFLOW_SOURCE_FILES
${CMAKE_SOURCE_DIR}/src/NeuralNetworkAbstractionLayer/neuralNetworkAbstraction.cpp
${CMAKE_SOURCE_DIR}/src/Tensorflow/tensorflow.cpp
${CMAKE_SOURCE_DIR}/src/Tensorflow/tf_utils.cpp
)
ELSEIF(EXISTS "/usr/local/lib/libtensorflow.so")
MESSAGE("Using system-wide found libtensorflow v1 C-API")
set(TENSORFLOW_ROOT "/usr/local/lib/" CACHE PATH "tensorflow root")
set(TENSORFLOW_INCLUDE_ROOT "/usr/local/include/" CACHE PATH "tensorflow include")
set(TENSORFLOW_SOURCE_FILES
${CMAKE_SOURCE_DIR}/src/NeuralNetworkAbstractionLayer/neuralNetworkAbstraction.cpp
${CMAKE_SOURCE_DIR}/src/Tensorflow/tensorflow.cpp
${CMAKE_SOURCE_DIR}/src/Tensorflow/tf_utils.cpp
)
#------------------------------------------------------------------------------------------------------------------------------------------------
#If we can't find any Tensorflow just point to the /usr/lib and hope for the best..
#------------------------------------------------------------------------------------------------------------------------------------------------
ELSE()
MESSAGE("Did not find a tensorflow version, please consider running the initialize.sh script or reading the README file")
#Set some default tensorflow paths to give some valid error afterwards..
set(TENSORFLOW_ROOT "/usr/local/lib/" CACHE PATH "tensorflow root")
set(TENSORFLOW_INCLUDE_ROOT "/usr/local/include/" CACHE PATH "tensorflow include")
ENDIF()
#------------------------------------------------------------------------------------------------------------------------------------------------
include_directories(${TENSORFLOW_INCLUDE_ROOT})
ADD_LIBRARY(TensorflowFramework SHARED IMPORTED)
IF (TENSORFLOW2_FOUND)
SET_TARGET_PROPERTIES(TensorflowFramework PROPERTIES IMPORTED_LOCATION ${TENSORFLOW_ROOT}/libtensorflow_framework.so.2)
ELSE(TENSORFLOW2_FOUND)
SET_TARGET_PROPERTIES(TensorflowFramework PROPERTIES IMPORTED_LOCATION ${TENSORFLOW_ROOT}/libtensorflow_framework.so)
ENDIF (TENSORFLOW2_FOUND)
ADD_LIBRARY(Tensorflow SHARED IMPORTED)
IF (TENSORFLOW2_FOUND)
SET_TARGET_PROPERTIES(Tensorflow PROPERTIES IMPORTED_LOCATION ${TENSORFLOW_ROOT}/libtensorflow.so.2)
ELSE(TENSORFLOW2_FOUND)
SET_TARGET_PROPERTIES(Tensorflow PROPERTIES IMPORTED_LOCATION ${TENSORFLOW_ROOT}/libtensorflow.so)
ENDIF (TENSORFLOW2_FOUND)
#If our development environment has RGBDAcquisition then we can use BVH capabilities..
#------------------------------------------------------------------------------------------------------------------------------------------------
#------------------------------------------------------------------------------------------------------------------------------------------------
#------------------------------------------------------------------------------------------------------------------------------------------------
#------------------------------------------------------------------------------------------------------------------------------------------------
set(BVH_SOURCE "")
IF(EXISTS "${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader")
add_definitions(-DUSE_BVH)
set(BVH_SOURCE
#--------------------------------------------------------------------------------
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/tools/PThreadWorkerPool/pthreadWorkerPool.h
#--------------------------------------------------------------------------------
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/bvh_loader.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/calculate/bvh_to_tri_pose.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/calculate/bvh_transform.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/calculate/bvh_project.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/import/fromBVH.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/export/bvh_to_trajectoryParserTRI.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/export/bvh_to_trajectoryParserPrimitives.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/export/bvh_export.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/export/bvh_to_c.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/export/bvh_to_bvh.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/export/bvh_to_svg.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/export/bvh_to_csv.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/export/bvh_to_json.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/export/bvh_export.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/edit/bvh_randomize.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/edit/bvh_filter.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/edit/bvh_rename.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/edit/bvh_merge.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/edit/bvh_cut_paste.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/edit/bvh_interpolate.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/edit/bvh_remapangles.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/ik/bvh_inverseKinematics.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/ik/hardcodedProblems_inverseKinematics.c
#${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/ik/levmar.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/metrics/bvh_measure.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/tests/test.c
#--------------------------------------------------------------------------------
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/tools/Calibration/calibration.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/tools/Calibration/calibration.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/tools/Calibration/transform.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/tools/Calibration/transform.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/tools/Calibration/undistort.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/tools/Calibration/undistort.h
#--------------------------------------------------------------------------------
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/tools/AmMatrix/matrixTools.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/tools/AmMatrix/matrix3x3Tools.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/tools/AmMatrix/matrix4x4Tools.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/tools/AmMatrix/matrixOpenGL.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/tools/AmMatrix/matrixCalculations.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/tools/AmMatrix/solveLinearSystemGJ.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/tools/AmMatrix/solveHomography.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/tools/AmMatrix/quaternions.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/tools/AmMatrix/simpleRenderer.c
)
MESSAGE("BVH Code found and will be used..")
add_subdirectory(src/GroundTruthGenerator/) #Ground Truth generator can only be compiled with BVH code..
add_subdirectory(src/MocapNET2/reshapeCSVFileToMakeClassification/) #Orientation classification needs this tool to be built before working..
#MESSAGE("${BVH_SOURCE}")
ENDIF()
#------------------------------------------------------------------------------------------------------------------------------------------------
#------------------------------------------------------------------------------------------------------------------------------------------------
#------------------------------------------------------------------------------------------------------------------------------------------------
#------------------------------------------------------------------------------------------------------------------------------------------------
#------------------------------------------------------------------------------------------------------------------------------------------------
#------------------------------------------------------------------------------------------------------------------------------------------------
#------------------------------------------------------------------------------------------------------------------------------------------------
#------------------------------------------------------------------------------------------------------------------------------------------------
set(OPENGL_LIBS "")
set(OPENGL_SOURCE "")
if (ENABLE_OPENGL)
IF(EXISTS "${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library")
add_subdirectory(${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/tools/Codecs)
add_subdirectory(${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/tools/Calibration)
#add_subdirectory(${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library) #OpenGLAcquisition
add_definitions(-DUSE_OPENGL)
#add_definitions(-DUSE_GLEW)
set(OPENGL_LIBS rt m GL GLU GLEW X11 Codecs CalibrationLibrary)
set(OPENGL_SOURCE
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/OpenGLAcquisition.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/OpenGLAcquisition.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/System/glx.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/System/glx.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/System/glx2.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/System/glx2.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/System/glx3.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/System/glx3.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/main.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/OGLRendererSandbox.h
#3D Models and how to load them
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/ModelLoader/model_loader.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/ModelLoader/model_loader.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/ModelLoader/model_loader_obj.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/ModelLoader/model_loader_obj.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/ModelLoader/model_loader_tri.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/ModelLoader/model_loader_tri.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/ModelLoader/model_processor.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/ModelLoader/model_processor.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/ModelLoader/model_loader_hardcoded.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/ModelLoader/model_loader_hardcoded.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/ModelLoader/model_loader_transform_joints.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/ModelLoader/model_loader_transform_joints.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/ModelLoader/model_converter.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/ModelLoader/model_converter.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/ModelLoader/model_editor.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/ModelLoader/model_editor.h
#Textures and how to load them
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/TextureLoader/texture_loader.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/TextureLoader/texture_loader.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/TextureLoader/image_proc.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/TextureLoader/image_proc.h
#OpenGL Rendering stuff
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/Rendering/FixedPipeline/ogl_fixed_pipeline_renderer.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/Rendering/FixedPipeline/ogl_fixed_pipeline_renderer.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/Rendering/ShaderPipeline/render_buffer.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/Rendering/ShaderPipeline/render_buffer.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/Rendering/ShaderPipeline/uploadGeometry.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/Rendering/ShaderPipeline/uploadGeometry.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/Rendering/ShaderPipeline/ogl_shader_pipeline_renderer.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/Rendering/ShaderPipeline/ogl_shader_pipeline_renderer.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/Rendering/ShaderPipeline/shader_loader.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/Rendering/ShaderPipeline/shader_loader.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/Rendering/ogl_rendering.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/Rendering/ogl_rendering.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/Rendering/tiledRenderer.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/Rendering/tiledRenderer.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/Rendering/downloadFromRenderer.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/Rendering/downloadFromRenderer.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/Tools/tools.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/Tools/tools.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/Tools/save_to_file.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/Tools/save_to_file.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/Scene/scene.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/Scene/scene.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/Scene/control.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/Scene/control.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/Scene/photoShootingScene.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/Scene/photoShootingScene.c
#AmMatrix dependencies
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition//tools/AmMatrix/quaternions.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition//tools/AmMatrix/quaternions.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition//tools/AmMatrix/matrix3x3Tools.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition//tools/AmMatrix/matrix3x3Tools.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition//tools/AmMatrix/matrix4x4Tools.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition//tools/AmMatrix/matrix4x4Tools.h
#../tools/AmMatrix/matrixProject.c
#../tools/AmMatrix/matrixProject.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition//tools/AmMatrix/matrixCalculations.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition//tools/AmMatrix/matrixCalculations.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition//tools/AmMatrix/matrixOpenGL.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition//tools/AmMatrix/matrixOpenGL.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition//tools/AmMatrix/solveLinearSystemGJ.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition//tools/AmMatrix/solveLinearSystemGJ.h
#ImageOperations dependencies
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition//tools/ImageOperations/depthClassifier.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition//tools/ImageOperations/convolutionFilter.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition//tools/ImageOperations/imageFilters.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition//tools/ImageOperations/findSubImage.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition//tools/ImageOperations/imageOps.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition//tools/ImageOperations/patchComparison.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition//tools/ImageOperations/patchComparison.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition//tools/ImageOperations/resize.c
#Rest of the stuff
#${CMAKE_SOURCE_DIR}/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/TrajectoryParser/InputParser_C.c
#${CMAKE_SOURCE_DIR}/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/TrajectoryParser/InputParser_C.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/TrajectoryParser/TrajectoryParser.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/TrajectoryParser/TrajectoryParser.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/TrajectoryParser/TrajectoryParserDataStructures.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/TrajectoryParser/TrajectoryParserDataStructures.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/TrajectoryParser/TrajectoryCalculator.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/TrajectoryParser/TrajectoryCalculator.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/TrajectoryParser/TrajectoryPrimitives.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/TrajectoryParser/TrajectoryPrimitives.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/TrajectoryParser/hashmap.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/TrajectoryParser/hashmap.h
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/Interfaces/webInterface.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/Interfaces/webInterface.h
)
MESSAGE("OpenGL code found and will be used..")
ELSE()
MESSAGE("OpenGL support enabled, but OpenGL code not found..")
ENDIF()
ELSE (ENABLE_OPENGL)
MESSAGE("OpenGL support will not be compiled in")
ENDIF(ENABLE_OPENGL)
#------------------------------------------------------------------------------------------------------------------------------------------------
#------------------------------------------------------------------------------------------------------------------------------------------------
#------------------------------------------------------------------------------------------------------------------------------------------------
#------------------------------------------------------------------------------------------------------------------------------------------------
#Autosearch for the opencv maybe installed by the user..!
find_package(OpenCV PATHS dependencies/opencv-3.2.0/build NO_DEFAULT_PATH)
find_package (OpenCV)
if (OpenCV_FOUND)
add_definitions(-DUSE_OPENCV)
MESSAGE("OpenCV code found and will be used..")
MESSAGE(${OpenCV_DIR})
ENDIF(OpenCV_FOUND)
#If ammarserver is present then use it..
set(NETWORK_CLIENT_LIBRARIES "")
IF(EXISTS "${CMAKE_SOURCE_DIR}/dependencies/AmmarServer/src/AmmServerlib")
add_definitions(-DUSE_NETWORKING)
MESSAGE("AmmarServer support will be compiled in")
#add_subdirectory (dependencies/AmmarServer/) #You can force add everything but this adds too much to the build time
set(NETWORK_CLIENT_LIBRARIES "AmmClient")
add_subdirectory (dependencies/AmmarServer/src/AmmClient)
add_subdirectory (dependencies/AmmarServer/src/AmmServerlib)
add_subdirectory (dependencies/AmmarServer/src/Hashmap)
add_subdirectory (dependencies/AmmarServer/src/InputParser)
ENDIF()
#This needs Tensorflow C-API installed...
#https://www.tensorflow.org/install/lang_c
#wget https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-gpu-linux-x86_64-1.13.1.tar.gz
#pip3 show protobuf
#add_subdirectory (MocapNETStandalone/)
IF(EXISTS "${CMAKE_SOURCE_DIR}/dependencies/AmmarServer/src/AmmServerlib")
#add_subdirectory (src/MocapNET1/MocapNETServerHTTP/)
ENDIF()
if (OpenCV_FOUND)
add_subdirectory (src/Webcam/)
#Deactivated to keep build targets sane
add_subdirectory(src/MocapNET2/BVHGUI2)
add_subdirectory(src/MocapNET2/MocapNET2LiveWebcamDemo)
ENDIF(OpenCV_FOUND)
#add_subdirectory(src/MocapNET2/BVHTemplate/)
add_subdirectory(src/MocapNET2/MocapNETLib2/)
add_subdirectory(src/MocapNET2/MocapNETFromCSV/)
add_subdirectory(src/MocapNET2/Converters/Openpose)
add_subdirectory(src/MocapNET2/Converters/H36M)
add_subdirectory(src/MocapNET2/Converters/convertCSV3D)
add_subdirectory(src/MocapNET2/testCSV/)
add_subdirectory(src/MocapNET2/drawCSV/)
add_subdirectory(src/MocapNET2/CSVClusterPlot)
#------------------------------------------------------------------
add_subdirectory(src/JointEstimator2D)
# TODO FIX INSTALLATION DIRECTORIES
# install(TARGETS RGBDAcquisitionProject
# LIBRARY DESTINATION lib
# ARCHIVE DESTINATION lib
# RUNTIME DESTINATION bin)
+94
View File
@@ -0,0 +1,94 @@
# MocapNET Project
![MocapNET](https://raw.githubusercontent.com/FORTH-ModelBasedTracker/MocapNET/mnet4/doc/method.png)
Finishing my PhD this will probably be the *final* version of MocapNET!
MocapNET 4 will deal with upperbody / lowerbody / hands / eye tracking and / facial capture
It has a written from scratch python interface, but maintain the same compatible BVH output format.
It will also be compatible with Raspberry Pi 4 and use Tensorflow /Tf-Lite / ONNX backends
This branch is still under construction, and has been ported to Python to boost usability
so if you want the older C/C++ version of MocapNET you ignore it for now..!
![MocapNET](https://raw.githubusercontent.com/FORTH-ModelBasedTracker/MocapNET/mnet4/doc/ICCV2023_Presentation_Slide18.png)
## Deploy it now on Google Colab with a single click!
------------------------------------------------------------------
Click here for one click setup : [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/FORTH-ModelBasedTracker/MocapNET/blob/mnet4/mocapnet4.ipynb)
## Relevant publications!
------------------------------------------------------------------
| Download Paper | Year | Conference | Title |
| ------------- | ------------- | ------------- | ------------- |
| [![A Unified Approach for Occlusion Tolerant 3D Facial Pose Capture and Gaze Estimation using MocapNETs](https://github.com/FORTH-ModelBasedTracker/MocapNET/blob/mnet4/doc/pdf.png?raw=true)](http://users.ics.forth.gr/~argyros/mypapers/2023_10_AMFG_Qammaz.pdf) | 2023 | AMFG@ICCV | A Unified Approach for Occlusion Tolerant 3D Facial Pose Capture and Gaze Estimation using MocapNETs |
| [![Compacting MocapNET-based 3D Human Pose Estimation via Dimensionality Reduction](https://github.com/FORTH-ModelBasedTracker/MocapNET/blob/mnet4/doc/pdf.png?raw=true)](http://users.ics.forth.gr/~argyros/mypapers/2023_07_PETRA_Qammaz.pdf) | 2023 | PeTRA | Compacting MocapNET-based 3D Human Pose Estimation via Dimensionality Reduction |
| [![Towards Holistic Real-time Human 3D Pose Estimation using MocapNETs](https://github.com/FORTH-ModelBasedTracker/MocapNET/blob/mnet4/doc/pdf.png?raw=true)](http://users.ics.forth.gr/~argyros/mypapers/2021_11_BMVC_Qammaz.pdf) | 2021 | BMVC | Towards Holistic Real-time Human 3D Pose Estimation using MocapNETs |
| [![Occlusion-tolerant and personalized 3D human pose estimation in RGB images](https://github.com/FORTH-ModelBasedTracker/MocapNET/blob/mnet4/doc/pdf.png?raw=true)](http://users.ics.forth.gr/~argyros/mypapers/2021_01_ICPR_Qammaz.pdf) | 2021 | ICPR | Occlusion-tolerant and personalized 3D human pose estimation in RGB images |
| [![MocapNET: Ensemble of SNN Encoders for 3D Human Pose Estimation in RGB Images](https://github.com/FORTH-ModelBasedTracker/MocapNET/blob/mnet4/doc/pdf.png?raw=true)](http://users.ics.forth.gr/~argyros/mypapers/2019_09_BMVC_mocapnet.pdf) | 2019 | BMVC | MocapNET: Ensemble of SNN Encoders for 3D Human Pose Estimation in RGB Images |
## AMFG@ICCV 2023 Poster
------------------------------------------------------------------
![Our Poster in the Analysis and Modeling of Faces and Gestures Workshop @ ICCV 2023 ](https://github.com/FORTH-ModelBasedTracker/MocapNET/blob/mnet4/doc/ICCV2023_MocapNET4_poster.png?raw=true)
## Citation
------------------------------------------------------------------
Please cite the following papers if this work helps your research :
```
@inproceedings{Qammaz2023b,
author = {Qammaz, Ammar and Argyros, Antonis},
title = {A Unified Approach for Occlusion Tolerant 3D Facial Pose Capture and Gaze Estimation using MocapNETs},
booktitle = {International Conference on Computer Vision Workshops (AMFG 2023 - ICCVW 2023), (to appear)},
publisher = {IEEE},
year = {2023},
month = {October},
address = {Paris, France},
projects = {VMWARE,I.C.HUMANS},
pdflink = {http://users.ics.forth.gr/ argyros/mypapers/2023_10_AMFG_Qammaz.pdf}
}
@inproceedings{Qammaz2021,
author = {Qammaz, Ammar and Argyros, Antonis A},
title = {Towards Holistic Real-time Human 3D Pose Estimation using MocapNETs},
booktitle = {British Machine Vision Conference (BMVC 2021)},
publisher = {BMVA},
year = {2021},
month = {November},
projects = {I.C.HUMANS},
videolink = {https://www.youtube.com/watch?v=aaLOSY_p6Zc}
}
```
## License
------------------------------------------------------------------
This library is provided under the [FORTH license](https://github.com/FORTH-ModelBasedTracker/MocapNET/blob/master/license.txt)
+36
View File
@@ -0,0 +1,36 @@
@inproceedings{Qammaz2021,
author = {Qammaz, Ammar and Argyros, Antonis A},
title = {Towards Holistic Real-time Human 3D Pose Estimation using MocapNETs},
booktitle = {British Machine Vision Conference (BMVC 2021)},
publisher = {BMVA},
year = {2021},
month = {November},
projects = {I.C.HUMANS},
videolink = {https://www.youtube.com/watch?v=aaLOSY_p6Zc}
}
@inproceedings{Qammaz2020,
author = {Ammar Qammaz and Antonis A. Argyros},
title = {Occlusion-tolerant and personalized 3D human pose estimation in RGB images},
booktitle = {IEEE International Conference on Pattern Recognition (ICPR 2020), (to appear)},
year = {2021},
month = {January},
url = {http://users.ics.forth.gr/argyros/res_mocapnet_II.html},
projects = {Co4Robots},
pdflink = {http://users.ics.forth.gr/argyros/mypapers/2021_01_ICPR_Qammaz.pdf},
videolink = {https://youtu.be/Jgz1MRq-I-k}
}
@inproceedings{Qammaz2019,
author = {Qammaz, Ammar and Argyros, Antonis A},
title = {MocapNET: Ensemble of SNN Encoders for 3D Human Pose Estimation in RGB Images},
booktitle = {British Machine Vision Conference (BMVC 2019)},
publisher = {BMVA},
year = {2019},
month = {September},
address = {Cardiff, UK},
url = {http://users.ics.forth.gr/argyros/res_mocapnet.html},
projects = {CO4ROBOTS,MINGEI},
pdflink = {http://users.ics.forth.gr/argyros/mypapers/2019_09_BMVC_mocapnet.pdf},
videolink = {https://youtu.be/fH5e-KMBvM0}
}
@@ -0,0 +1,141 @@
#https://github.com/hideo55/CMake-FindSSE/blob/master/FindSSE.cmake
# Check if SSE instructions are available on the machine where
# the project is compiled.
MACRO (FindSSE)
IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
EXEC_PROGRAM(cat ARGS "/proc/cpuinfo" OUTPUT_VARIABLE CPUINFO)
STRING(REGEX REPLACE "^.*(sse2).*$" "\\1" SSE_THERE ${CPUINFO})
STRING(COMPARE EQUAL "sse2" "${SSE_THERE}" SSE2_TRUE)
IF (SSE2_TRUE)
set(SSE2_FOUND true CACHE BOOL "SSE2 available on host")
ELSE (SSE2_TRUE)
set(SSE2_FOUND false CACHE BOOL "SSE2 available on host")
ENDIF (SSE2_TRUE)
# /proc/cpuinfo apparently omits sse3 :(
STRING(REGEX REPLACE "^.*[^s](sse3).*$" "\\1" SSE_THERE ${CPUINFO})
STRING(COMPARE EQUAL "sse3" "${SSE_THERE}" SSE3_TRUE)
IF (NOT SSE3_TRUE)
STRING(REGEX REPLACE "^.*(T2300).*$" "\\1" SSE_THERE ${CPUINFO})
STRING(COMPARE EQUAL "T2300" "${SSE_THERE}" SSE3_TRUE)
ENDIF (NOT SSE3_TRUE)
STRING(REGEX REPLACE "^.*(ssse3).*$" "\\1" SSE_THERE ${CPUINFO})
STRING(COMPARE EQUAL "ssse3" "${SSE_THERE}" SSSE3_TRUE)
IF (SSE3_TRUE OR SSSE3_TRUE)
set(SSE3_FOUND true CACHE BOOL "SSE3 available on host")
ELSE (SSE3_TRUE OR SSSE3_TRUE)
set(SSE3_FOUND false CACHE BOOL "SSE3 available on host")
ENDIF (SSE3_TRUE OR SSSE3_TRUE)
IF (SSSE3_TRUE)
set(SSSE3_FOUND true CACHE BOOL "SSSE3 available on host")
ELSE (SSSE3_TRUE)
set(SSSE3_FOUND false CACHE BOOL "SSSE3 available on host")
ENDIF (SSSE3_TRUE)
STRING(REGEX REPLACE "^.*(sse4_1).*$" "\\1" SSE_THERE ${CPUINFO})
STRING(COMPARE EQUAL "sse4_1" "${SSE_THERE}" SSE41_TRUE)
IF (SSE41_TRUE)
set(SSE4_1_FOUND true CACHE BOOL "SSE4.1 available on host")
ELSE (SSE41_TRUE)
set(SSE4_1_FOUND false CACHE BOOL "SSE4.1 available on host")
ENDIF (SSE41_TRUE)
STRING(REGEX REPLACE "^.*(sse4_2).*$" "\\1" SSE_THERE ${CPUINFO})
STRING(COMPARE EQUAL "sse4_2" "${SSE_THERE}" SSE42_TRUE)
IF (SSE42_TRUE)
set(SSE4_2_FOUND true CACHE BOOL "SSE4.2 available on host")
ELSE (SSE42_TRUE)
set(SSE4_2_FOUND false CACHE BOOL "SSE4.2 available on host")
ENDIF (SSE42_TRUE)
ELSEIF(CMAKE_SYSTEM_NAME MATCHES "Darwin")
EXEC_PROGRAM("/usr/sbin/sysctl -n machdep.cpu.features" OUTPUT_VARIABLE
CPUINFO)
STRING(REGEX REPLACE "^.*[^S](SSE2).*$" "\\1" SSE_THERE ${CPUINFO})
STRING(COMPARE EQUAL "SSE2" "${SSE_THERE}" SSE2_TRUE)
IF (SSE2_TRUE)
set(SSE2_FOUND true CACHE BOOL "SSE2 available on host")
ELSE (SSE2_TRUE)
set(SSE2_FOUND false CACHE BOOL "SSE2 available on host")
ENDIF (SSE2_TRUE)
STRING(REGEX REPLACE "^.*[^S](SSE3).*$" "\\1" SSE_THERE ${CPUINFO})
STRING(COMPARE EQUAL "SSE3" "${SSE_THERE}" SSE3_TRUE)
IF (SSE3_TRUE)
set(SSE3_FOUND true CACHE BOOL "SSE3 available on host")
ELSE (SSE3_TRUE)
set(SSE3_FOUND false CACHE BOOL "SSE3 available on host")
ENDIF (SSE3_TRUE)
STRING(REGEX REPLACE "^.*(SSSE3).*$" "\\1" SSE_THERE ${CPUINFO})
STRING(COMPARE EQUAL "SSSE3" "${SSE_THERE}" SSSE3_TRUE)
IF (SSSE3_TRUE)
set(SSSE3_FOUND true CACHE BOOL "SSSE3 available on host")
ELSE (SSSE3_TRUE)
set(SSSE3_FOUND false CACHE BOOL "SSSE3 available on host")
ENDIF (SSSE3_TRUE)
STRING(REGEX REPLACE "^.*(SSE4.1).*$" "\\1" SSE_THERE ${CPUINFO})
STRING(COMPARE EQUAL "SSE4.1" "${SSE_THERE}" SSE41_TRUE)
IF (SSE41_TRUE)
set(SSE4_1_FOUND true CACHE BOOL "SSE4.1 available on host")
ELSE (SSE41_TRUE)
set(SSE4_1_FOUND false CACHE BOOL "SSE4.1 available on host")
ENDIF (SSE41_TRUE)
STRING(REGEX REPLACE "^.*(SSE4.2).*$" "\\1" SSE_THERE ${CPUINFO})
STRING(COMPARE EQUAL "SSE4.2" "${SSE_THERE}" SSE42_TRUE)
IF (SSE42_TRUE)
set(SSE4_2_FOUND true CACHE BOOL "SSE4.2 available on host")
ELSE (SSE42_TRUE)
set(SSE4_2_FOUND false CACHE BOOL "SSE4.2 available on host")
ENDIF (SSE42_TRUE)
ELSEIF(CMAKE_SYSTEM_NAME MATCHES "Windows")
# TODO
set(SSE2_FOUND true CACHE BOOL "SSE2 available on host")
set(SSE3_FOUND false CACHE BOOL "SSE3 available on host")
set(SSSE3_FOUND false CACHE BOOL "SSSE3 available on host")
set(SSE4_1_FOUND false CACHE BOOL "SSE4.1 available on host")
set(SSE4_2_FOUND false CACHE BOOL "SSE4.2 available on host")
ELSE(CMAKE_SYSTEM_NAME MATCHES "Linux")
set(SSE2_FOUND true CACHE BOOL "SSE2 available on host")
set(SSE3_FOUND false CACHE BOOL "SSE3 available on host")
set(SSSE3_FOUND false CACHE BOOL "SSSE3 available on host")
set(SSE4_1_FOUND false CACHE BOOL "SSE4.1 available on host")
set(SSE4_2_FOUND false CACHE BOOL "SSE4.2 available on host")
ENDIF(CMAKE_SYSTEM_NAME MATCHES "Linux")
IF(CMAKE_COMPILER_IS_GNUCXX)
EXECUTE_PROCESS(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
IF(GCC_VERSION VERSION_LESS 4.2)
set(SSE4_1_FOUND false CACHE BOOL "SSE4.1 available on host" FORCE)
set(SSE4_2_FOUND false CACHE BOOL "SSE4.2 available on host" FORCE)
ENDIF()
ENDIF(CMAKE_COMPILER_IS_GNUCXX)
if(NOT SSE2_FOUND)
MESSAGE(STATUS "Could not find support for SSE2 on this machine.")
endif(NOT SSE2_FOUND)
if(NOT SSE3_FOUND)
MESSAGE(STATUS "Could not find support for SSE3 on this machine.")
endif(NOT SSE3_FOUND)
if(NOT SSSE3_FOUND)
MESSAGE(STATUS "Could not find support for SSSE3 on this machine.")
endif(NOT SSSE3_FOUND)
if(NOT SSE4_1_FOUND)
MESSAGE(STATUS "Could not find support for SSE4.1 on this machine.")
endif(NOT SSE4_1_FOUND)
if(NOT SSE4_2_FOUND)
MESSAGE(STATUS "Could not find support for SSE4.2 on this machine.")
endif(NOT SSE4_2_FOUND)
mark_as_advanced(SSE2_FOUND SSE3_FOUND SSSE3_FOUND SSE4_1_FOUND SSE4_2_FOUND)
ENDMACRO(FindSSE)
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,8 @@
# MocapNET Project
## Dataset generation
------------------------------------------------------------------
If you are interested in generating the data to train a MocapNET please use the scripts [createRandomizedDataset.sh](https://github.com/FORTH-ModelBasedTracker/MocapNET/blob/master/createRandomizedDataset.sh) and [createTestDataset.sh](https://github.com/FORTH-ModelBasedTracker/MocapNET/blob/master/createTestDataset.sh) after building the GroundTruthDumper tool. (It will be automatically generated after running the initialization script)
+141
View File
@@ -0,0 +1,141 @@
HIERARCHY
ROOT root
{
OFFSET 0 0 0
CHANNELS 6 Xposition Yposition Zposition Zrotation Yrotation Xrotation
JOINT X_Axis
{
OFFSET 10.0 0.0 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT X_Axis_Ornament
{
OFFSET 1.0 0.0 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT X_Ornament_A
{
OFFSET 0.0 0.0 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET 0.0 -5.0 -5.0
}
}
JOINT X_Ornament_B
{
OFFSET 0.0 0.0 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET 0.0 5.0 -5.0
}
}
JOINT X_Ornament_C
{
OFFSET 0.0 0.0 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET 0.0 5.0 5.0
}
}
JOINT X_Ornament_D
{
OFFSET 0.0 0.0 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET 0.0 -5.0 5.0
}
}
}
}
JOINT Y_Axis
{
OFFSET 0.0 10.0 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT Y_Axis_Ornament
{
OFFSET 0.0 1.0 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT Y_Ornament_A
{
OFFSET 0.0 0.0 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET -5.0 0.0 -5.0
}
}
JOINT Y_Ornament_B
{
OFFSET 0.0 0.0 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET 5.0 0.0 -5.0
}
}
JOINT Y_Ornament_C
{
OFFSET 0.0 0.0 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET 0.0 0.0 5.0
}
}
}
}
JOINT Z_Axis
{
OFFSET 0.0 0.0 10.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT Z_Axis_Ornament
{
OFFSET 0.0 0.0 1.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT Z_Ornament_A0
{
OFFSET -2.5 -2.5 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT Z_Ornament_A1
{
OFFSET -2.5 -2.5 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT Z_Ornament_A2
{
OFFSET 5.0 0.0 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET 5.0 0.0 0.0
}
}
}
}
JOINT Z_Ornament_B0
{
OFFSET 2.5 2.5 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT Z_Ornament_B1
{
OFFSET 2.5 2.5 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT Z_Ornament_B2
{
OFFSET -5.0 0.0 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET -5.0 0.0 0.0
}
}
}
}
}
}
}
MOTION
Frames: 1
Frame Time: 0.040000
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,276 @@
HIERARCHY
ROOT hip
{
OFFSET 0 0 0
CHANNELS 6 Xposition Yposition Zposition Zrotation Yrotation Xrotation
JOINT abdomen
{
OFFSET 0 20.6881 -0.73152
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT chest
{
OFFSET 0 11.7043 -0.48768
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT neck
{
OFFSET 0 22.1894 -2.19456
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT head
{
OFFSET -0.24384 7.07133 1.2192
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT leftEye
{
OFFSET 4.14528 8.04674 8.04672
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET 1 0 0
}
}
JOINT rightEye
{
OFFSET -3.6576 8.04674 8.04672
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET 1 0 0
}
}
}
}
JOINT rCollar
{
OFFSET -2.68224 19.2634 -4.8768
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT rShldr
{
OFFSET -8.77824 -1.95073 1.46304
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT rForeArm
{
OFFSET -28.1742 -1.7115 0.48768
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT rHand
{
OFFSET -22.5879 0.773209 7.07136
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT rThumb1
{
OFFSET -1.2192 -0.487915 3.41376
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT rThumb2
{
OFFSET -3.37035 -0.52449 3.41376
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET -1.78271 -1.18214 1.43049
}
}
}
JOINT rIndex1
{
OFFSET -7.75947 0.938293 5.60832
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT rIndex2
{
OFFSET -2.54057 -0.884171 1.56538
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET -1.62519 -0.234802 1.16502
}
}
}
JOINT rMid1
{
OFFSET -8.24714 1.18213 3.41376
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT rMid2
{
OFFSET -3.10165 -0.590103 1.0647
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET -2.48547 -0.328903 0.83742
}
}
}
JOINT rRing1
{
OFFSET -8.82822 0.546677 1.51678
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT rRing2
{
OFFSET -2.60934 -0.819778 -0.0198488
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET -2.33842 -0.294052 0.168128
}
}
}
JOINT rPinky1
{
OFFSET -8.27202 -0.0477905 -0.4584
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT rPinky2
{
OFFSET -1.82734 -0.647385 -0.700984
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET -1.69225 -0.51767 -0.607171
}
}
}
}
}
}
}
JOINT lCollar
{
OFFSET 2.68224 19.2634 -4.8768
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT lShldr
{
OFFSET 8.77824 -1.95073 1.46304
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT lForeArm
{
OFFSET 28.1742 -1.7115 0.48768
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT lHand
{
OFFSET 22.5879 0.773209 7.07136
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT lThumb1
{
OFFSET 1.2192 -0.487915 3.41376
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT lThumb2
{
OFFSET 3.37035 -0.52449 3.41376
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET 1.78271 -1.18214 1.43049
}
}
}
JOINT lIndex1
{
OFFSET 7.75947 0.938293 5.60832
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT lIndex2
{
OFFSET 2.54057 -0.884171 1.56538
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET 1.62519 -0.234802 1.16502
}
}
}
JOINT lMid1
{
OFFSET 8.24714 1.18213 3.41376
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT lMid2
{
OFFSET 3.10165 -0.590103 1.0647
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET 2.48547 -0.328903 0.83742
}
}
}
JOINT lRing1
{
OFFSET 8.82822 0.546677 1.51678
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT lRing2
{
OFFSET 2.60934 -0.819778 -0.0198488
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET 2.33842 -0.294052 0.168128
}
}
}
JOINT lPinky1
{
OFFSET 8.27202 -0.0477905 -0.4584
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT lPinky2
{
OFFSET 1.82734 -0.647385 -0.700984
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET 1.69225 -0.51767 -0.607171
}
}
}
}
}
}
}
}
}
JOINT rButtock
{
OFFSET -8.77824 4.35084 1.2192
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT rThigh
{
OFFSET 0 -1.70687 -2.19456
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT rShin
{
OFFSET 0 -36.8199 0.73152
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT rFoot
{
OFFSET 0.73152 -45.1104 -5.12064
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET -1.1221 -3.69964 12.103
}
}
}
}
}
JOINT lButtock
{
OFFSET 8.77824 4.35084 1.2192
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT lThigh
{
OFFSET 0 -1.70687 -2.19456
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT lShin
{
OFFSET 0 -36.8199 0.73152
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT lFoot
{
OFFSET -0.73152 -45.1104 -5.12064
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET 1.1221 -3.69964 12.103
}
}
}
}
}
}
MOTION
Frames: 1
Frame Time: 0.04
-36.9591 -6.6997 -109.9615 1.6043 -4.3309 5.0092 0.5097 6.5673 1.3846 -0.0103 -0.0119 0.0508 -8.6191 3.2278 -3.0830 12.7205 0.1189 -1.1459 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 52.8597 33.4915 1.4029 -17.6149 -9.0171 30.5911 -2.2427 12.5892 2.8079 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0239 0.0136 0.0138 0.0000 0.0000 0.0000 0.0304 0.0086 0.0160 0.0000 0.0000 0.0000 0.0156 0.0211 0.0357 0.0000 0.0000 0.0000 0.0280 -0.0226 -0.0298 0.0000 0.0000 0.0000 -65.5102 14.9901 -0.2439 19.8193 -15.0257 -36.4212 0.3359 -3.4324 1.3281 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0134 0.0062 -0.0052 0.0000 0.0000 0.0000 -0.0334 0.0306 -0.0050 0.0000 0.0000 0.0000 -0.0305 0.0041 -0.0329 0.0000 0.0000 0.0000 -0.0039 -0.0187 0.0140 0.0000 0.0000 0.0000 -2.8009 -15.7151 -7.3415 -1.0408 24.0401 0.0885 -3.2956 -8.0185 -8.6331 0.0000 0.0000 0.0000 0.6124 -9.9020 -2.4375 0.6809 24.1049 -0.8555 0.7591 -9.1731 2.8152
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,562 @@
# This is a rendering configuration for ../dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/
#
# If you want to make a new 3D model to replace the default one install makehuman, install the CMU plus Face rig ( http://www.makehuman.org/content/cmu_plus_face.html )
# select it as the used rig and make the body pose at a t-pose, finally export it as Collada(dae) with Feet on ground , Y up, face Z , Bone orienation Local=Global and decimeters
#
# compile assimpTester in ../dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/submodules/Assimp
# ./assimpTester --convert makehumanexports/newmodel.dae makehuman.tri --paint 123 123 123
#
# copy the new makehuman.tri to your dataset/makehuman.tri
#
# You can verify that it is properly rendering without running the demo
# cd ../dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/
# mkdir build
# cd build && cmake .. && make
# cd ..
# ./Renderer --from path/to/this/human3D.conf
#
BACKGROUND(0,0,0)
#INCLUDE(Scenes/renderLikeMBVRH.conf)
#This is the way to render like the mbv renderer :)
AUTOREFRESH(1500)
NEAR_CLIP(0.1)
FAR_CLIP(1000)
#Bring our world to the MBV coordinate system
SCALE_WORLD(-0.01,-0.01,0.01)
MAP_ROTATIONS(-1,-1,1,zxy)
OFFSET_ROTATIONS(0,0,0)
#EMULATE_PROJECTION_MATRIX(535.423889 , 0.0 , 320.0 , 0.0 , 533.48468, 240.0 , 0 , 1)
EMULATE_PROJECTION_MATRIX(582.18394 , 0.0 , 960.0 , 0.0 , 582.52915, 540.0 , 0 , 1)
SILENT(1)
RATE(120)
INTERPOLATE_TIME(1)
MOVE_VIEW(1)
OBJECT_TYPE(floorType,grid)
#OBJECT(floor,floorType,0,235,255,0 ,0, 50.0,50.0,50.0)
OBJECT_TYPE(humanMesh,dataset/makehuman.tri,http://ammar.gr/mocapnet/makehuman.tri)
RIGID_OBJECT(human,humanMesh, 255,0,0,0,0 ,1.0,1.0,1.0)
LIGHT(0,0,-100)
#Note of all the bones in file..
Bone 0 : Scene
Bone 1 : CMU+Face_compliant_skeleton
Bone 2 : Hips
Bone 3 : LHipJoint
Bone 4 : LeftUpLeg
Bone 5 : LeftLeg
Bone 6 : LeftFoot
Bone 7 : LeftToeBase
Bone 8 : LowerBack
Bone 9 : Spine
Bone 10 : Spine1
Bone 11 : LeftShoulder
Bone 12 : LeftArm
Bone 13 : LeftForeArm
Bone 14 : LeftHand
Bone 15 : metacarpal1_L
Bone 16 : finger2-1_L
Bone 17 : finger2-2_L
Bone 18 : finger2-3_L
Bone 19 : metacarpal2_L
Bone 20 : finger3-1_L
Bone 21 : finger3-2_L
Bone 22 : finger3-3_L
Bone 23 : metacarpal3_L
Bone 24 : finger4-1_L
Bone 25 : finger4-2_L
Bone 26 : finger4-3_L
Bone 27 : metacarpal4_L
Bone 28 : finger5-1_L
Bone 29 : finger5-2_L
Bone 30 : finger5-3_L
Bone 31 : LThumb
Bone 32 : finger1-2_L
Bone 33 : finger1-3_L
Bone 34 : Neck
Bone 35 : Neck1
Bone 36 : Head
Bone 37 : jaw
Bone 38 : special04
Bone 39 : oris02
Bone 40 : oris01
Bone 41 : oris06_L
Bone 42 : oris07_L
Bone 43 : oris06_R
Bone 44 : oris07_R
Bone 45 : tongue00
Bone 46 : tongue01
Bone 47 : tongue02
Bone 48 : tongue03
Bone 49 : tongue04
Bone 50 : tongue07_L
Bone 51 : tongue07_R
Bone 52 : tongue06_L
Bone 53 : tongue06_R
Bone 54 : tongue05_L
Bone 55 : tongue05_R
Bone 56 : levator02_L
Bone 57 : levator03_L
Bone 58 : levator04_L
Bone 59 : levator05_L
Bone 60 : levator02_R
Bone 61 : levator03_R
Bone 62 : levator04_R
Bone 63 : levator05_R
Bone 64 : special01
Bone 65 : oris04_L
Bone 66 : oris03_L
Bone 67 : oris04_R
Bone 68 : oris03_R
Bone 69 : oris06
Bone 70 : oris05
Bone 71 : special03
Bone 72 : levator06_L
Bone 73 : levator06_R
Bone 74 : special06_L
Bone 75 : special05_L
Bone 76 : eye_L
Bone 77 : orbicularis03_L
Bone 78 : orbicularis04_L
Bone 79 : special06_R
Bone 80 : special05_R
Bone 81 : eye_R
Bone 82 : orbicularis03_R
Bone 83 : orbicularis04_R
Bone 84 : temporalis01_L
Bone 85 : oculi02_L
Bone 86 : oculi01_L
Bone 87 : temporalis01_R
Bone 88 : oculi02_R
Bone 89 : oculi01_R
Bone 90 : temporalis02_L
Bone 91 : risorius02_L
Bone 92 : risorius03_L
Bone 93 : temporalis02_R
Bone 94 : risorius02_R
Bone 95 : risorius03_R
Bone 96 : RightShoulder
Bone 97 : RightArm
Bone 98 : RightForeArm
Bone 99 : RightHand
Bone 100 : metacarpal1_R
Bone 101 : finger2-1_R
Bone 102 : finger2-2_R
Bone 103 : finger2-3_R
Bone 104 : metacarpal2_R
Bone 105 : finger3-1_R
Bone 106 : finger3-2_R
Bone 107 : finger3-3_R
Bone 108 : metacarpal3_R
Bone 109 : finger4-1_R
Bone 110 : finger4-2_R
Bone 111 : finger4-3_R
Bone 112 : metacarpal4_R
Bone 113 : finger5-1_R
Bone 114 : finger5-2_R
Bone 115 : finger5-3_R
Bone 116 : RThumb
Bone 117 : finger1-2_R
Bone 118 : finger1-3_R
Bone 119 : RHipJoint
Bone 120 : RightUpLeg
Bone 121 : RightLeg
Bone 122 : RightFoot
Bone 123 : RightToeBase
Bone 124 : newmodel-baseObject
Bone 125 : newmodel-highpolyeyesObject
#cat human3D.conf | grep Bone | cut -d':' -f2 | tr '\n' '~' | tr -d '[:blank:]' | sed -e 's/\~/,ZXY)\nPOSE_ROTATION_ORDER\(human,/g'
OBJECT_ROTATION_ORDER(human,ZYX)
POSE_ROTATION_ORDER(human,Hips,ZYX)
POSE_ROTATION_ORDER(human,LHipJoint,ZXY)
POSE_ROTATION_ORDER(human,LeftUpLeg,ZXY)
POSE_ROTATION_ORDER(human,LeftLeg,ZXY)
POSE_ROTATION_ORDER(human,LeftFoot,ZXY)
POSE_ROTATION_ORDER(human,LeftToeBase,ZXY)
POSE_ROTATION_ORDER(human,LowerBack,ZXY)
POSE_ROTATION_ORDER(human,Spine,ZXY)
POSE_ROTATION_ORDER(human,Spine1,ZXY)
POSE_ROTATION_ORDER(human,LeftShoulder,ZXY)
POSE_ROTATION_ORDER(human,LeftArm,ZXY)
POSE_ROTATION_ORDER(human,LeftForeArm,ZXY)
POSE_ROTATION_ORDER(human,LeftHand,ZXY)
POSE_ROTATION_ORDER(human,metacarpal1_L,ZXY)
POSE_ROTATION_ORDER(human,finger2-1_L,ZXY)
POSE_ROTATION_ORDER(human,finger2-2_L,ZXY)
POSE_ROTATION_ORDER(human,finger2-3_L,ZXY)
POSE_ROTATION_ORDER(human,metacarpal2_L,ZXY)
POSE_ROTATION_ORDER(human,finger3-1_L,ZXY)
POSE_ROTATION_ORDER(human,finger3-2_L,ZXY)
POSE_ROTATION_ORDER(human,finger3-3_L,ZXY)
POSE_ROTATION_ORDER(human,metacarpal3_L,ZXY)
POSE_ROTATION_ORDER(human,finger4-1_L,ZXY)
POSE_ROTATION_ORDER(human,finger4-2_L,ZXY)
POSE_ROTATION_ORDER(human,finger4-3_L,ZXY)
POSE_ROTATION_ORDER(human,metacarpal4_L,ZXY)
POSE_ROTATION_ORDER(human,finger5-1_L,ZXY)
POSE_ROTATION_ORDER(human,finger5-2_L,ZXY)
POSE_ROTATION_ORDER(human,finger5-3_L,ZXY)
POSE_ROTATION_ORDER(human,LThumb,ZXY)
POSE_ROTATION_ORDER(human,finger1-2_L,ZXY)
POSE_ROTATION_ORDER(human,finger1-3_L,ZXY)
POSE_ROTATION_ORDER(human,Neck,ZXY)
POSE_ROTATION_ORDER(human,Neck1,ZXY)
POSE_ROTATION_ORDER(human,Head,ZXY)
POSE_ROTATION_ORDER(human,jaw,ZXY)
POSE_ROTATION_ORDER(human,special04,ZXY)
POSE_ROTATION_ORDER(human,oris02,ZXY)
POSE_ROTATION_ORDER(human,oris01,ZXY)
POSE_ROTATION_ORDER(human,oris06_L,ZXY)
POSE_ROTATION_ORDER(human,oris07_L,ZXY)
POSE_ROTATION_ORDER(human,oris06_R,ZXY)
POSE_ROTATION_ORDER(human,oris07_R,ZXY)
POSE_ROTATION_ORDER(human,tongue00,ZXY)
POSE_ROTATION_ORDER(human,tongue01,ZXY)
POSE_ROTATION_ORDER(human,tongue02,ZXY)
POSE_ROTATION_ORDER(human,tongue03,ZXY)
POSE_ROTATION_ORDER(human,tongue04,ZXY)
POSE_ROTATION_ORDER(human,tongue07_L,ZXY)
POSE_ROTATION_ORDER(human,tongue07_R,ZXY)
POSE_ROTATION_ORDER(human,tongue06_L,ZXY)
POSE_ROTATION_ORDER(human,tongue06_R,ZXY)
POSE_ROTATION_ORDER(human,tongue05_L,ZXY)
POSE_ROTATION_ORDER(human,tongue05_R,ZXY)
POSE_ROTATION_ORDER(human,levator02_L,ZXY)
POSE_ROTATION_ORDER(human,levator03_L,ZXY)
POSE_ROTATION_ORDER(human,levator04_L,ZXY)
POSE_ROTATION_ORDER(human,levator05_L,ZXY)
POSE_ROTATION_ORDER(human,levator02_R,ZXY)
POSE_ROTATION_ORDER(human,levator03_R,ZXY)
POSE_ROTATION_ORDER(human,levator04_R,ZXY)
POSE_ROTATION_ORDER(human,levator05_R,ZXY)
POSE_ROTATION_ORDER(human,special01,ZXY)
POSE_ROTATION_ORDER(human,oris04_L,ZXY)
POSE_ROTATION_ORDER(human,oris03_L,ZXY)
POSE_ROTATION_ORDER(human,oris04_R,ZXY)
POSE_ROTATION_ORDER(human,oris03_R,ZXY)
POSE_ROTATION_ORDER(human,oris06,ZXY)
POSE_ROTATION_ORDER(human,oris05,ZXY)
POSE_ROTATION_ORDER(human,special03,ZXY)
POSE_ROTATION_ORDER(human,levator06_L,ZXY)
POSE_ROTATION_ORDER(human,levator06_R,ZXY)
POSE_ROTATION_ORDER(human,special06_L,ZXY)
POSE_ROTATION_ORDER(human,special05_L,ZXY)
POSE_ROTATION_ORDER(human,eye_L,ZXY)
POSE_ROTATION_ORDER(human,orbicularis03_L,ZXY)
POSE_ROTATION_ORDER(human,orbicularis04_L,ZXY)
POSE_ROTATION_ORDER(human,special06_R,ZXY)
POSE_ROTATION_ORDER(human,special05_R,ZXY)
POSE_ROTATION_ORDER(human,eye_R,ZXY)
POSE_ROTATION_ORDER(human,orbicularis03_R,ZXY)
POSE_ROTATION_ORDER(human,orbicularis04_R,ZXY)
POSE_ROTATION_ORDER(human,temporalis01_L,ZXY)
POSE_ROTATION_ORDER(human,oculi02_L,ZXY)
POSE_ROTATION_ORDER(human,oculi01_L,ZXY)
POSE_ROTATION_ORDER(human,temporalis01_R,ZXY)
POSE_ROTATION_ORDER(human,oculi02_R,ZXY)
POSE_ROTATION_ORDER(human,oculi01_R,ZXY)
POSE_ROTATION_ORDER(human,temporalis02_L,ZXY)
POSE_ROTATION_ORDER(human,risorius02_L,ZXY)
POSE_ROTATION_ORDER(human,risorius03_L,ZXY)
POSE_ROTATION_ORDER(human,temporalis02_R,ZXY)
POSE_ROTATION_ORDER(human,risorius02_R,ZXY)
POSE_ROTATION_ORDER(human,risorius03_R,ZXY)
POSE_ROTATION_ORDER(human,RightShoulder,ZXY)
POSE_ROTATION_ORDER(human,RightArm,ZXY)
POSE_ROTATION_ORDER(human,RightForeArm,ZXY)
POSE_ROTATION_ORDER(human,RightHand,ZXY)
POSE_ROTATION_ORDER(human,metacarpal1_R,ZXY)
POSE_ROTATION_ORDER(human,finger2-1_R,ZXY)
POSE_ROTATION_ORDER(human,finger2-2_R,ZXY)
POSE_ROTATION_ORDER(human,finger2-3_R,ZXY)
POSE_ROTATION_ORDER(human,metacarpal2_R,ZXY)
POSE_ROTATION_ORDER(human,finger3-1_R,ZXY)
POSE_ROTATION_ORDER(human,finger3-2_R,ZXY)
POSE_ROTATION_ORDER(human,finger3-3_R,ZXY)
POSE_ROTATION_ORDER(human,metacarpal3_R,ZXY)
POSE_ROTATION_ORDER(human,finger4-1_R,ZXY)
POSE_ROTATION_ORDER(human,finger4-2_R,ZXY)
POSE_ROTATION_ORDER(human,finger4-3_R,ZXY)
POSE_ROTATION_ORDER(human,metacarpal4_R,ZXY)
POSE_ROTATION_ORDER(human,finger5-1_R,ZXY)
POSE_ROTATION_ORDER(human,finger5-2_R,ZXY)
POSE_ROTATION_ORDER(human,finger5-3_R,ZXY)
POSE_ROTATION_ORDER(human,RThumb,ZXY)
POSE_ROTATION_ORDER(human,finger1-2_R,ZXY)
POSE_ROTATION_ORDER(human,finger1-3_R,ZXY)
POSE_ROTATION_ORDER(human,RHipJoint,ZXY)
POSE_ROTATION_ORDER(human,RightUpLeg,ZXY)
POSE_ROTATION_ORDER(human,RightLeg,ZXY)
POSE_ROTATION_ORDER(human,RightFoot,ZXY)
POSE_ROTATION_ORDER(human,RightToeBase,ZXY)
#MOVE(floor,0,0.0,2784.976,3699.735,0.0,0.0,0.0,0.0)
#Root joint euler angle order ZYX
MOVE(human,0,0.0,900.0,2000,0.0,180.0,0.0)
#cat human3D.conf | grep Bone | cut -d':' -f2 | tr '\n' '~' | tr -d '[:blank:]' | sed -e 's/\~/,0,0,0)\nPOSE(human,0,/g'
POSE(human,0,Hips,0,0,0)
POSE(human,0,LHipJoint,0,0,0)
POSE(human,0,LeftUpLeg,0,0,0)
POSE(human,0,LeftLeg,0,0,0)
POSE(human,0,LeftFoot,0,0,0)
POSE(human,0,LeftToeBase,0,0,0)
POSE(human,0,LowerBack,0,0,0)
POSE(human,0,Spine,0,0,0)
POSE(human,0,Spine1,0,0,0)
POSE(human,0,LeftShoulder,0,0,0)
POSE(human,0,LeftArm,0,0,0)
POSE(human,0,LeftForeArm,0,0,0)
POSE(human,0,LeftHand,0,0,0)
POSE(human,0,metacarpal1_L,0,0,0)
POSE(human,0,finger2-1_L,0,0,0)
POSE(human,0,finger2-2_L,0,0,0)
POSE(human,0,finger2-3_L,0,0,0)
POSE(human,0,metacarpal2_L,0,0,0)
POSE(human,0,finger3-1_L,0,0,0)
POSE(human,0,finger3-2_L,0,0,0)
POSE(human,0,finger3-3_L,0,0,0)
POSE(human,0,metacarpal3_L,0,0,0)
POSE(human,0,finger4-1_L,0,0,0)
POSE(human,0,finger4-2_L,0,0,0)
POSE(human,0,finger4-3_L,0,0,0)
POSE(human,0,metacarpal4_L,0,0,0)
POSE(human,0,finger5-1_L,0,0,0)
POSE(human,0,finger5-2_L,0,0,0)
POSE(human,0,finger5-3_L,0,0,0)
POSE(human,0,LThumb,0,0,0)
POSE(human,0,finger1-2_L,0,0,0)
POSE(human,0,finger1-3_L,0,0,0)
POSE(human,0,Neck,0,0,0)
POSE(human,0,Neck1,0,0,0)
POSE(human,0,Head,0,0,0)
POSE(human,0,jaw,0,0,0)
POSE(human,0,special04,0,0,0)
POSE(human,0,oris02,0,0,0)
POSE(human,0,oris01,0,0,0)
POSE(human,0,oris06_L,0,0,0)
POSE(human,0,oris07_L,0,0,0)
POSE(human,0,oris06_R,0,0,0)
POSE(human,0,oris07_R,0,0,0)
POSE(human,0,tongue00,0,0,0)
POSE(human,0,tongue01,0,0,0)
POSE(human,0,tongue02,0,0,0)
POSE(human,0,tongue03,0,0,0)
POSE(human,0,tongue04,0,0,0)
POSE(human,0,tongue07_L,0,0,0)
POSE(human,0,tongue07_R,0,0,0)
POSE(human,0,tongue06_L,0,0,0)
POSE(human,0,tongue06_R,0,0,0)
POSE(human,0,tongue05_L,0,0,0)
POSE(human,0,tongue05_R,0,0,0)
POSE(human,0,levator02_L,0,0,0)
POSE(human,0,levator03_L,0,0,0)
POSE(human,0,levator04_L,0,0,0)
POSE(human,0,levator05_L,0,0,0)
POSE(human,0,levator02_R,0,0,0)
POSE(human,0,levator03_R,0,0,0)
POSE(human,0,levator04_R,0,0,0)
POSE(human,0,levator05_R,0,0,0)
POSE(human,0,special01,0,0,0)
POSE(human,0,oris04_L,0,0,0)
POSE(human,0,oris03_L,0,0,0)
POSE(human,0,oris04_R,0,0,0)
POSE(human,0,oris03_R,0,0,0)
POSE(human,0,oris06,0,0,0)
POSE(human,0,oris05,0,0,0)
POSE(human,0,special03,0,0,0)
POSE(human,0,levator06_L,0,0,0)
POSE(human,0,levator06_R,0,0,0)
POSE(human,0,special06_L,0,0,0)
POSE(human,0,special05_L,0,0,0)
POSE(human,0,eye_L,0,0,0)
POSE(human,0,orbicularis03_L,0,0,0)
POSE(human,0,orbicularis04_L,0,0,0)
POSE(human,0,special06_R,0,0,0)
POSE(human,0,special05_R,0,0,0)
POSE(human,0,eye_R,0,0,0)
POSE(human,0,orbicularis03_R,0,0,0)
POSE(human,0,orbicularis04_R,0,0,0)
POSE(human,0,temporalis01_L,0,0,0)
POSE(human,0,oculi02_L,0,0,0)
POSE(human,0,oculi01_L,0,0,0)
POSE(human,0,temporalis01_R,0,0,0)
POSE(human,0,oculi02_R,0,0,0)
POSE(human,0,oculi01_R,0,0,0)
POSE(human,0,temporalis02_L,0,0,0)
POSE(human,0,risorius02_L,0,0,0)
POSE(human,0,risorius03_L,0,0,0)
POSE(human,0,temporalis02_R,0,0,0)
POSE(human,0,risorius02_R,0,0,0)
POSE(human,0,risorius03_R,0,0,0)
POSE(human,0,RightShoulder,0,0,0)
POSE(human,0,RightArm,0,0,0)
POSE(human,0,RightForeArm,0,0,0)
POSE(human,0,RightHand,0,0,0)
POSE(human,0,metacarpal1_R,0,0,0)
POSE(human,0,finger2-1_R,0,0,0)
POSE(human,0,finger2-2_R,0,0,0)
POSE(human,0,finger2-3_R,0,0,0)
POSE(human,0,metacarpal2_R,0,0,0)
POSE(human,0,finger3-1_R,0,0,0)
POSE(human,0,finger3-2_R,0,0,0)
POSE(human,0,finger3-3_R,0,0,0)
POSE(human,0,metacarpal3_R,0,0,0)
POSE(human,0,finger4-1_R,0,0,0)
POSE(human,0,finger4-2_R,0,0,0)
POSE(human,0,finger4-3_R,0,0,0)
POSE(human,0,metacarpal4_R,0,0,0)
POSE(human,0,finger5-1_R,0,0,0)
POSE(human,0,finger5-2_R,0,0,0)
POSE(human,0,finger5-3_R,0,0,0)
POSE(human,0,RThumb,0,0,0)
POSE(human,0,finger1-2_R,0,0,0)
POSE(human,0,finger1-3_R,0,0,0)
POSE(human,0,RHipJoint,0,0,0)
POSE(human,0,RightUpLeg,0,0,0)
POSE(human,0,RightLeg,0,0,0)
POSE(human,0,RightFoot,0,0,0)
POSE(human,0,RightToeBase,0,0,0)
#MOVE(floor,1,-19.231,2784.976,3699.735,0.0,0.0,0.0,0.0)
#Root joint euler angle order ZYX
MOVE(human,1,0.0,900.0,2000,0.0,180.0,0.0)
#cat human3D.conf | grep Bone | cut -d':' -f2 | tr '\n' '~' | tr -d '[:blank:]' | sed -e 's/\~/,0,0,0)\nPOSE(human,1,/g'
POSE(human,1,Hips,0,0,0)
POSE(human,1,LHipJoint,0,0,0)
POSE(human,1,LeftUpLeg,0,0,0)
POSE(human,1,LeftLeg,0,0,0)
POSE(human,1,LeftFoot,0,0,0)
POSE(human,1,LeftToeBase,0,0,0)
POSE(human,1,LowerBack,0,0,0)
POSE(human,1,Spine,0,0,0)
POSE(human,1,Spine1,0,0,0)
POSE(human,1,LeftShoulder,0,0,0)
POSE(human,1,LeftArm,0,0,0)
POSE(human,1,LeftForeArm,0,0,0)
POSE(human,1,LeftHand,0,0,0)
POSE(human,1,metacarpal1_L,0,0,0)
POSE(human,1,finger2-1_L,0,0,0)
POSE(human,1,finger2-2_L,0,0,0)
POSE(human,1,finger2-3_L,0,0,0)
POSE(human,1,metacarpal2_L,0,0,0)
POSE(human,1,finger3-1_L,0,0,0)
POSE(human,1,finger3-2_L,0,0,0)
POSE(human,1,finger3-3_L,0,0,0)
POSE(human,1,metacarpal3_L,0,0,0)
POSE(human,1,finger4-1_L,0,0,0)
POSE(human,1,finger4-2_L,0,0,0)
POSE(human,1,finger4-3_L,0,0,0)
POSE(human,1,metacarpal4_L,0,0,0)
POSE(human,1,finger5-1_L,0,0,0)
POSE(human,1,finger5-2_L,0,0,0)
POSE(human,1,finger5-3_L,0,0,0)
POSE(human,1,LThumb,0,0,0)
POSE(human,1,finger1-2_L,0,0,0)
POSE(human,1,finger1-3_L,0,0,0)
POSE(human,1,Neck,0,0,0)
POSE(human,1,Neck1,0,0,0)
POSE(human,1,Head,0,0,0)
POSE(human,1,jaw,0,0,0)
POSE(human,1,special04,0,0,0)
POSE(human,1,oris02,0,0,0)
POSE(human,1,oris01,0,0,0)
POSE(human,1,oris06_L,0,0,0)
POSE(human,1,oris07_L,0,0,0)
POSE(human,1,oris06_R,0,0,0)
POSE(human,1,oris07_R,0,0,0)
POSE(human,1,tongue00,0,0,0)
POSE(human,1,tongue01,0,0,0)
POSE(human,1,tongue02,0,0,0)
POSE(human,1,tongue03,0,0,0)
POSE(human,1,tongue04,0,0,0)
POSE(human,1,tongue07_L,0,0,0)
POSE(human,1,tongue07_R,0,0,0)
POSE(human,1,tongue06_L,0,0,0)
POSE(human,1,tongue06_R,0,0,0)
POSE(human,1,tongue05_L,0,0,0)
POSE(human,1,tongue05_R,0,0,0)
POSE(human,1,levator02_L,0,0,0)
POSE(human,1,levator03_L,0,0,0)
POSE(human,1,levator04_L,0,0,0)
POSE(human,1,levator05_L,0,0,0)
POSE(human,1,levator02_R,0,0,0)
POSE(human,1,levator03_R,0,0,0)
POSE(human,1,levator04_R,0,0,0)
POSE(human,1,levator05_R,0,0,0)
POSE(human,1,special01,0,0,0)
POSE(human,1,oris04_L,0,0,0)
POSE(human,1,oris03_L,0,0,0)
POSE(human,1,oris04_R,0,0,0)
POSE(human,1,oris03_R,0,0,0)
POSE(human,1,oris06,0,0,0)
POSE(human,1,oris05,0,0,0)
POSE(human,1,special03,0,0,0)
POSE(human,1,levator06_L,0,0,0)
POSE(human,1,levator06_R,0,0,0)
POSE(human,1,special06_L,0,0,0)
POSE(human,1,special05_L,0,0,0)
POSE(human,1,eye_L,0,0,0)
POSE(human,1,orbicularis03_L,0,0,0)
POSE(human,1,orbicularis04_L,0,0,0)
POSE(human,1,special06_R,0,0,0)
POSE(human,1,special05_R,0,0,0)
POSE(human,1,eye_R,0,0,0)
POSE(human,1,orbicularis03_R,0,0,0)
POSE(human,1,orbicularis04_R,0,0,0)
POSE(human,1,temporalis01_L,0,0,0)
POSE(human,1,oculi02_L,0,0,0)
POSE(human,1,oculi01_L,0,0,0)
POSE(human,1,temporalis01_R,0,0,0)
POSE(human,1,oculi02_R,0,0,0)
POSE(human,1,oculi01_R,0,0,0)
POSE(human,1,temporalis02_L,0,0,0)
POSE(human,1,risorius02_L,0,0,0)
POSE(human,1,risorius03_L,0,0,0)
POSE(human,1,temporalis02_R,0,0,0)
POSE(human,1,risorius02_R,0,0,0)
POSE(human,1,risorius03_R,0,0,0)
POSE(human,1,RightShoulder,0,0,0)
POSE(human,1,RightArm,0,0,0)
POSE(human,1,RightForeArm,0,0,0)
POSE(human,1,RightHand,0,0,0)
POSE(human,1,metacarpal1_R,0,0,0)
POSE(human,1,finger2-1_R,0,0,0)
POSE(human,1,finger2-2_R,0,0,0)
POSE(human,1,finger2-3_R,0,0,0)
POSE(human,1,metacarpal2_R,0,0,0)
POSE(human,1,finger3-1_R,0,0,0)
POSE(human,1,finger3-2_R,0,0,0)
POSE(human,1,finger3-3_R,0,0,0)
POSE(human,1,metacarpal3_R,0,0,0)
POSE(human,1,finger4-1_R,0,0,0)
POSE(human,1,finger4-2_R,0,0,0)
POSE(human,1,finger4-3_R,0,0,0)
POSE(human,1,metacarpal4_R,0,0,0)
POSE(human,1,finger5-1_R,0,0,0)
POSE(human,1,finger5-2_R,0,0,0)
POSE(human,1,finger5-3_R,0,0,0)
POSE(human,1,RThumb,0,0,0)
POSE(human,1,finger1-2_R,0,0,0)
POSE(human,1,finger1-3_R,0,0,0)
POSE(human,1,RHipJoint,0,0,0)
POSE(human,1,RightUpLeg,0,0,0)
POSE(human,1,RightLeg,0,0,0)
POSE(human,1,RightFoot,0,0,0)
POSE(human,1,RightToeBase,0,0,0)
POSE(human,1,newmodel-baseObject,0,0,0)
POSE(human,1,newmodel-highpolyeyesObject,0,0,0)
@@ -0,0 +1,140 @@
HIERARCHY
ROOT lHand
{
OFFSET 0 0 0
CHANNELS 6 Xposition Yposition Zposition Zrotation Yrotation Xrotation
JOINT metacarpal1.l
{
OFFSET 4.0 -0.27 2.00
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger2-1.l
{
OFFSET 4.5 0.27 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger2-2.l
{
OFFSET 3.5 -0.32 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger2-3.l
{
OFFSET 2.1 -0.29 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET 1.98 -0.68 0.0
}
}
}
}
}
JOINT metacarpal2.l
{
OFFSET 4.0 -0.27 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger3-1.l
{
OFFSET 4.50 0.62 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger3-2.l
{
OFFSET 3.97 -0.58 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger3-3.l
{
OFFSET 2.5 -0.42 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET 1.964 -0.73 0.00
}
}
}
}
}
JOINT __metacarpal3.l
{
OFFSET 2.5 -0.27 -2.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT metacarpal3.l
{
OFFSET 1.5 -0.16 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger4-1.l
{
OFFSET 4.5 0.70 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger4-2.l
{
OFFSET 3.67 -0.48 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger4-3.l
{
OFFSET 2.27 -0.35 -0.0
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET 1.904 -0.62 0.0
}
}
}
}
}
}
JOINT __metacarpal4.l
{
OFFSET 2.0 -0.27 -3.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT metacarpal4.l
{
OFFSET 2.0 -0.16 -1.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger5-1.l
{
OFFSET 4.0 0.17 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger5-2.l
{
OFFSET 3.2 -0.17 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger5-3.l
{
OFFSET 1.495 -0.10 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET 1.9 -0.10 0.0
}
}
}
}
}
}
JOINT lthumbBase
{
OFFSET 2.0 -0.279 4.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT lthumb
{
OFFSET 2.0 -0.142 1.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger1-2.l
{
OFFSET 1.9598 -2.10 1.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger1-3.l
{
OFFSET 2.76 -0.46 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET 2.595 -0.16 0.0
}
}
}
}
}
}
MOTION
Frames: 1
Frame Time: 0.040000
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
@@ -0,0 +1,140 @@
HIERARCHY
ROOT lHand
{
OFFSET 0 0 0
CHANNELS 7 Xposition Yposition Zposition Wrotation Xrotation Yrotation Zrotation
JOINT metacarpal1.l
{
OFFSET 4.0 -0.27 2.00
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger2-1.l
{
OFFSET 4.5 0.27 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger2-2.l
{
OFFSET 3.5 -0.32 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger2-3.l
{
OFFSET 2.1 -0.29 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET 1.98 -0.68 0.0
}
}
}
}
}
JOINT metacarpal2.l
{
OFFSET 4.0 -0.27 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger3-1.l
{
OFFSET 4.50 0.62 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger3-2.l
{
OFFSET 3.97 -0.58 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger3-3.l
{
OFFSET 2.5 -0.42 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET 1.964 -0.73 0.00
}
}
}
}
}
JOINT __metacarpal3.l
{
OFFSET 2.5 -0.27 -2.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT metacarpal3.l
{
OFFSET 1.5 -0.16 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger4-1.l
{
OFFSET 4.5 0.70 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger4-2.l
{
OFFSET 3.67 -0.48 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger4-3.l
{
OFFSET 2.27 -0.35 -0.0
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET 1.904 -0.62 0.0
}
}
}
}
}
}
JOINT __metacarpal4.l
{
OFFSET 2.0 -0.27 -3.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT metacarpal4.l
{
OFFSET 2.0 -0.16 -1.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger5-1.l
{
OFFSET 4.0 0.17 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger5-2.l
{
OFFSET 3.2 -0.17 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger5-3.l
{
OFFSET 1.495 -0.10 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET 1.9 -0.10 0.0
}
}
}
}
}
}
JOINT lthumbBase
{
OFFSET 0.0 -0.279 2.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT lthumb
{
OFFSET 2.0 -0.142 1.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger1-2.l
{
OFFSET 1.9598 -2.10 1.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger1-3.l
{
OFFSET 2.76 -0.46 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET 2.595 -0.16 0.0
}
}
}
}
}
}
MOTION
Frames: 1
Frame Time: 0.040000
0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
@@ -0,0 +1,140 @@
HIERARCHY
ROOT rHand
{
OFFSET 0 0 0
CHANNELS 6 Xposition Yposition Zposition Zrotation Yrotation Xrotation
JOINT metacarpal1.r
{
OFFSET -4.0 -0.27 2.00
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger2-1.r
{
OFFSET -4.5 0.27 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger2-2.r
{
OFFSET -3.5 -0.32 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger2-3.r
{
OFFSET -2.1 -0.29 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET -1.98 -0.68 0.0
}
}
}
}
}
JOINT metacarpal2.r
{
OFFSET -4.0 -0.27 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger3-1.r
{
OFFSET -4.50 0.62 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger3-2.r
{
OFFSET -3.97 -0.58 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger3-3.r
{
OFFSET -2.5 -0.42 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET -1.964 -0.73 0.00
}
}
}
}
}
JOINT __metacarpal3.r
{
OFFSET -2.5 -0.27 -2.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT metacarpal3.r
{
OFFSET -1.5 -0.16 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger4-1.r
{
OFFSET -4.5 0.70 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger4-2.r
{
OFFSET -3.67 -0.48 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger4-3.r
{
OFFSET -2.27 -0.35 -0.0
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET -1.904 -0.62 0.0
}
}
}
}
}
}
JOINT __metacarpal4.r
{
OFFSET -2.0 -0.27 -3.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT metacarpal4.r
{
OFFSET -2.0 -0.16 -1.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger5-1.r
{
OFFSET -4.0 0.17 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger5-2.r
{
OFFSET -3.2 -0.17 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger5-3.r
{
OFFSET -1.495 -0.10 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET -1.9 -0.10 0.0
}
}
}
}
}
}
JOINT rthumbBase
{
OFFSET -2.0 -0.279 4.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT rthumb
{
OFFSET -2.0 -0.142 1.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger1-2.r
{
OFFSET -1.9598 -2.10 1.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger1-3.r
{
OFFSET -2.76 -0.46 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET -2.595 -0.16 0.0
}
}
}
}
}
}
MOTION
Frames: 1
Frame Time: 0.040000
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
@@ -0,0 +1,140 @@
HIERARCHY
ROOT rHand
{
OFFSET 0 0 0
CHANNELS 7 Xposition Yposition Zposition Wrotation Xrotation Yrotation Zrotation
JOINT metacarpal1.r
{
OFFSET -4.0 -0.27 2.00
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger2-1.r
{
OFFSET -4.5 0.27 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger2-2.r
{
OFFSET -3.5 -0.32 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger2-3.r
{
OFFSET -2.1 -0.29 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET -1.98 -0.68 0.0
}
}
}
}
}
JOINT metacarpal2.r
{
OFFSET -4.0 -0.27 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger3-1.r
{
OFFSET -4.50 0.62 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger3-2.r
{
OFFSET -3.97 -0.58 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger3-3.r
{
OFFSET -2.5 -0.42 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET -1.964 -0.73 0.00
}
}
}
}
}
JOINT __metacarpal3.r
{
OFFSET -2.5 -0.27 -2.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT metacarpal3.r
{
OFFSET -1.5 -0.16 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger4-1.r
{
OFFSET -4.5 0.70 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger4-2.r
{
OFFSET -3.67 -0.48 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger4-3.r
{
OFFSET -2.27 -0.35 -0.0
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET -1.904 -0.62 0.0
}
}
}
}
}
}
JOINT __metacarpal4.r
{
OFFSET -2.0 -0.27 -3.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT metacarpal4.r
{
OFFSET -2.0 -0.16 -1.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger5-1.r
{
OFFSET -4.0 0.17 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger5-2.r
{
OFFSET -3.2 -0.17 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger5-3.r
{
OFFSET -1.495 -0.10 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET -1.9 -0.10 0.0
}
}
}
}
}
}
JOINT rthumbBase
{
OFFSET 0.0 -0.279 2.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT rthumb
{
OFFSET -2.0 -0.142 1.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger1-2.r
{
OFFSET -1.9598 -2.10 1.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT finger1-3.r
{
OFFSET -2.76 -0.46 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
End Site
{
OFFSET -2.595 -0.16 0.0
}
}
}
}
}
}
MOTION
Frames: 1
Frame Time: 0.040000
0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
File diff suppressed because one or more lines are too long
@@ -0,0 +1,454 @@
2D_X_hip,2D_Y_hip,2D_vis_hip,2D_X_abdomen,2D_Y_abdomen,2D_vis_abdomen,2D_X_chest,2D_Y_chest,2D_vis_chest,2D_X_neck,2D_Y_neck,2D_vis_neck,2D_X_head,2D_Y_head,2D_vis_head,2D_X_lefteye,2D_Y_lefteye,2D_vis_lefteye,2D_X_es_lefteye,2D_Y_es_lefteye,2D_vis_es_lefteye,2D_X_righteye,2D_Y_righteye,2D_vis_righteye,2D_X_es_righteye,2D_Y_es_righteye,2D_vis_es_righteye,2D_X_rcollar,2D_Y_rcollar,2D_vis_rcollar,2D_X_rshoulder,2D_Y_rshoulder,2D_vis_rshoulder,2D_X_relbow,2D_Y_relbow,2D_vis_relbow,2D_X_rhand,2D_Y_rhand,2D_vis_rhand,2D_X_rthumb1,2D_Y_rthumb1,2D_vis_rthumb1,2D_X_rthumb2,2D_Y_rthumb2,2D_vis_rthumb2,2D_X_es_rthumb2,2D_Y_es_rthumb2,2D_vis_es_rthumb2,2D_X_rindex1,2D_Y_rindex1,2D_vis_rindex1,2D_X_rindex2,2D_Y_rindex2,2D_vis_rindex2,2D_X_es_rindex2,2D_Y_es_rindex2,2D_vis_es_rindex2,2D_X_rmid1,2D_Y_rmid1,2D_vis_rmid1,2D_X_rmid2,2D_Y_rmid2,2D_vis_rmid2,2D_X_es_rmid2,2D_Y_es_rmid2,2D_vis_es_rmid2,2D_X_rring1,2D_Y_rring1,2D_vis_rring1,2D_X_rring2,2D_Y_rring2,2D_vis_rring2,2D_X_es_rring2,2D_Y_es_rring2,2D_vis_es_rring2,2D_X_rpinky1,2D_Y_rpinky1,2D_vis_rpinky1,2D_X_rpinky2,2D_Y_rpinky2,2D_vis_rpinky2,2D_X_es_rpinky2,2D_Y_es_rpinky2,2D_vis_es_rpinky2,2D_X_lcollar,2D_Y_lcollar,2D_vis_lcollar,2D_X_lshoulder,2D_Y_lshoulder,2D_vis_lshoulder,2D_X_lelbow,2D_Y_lelbow,2D_vis_lelbow,2D_X_lhand,2D_Y_lhand,2D_vis_lhand,2D_X_lthumb1,2D_Y_lthumb1,2D_vis_lthumb1,2D_X_lthumb2,2D_Y_lthumb2,2D_vis_lthumb2,2D_X_es_lthumb2,2D_Y_es_lthumb2,2D_vis_es_lthumb2,2D_X_lindex1,2D_Y_lindex1,2D_vis_lindex1,2D_X_lindex2,2D_Y_lindex2,2D_vis_lindex2,2D_X_es_lindex2,2D_Y_es_lindex2,2D_vis_es_lindex2,2D_X_lmid1,2D_Y_lmid1,2D_vis_lmid1,2D_X_lmid2,2D_Y_lmid2,2D_vis_lmid2,2D_X_es_lmid2,2D_Y_es_lmid2,2D_vis_es_lmid2,2D_X_lring1,2D_Y_lring1,2D_vis_lring1,2D_X_lring2,2D_Y_lring2,2D_vis_lring2,2D_X_es_lring2,2D_Y_es_lring2,2D_vis_es_lring2,2D_X_lpinky1,2D_Y_lpinky1,2D_vis_lpinky1,2D_X_lpinky2,2D_Y_lpinky2,2D_vis_lpinky2,2D_X_es_lpinky2,2D_Y_es_lpinky2,2D_vis_es_lpinky2,2D_X_rbuttock,2D_Y_rbuttock,2D_vis_rbuttock,2D_X_rhip,2D_Y_rhip,2D_vis_rhip,2D_X_rknee,2D_Y_rknee,2D_vis_rknee,2D_X_rfoot,2D_Y_rfoot,2D_vis_rfoot,2D_X_es_rfoot,2D_Y_es_rfoot,2D_vis_es_rfoot,2D_X_lbuttock,2D_Y_lbuttock,2D_vis_lbuttock,2D_X_lhip,2D_Y_lhip,2D_vis_lhip,2D_X_lknee,2D_Y_lknee,2D_vis_lknee,2D_X_lfoot,2D_Y_lfoot,2D_vis_lfoot,2D_X_es_lfoot,2D_Y_es_lfoot,2D_vis_es_lfoot
0.533708,0.429697,1.0,0.524493,0.291710,1.0,0.527565,0.337706,1.0,0.521422,0.245714,1.0,0.481595,0.182957,1.0,0.484651,0.166721,1.0,0.484651,0.166721,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.533719,0.243021,1.0,0.546016,0.240328,1.0,0.575135,0.332943,1.0,0.582786,0.297589,1.0,0.600422,0.291371,1.0,0.591005,0.290204,1.0,0.577432,0.287480,1.0,0.592323,0.283976,1.0,0.578745,0.325234,1.0,0.582250,0.321343,1.0,0.579844,0.318618,1.0,0.578307,0.325624,1.0,0.580063,0.318618,1.0,0.579401,0.317839,1.0,0.578089,0.325624,1.0,0.579401,0.314336,1.0,0.578526,0.302270,1.0,0.581594,0.306162,1.0,0.580938,0.307330,1.0,0.508418,0.247102,1.0,0.495415,0.248491,1.0,0.506156,0.360124,1.0,0.458677,0.360291,1.0,0.449553,0.359099,1.0,0.446515,0.354944,1.0,0.438569,0.357437,1.0,0.447683,0.355360,1.0,0.439270,0.358268,1.0,0.439504,0.361593,1.0,0.445580,0.365332,1.0,0.440439,0.362423,1.0,0.437167,0.366994,1.0,0.446281,0.365332,1.0,0.439504,0.367408,1.0,0.438803,0.368240,1.0,0.439504,0.358268,1.0,0.438335,0.355360,1.0,0.437868,0.359099,1.0,0.555135,0.425639,1.0,0.555135,0.425639,1.0,0.558292,0.600002,1.0,0.568917,0.749819,1.0,0.568917,0.749819,1.0,0.512280,0.433756,1.0,0.512280,0.433756,1.0,0.533656,0.605463,1.0,0.544490,0.768928,1.0,0.544490,0.768928,1.0
0.533734,0.443309,1.0,0.524539,0.297082,1.0,0.527604,0.345825,1.0,0.521474,0.248340,1.0,0.483084,0.183039,1.0,0.484648,0.169425,1.0,0.484648,0.169425,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.534513,0.244311,1.0,0.547552,0.240282,1.0,0.579745,0.338364,1.0,0.595010,0.302975,1.0,0.589271,0.322957,1.0,0.593958,0.287964,1.0,0.594193,0.302961,1.0,0.605437,0.292130,1.0,0.594896,0.285881,1.0,0.593724,0.296712,1.0,0.606141,0.290047,1.0,0.600516,0.287964,1.0,0.599813,0.298795,1.0,0.604969,0.288381,1.0,0.600047,0.286297,1.0,0.601453,0.297962,1.0,0.603328,0.286714,1.0,0.592083,0.283798,1.0,0.603328,0.289214,1.0,0.508422,0.249761,1.0,0.495371,0.251182,1.0,0.496910,0.362991,1.0,0.447826,0.362875,1.0,0.436706,0.364068,1.0,0.430244,0.360375,1.0,0.421705,0.364888,1.0,0.433706,0.369812,1.0,0.421705,0.367760,1.0,0.425628,0.371043,1.0,0.432552,0.371453,1.0,0.421243,0.371863,1.0,0.419166,0.382531,1.0,0.433475,0.371043,1.0,0.421012,0.368991,1.0,0.419858,0.375145,1.0,0.420781,0.367350,1.0,0.421935,0.363657,1.0,0.421705,0.370222,1.0,0.555193,0.439194,1.0,0.555193,0.439194,1.0,0.561297,0.600114,1.0,0.568891,0.752716,1.0,0.568891,0.752716,1.0,0.512276,0.447425,1.0,0.512276,0.447425,1.0,0.533755,0.605479,1.0,0.544448,0.760812,1.0,0.544448,0.760812,1.0
0.532209,0.446067,1.0,0.524123,0.299888,1.0,0.526818,0.348614,1.0,0.521427,0.251162,1.0,0.510750,0.181697,1.0,0.484742,0.180294,1.0,0.484742,0.180294,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.535247,0.249748,1.0,0.549068,0.248334,1.0,0.581182,0.341144,1.0,0.605714,0.305643,1.0,0.606167,0.291929,1.0,0.606844,0.286333,1.0,0.619208,0.285933,1.0,0.614714,0.301922,1.0,0.615609,0.303920,1.0,0.619885,0.283934,1.0,0.614714,0.299923,1.0,0.614484,0.302721,1.0,0.612687,0.304720,1.0,0.615161,0.295527,1.0,0.616510,0.301123,1.0,0.611115,0.307918,1.0,0.615833,0.295127,1.0,0.617859,0.301522,1.0,0.620333,0.282336,1.0,0.506889,0.253920,1.0,0.492351,0.256679,1.0,0.487777,0.371044,1.0,0.435553,0.371130,1.0,0.426600,0.366111,1.0,0.419266,0.362325,1.0,0.410039,0.369476,1.0,0.419503,0.382935,1.0,0.407909,0.373261,1.0,0.410748,0.372420,1.0,0.418556,0.389665,1.0,0.407673,0.380832,1.0,0.410512,0.375364,1.0,0.417373,0.393030,1.0,0.408383,0.382515,1.0,0.411931,0.379150,1.0,0.415954,0.393030,1.0,0.410985,0.386720,1.0,0.412641,0.382094,1.0,0.555146,0.441980,1.0,0.555146,0.441980,1.0,0.562880,0.602723,1.0,0.567448,0.755377,1.0,0.567448,0.755377,1.0,0.509272,0.450154,1.0,0.509272,0.450154,1.0,0.533792,0.610932,1.0,0.544484,0.766281,1.0,0.544484,0.766281,1.0
0.529931,0.446020,1.0,0.522450,0.302022,1.0,0.524944,0.350022,1.0,0.519956,0.254023,1.0,0.513038,0.184497,1.0,0.484709,0.183139,1.0,0.484709,0.183139,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.535262,0.252590,1.0,0.550568,0.251156,1.0,0.573604,0.354717,1.0,0.613417,0.313708,1.0,0.614141,0.294047,1.0,0.615063,0.291595,1.0,0.615063,0.291595,1.0,0.614599,0.292005,1.0,0.611385,0.302626,1.0,0.611844,0.312023,1.0,0.624714,0.303852,1.0,0.626094,0.305078,1.0,0.627010,0.305078,1.0,0.627932,0.295681,1.0,0.629078,0.299767,1.0,0.630458,0.292413,1.0,0.624021,0.291595,1.0,0.625859,0.287510,1.0,0.629307,0.284651,1.0,0.503845,0.260746,1.0,0.487734,0.267469,1.0,0.483107,0.373767,1.0,0.424905,0.379210,1.0,0.418290,0.371716,1.0,0.410688,0.370026,1.0,0.401422,0.376783,1.0,0.410688,0.388186,1.0,0.400947,0.388609,1.0,0.402848,0.381430,1.0,0.412351,0.396211,1.0,0.400947,0.389454,1.0,0.404511,0.385653,1.0,0.412826,0.400012,1.0,0.403560,0.395789,1.0,0.406174,0.389454,1.0,0.412826,0.401701,1.0,0.406649,0.398744,1.0,0.408312,0.394099,1.0,0.550604,0.441940,1.0,0.550604,0.441940,1.0,0.565906,0.602700,1.0,0.567401,0.752653,1.0,0.567401,0.752653,1.0,0.509259,0.450100,1.0,0.509259,0.450100,1.0,0.533745,0.613643,1.0,0.544464,0.760820,1.0,0.544464,0.760820,1.0
0.529931,0.446020,1.0,0.522450,0.302022,1.0,0.524944,0.350022,1.0,0.519956,0.254023,1.0,0.513038,0.184497,1.0,0.484709,0.183139,1.0,0.484709,0.183139,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.535262,0.252590,1.0,0.550568,0.251156,1.0,0.573604,0.354717,1.0,0.613417,0.313708,1.0,0.614141,0.294047,1.0,0.615063,0.291595,1.0,0.615063,0.291595,1.0,0.614599,0.292005,1.0,0.611385,0.302626,1.0,0.611844,0.312023,1.0,0.624714,0.303852,1.0,0.626094,0.305078,1.0,0.627010,0.305078,1.0,0.627932,0.295681,1.0,0.629078,0.299767,1.0,0.630458,0.292413,1.0,0.624021,0.291595,1.0,0.625859,0.287510,1.0,0.629307,0.284651,1.0,0.503845,0.260746,1.0,0.487734,0.267469,1.0,0.483107,0.373767,1.0,0.424905,0.379210,1.0,0.418290,0.371716,1.0,0.410688,0.370026,1.0,0.401422,0.376783,1.0,0.410688,0.388186,1.0,0.400947,0.388609,1.0,0.402848,0.381430,1.0,0.412351,0.396211,1.0,0.400947,0.389454,1.0,0.404511,0.385653,1.0,0.412826,0.400012,1.0,0.403560,0.395789,1.0,0.406174,0.389454,1.0,0.412826,0.401701,1.0,0.406649,0.398744,1.0,0.408312,0.394099,1.0,0.550604,0.441940,1.0,0.550604,0.441940,1.0,0.565906,0.602700,1.0,0.567401,0.752653,1.0,0.567401,0.752653,1.0,0.509259,0.450100,1.0,0.509259,0.450100,1.0,0.533745,0.613643,1.0,0.544464,0.760820,1.0,0.544464,0.760820,1.0
0.527566,0.448753,1.0,0.519552,0.308734,1.0,0.522223,0.355407,1.0,0.516880,0.262061,1.0,0.513047,0.187125,1.0,0.489296,0.185671,1.0,0.489296,0.185671,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.531404,0.258006,1.0,0.545927,0.253952,1.0,0.567422,0.354636,1.0,0.616490,0.313738,1.0,0.612234,0.305377,1.0,0.617568,0.295500,1.0,0.624234,0.291550,1.0,0.619568,0.291944,1.0,0.628901,0.286019,1.0,0.634682,0.282068,1.0,0.624234,0.295895,1.0,0.631349,0.290759,1.0,0.636901,0.287599,1.0,0.626458,0.303007,1.0,0.633125,0.295500,1.0,0.637125,0.291944,1.0,0.629568,0.310513,1.0,0.635349,0.301821,1.0,0.637568,0.298661,1.0,0.501547,0.266085,1.0,0.486214,0.270109,1.0,0.474004,0.371125,1.0,0.423431,0.379351,1.0,0.418042,0.374864,1.0,0.409940,0.374106,1.0,0.402051,0.380549,1.0,0.409300,0.391162,1.0,0.399280,0.392679,1.0,0.400345,0.385098,1.0,0.409727,0.400259,1.0,0.399493,0.393436,1.0,0.403330,0.389646,1.0,0.411006,0.404807,1.0,0.402691,0.398743,1.0,0.404823,0.392679,1.0,0.412072,0.405187,1.0,0.405889,0.401018,1.0,0.406955,0.396848,1.0,0.545990,0.444645,1.0,0.545990,0.444645,1.0,0.565880,0.600062,1.0,0.565896,0.755356,1.0,0.565896,0.755356,1.0,0.509143,0.452861,1.0,0.509143,0.452861,1.0,0.533693,0.616317,1.0,0.544406,0.766242,1.0,0.544406,0.766242,1.0
0.518392,0.447374,1.0,0.519548,0.304371,1.0,0.519163,0.352038,1.0,0.519934,0.256703,1.0,0.520665,0.183047,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.532954,0.255355,1.0,0.545974,0.254006,1.0,0.550573,0.343885,1.0,0.607250,0.311136,1.0,0.608948,0.301193,1.0,0.615505,0.288669,1.0,0.622792,0.286079,1.0,0.619391,0.284783,1.0,0.626922,0.280896,1.0,0.631536,0.277874,1.0,0.622307,0.292124,1.0,0.630568,0.288238,1.0,0.635182,0.286510,1.0,0.623521,0.301625,1.0,0.630807,0.298170,1.0,0.634937,0.296874,1.0,0.623521,0.311989,1.0,0.630323,0.308966,1.0,0.632266,0.308534,1.0,0.506873,0.259374,1.0,0.493813,0.262045,1.0,0.472464,0.365608,1.0,0.429460,0.379379,1.0,0.420503,0.376234,1.0,0.412537,0.378662,1.0,0.405254,0.385541,1.0,0.410944,0.395252,1.0,0.403660,0.397680,1.0,0.405481,0.390801,1.0,0.413447,0.401726,1.0,0.405254,0.398894,1.0,0.407985,0.394847,1.0,0.415268,0.405368,1.0,0.408213,0.404154,1.0,0.409578,0.397680,1.0,0.416634,0.405368,1.0,0.412082,0.404154,1.0,0.411171,0.400107,1.0,0.536781,0.444589,1.0,0.536781,0.444589,1.0,0.561297,0.597313,1.0,0.558307,0.766273,1.0,0.558307,0.766273,1.0,0.500003,0.450158,1.0,0.500003,0.450158,1.0,0.532188,0.613575,1.0,0.538307,0.752710,1.0,0.538307,0.752710,1.0
0.513773,0.445977,1.0,0.517260,0.301894,1.0,0.516097,0.349921,1.0,0.518422,0.253866,1.0,0.522243,0.180343,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.529917,0.252513,1.0,0.541411,0.251160,1.0,0.533656,0.338481,1.0,0.591917,0.302935,1.0,0.591812,0.296115,1.0,0.599594,0.282278,1.0,0.607630,0.279154,1.0,0.603109,0.278260,1.0,0.611896,0.272011,1.0,0.616417,0.271119,1.0,0.606125,0.284956,1.0,0.614911,0.281385,1.0,0.620438,0.279600,1.0,0.607880,0.293883,1.0,0.615917,0.290758,1.0,0.620687,0.290758,1.0,0.608635,0.304150,1.0,0.615917,0.302364,1.0,0.617922,0.301471,1.0,0.506890,0.253923,1.0,0.495357,0.253981,1.0,0.473968,0.357509,1.0,0.435664,0.376464,1.0,0.427802,0.371795,1.0,0.417106,0.377864,1.0,0.411643,0.384743,1.0,0.422340,0.390811,1.0,0.411416,0.400117,1.0,0.410733,0.397690,1.0,0.425527,0.397690,1.0,0.414602,0.402949,1.0,0.410961,0.404163,1.0,0.424616,0.404163,1.0,0.417789,0.408209,1.0,0.411189,0.411446,1.0,0.425754,0.404163,1.0,0.419154,0.413064,1.0,0.415968,0.415896,1.0,0.530630,0.444591,1.0,0.530630,0.444591,1.0,0.556724,0.594482,1.0,0.556708,0.771679,1.0,0.556708,0.771679,1.0,0.496915,0.447363,1.0,0.496915,0.447363,1.0,0.527615,0.613608,1.0,0.533781,0.766218,1.0,0.533781,0.766218,1.0
0.507651,0.444701,1.0,0.515667,0.299491,1.0,0.512995,0.347894,1.0,0.518340,0.251087,1.0,0.524558,0.174881,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.544500,0.161273,1.0,0.544500,0.161273,1.0,0.526058,0.247064,1.0,0.533776,0.243041,1.0,0.516845,0.335795,1.0,0.567453,0.297563,1.0,0.570708,0.290126,1.0,0.577880,0.276180,1.0,0.585052,0.272594,1.0,0.581245,0.271398,1.0,0.589760,0.264624,1.0,0.595589,0.264225,1.0,0.583708,0.278570,1.0,0.592448,0.273391,1.0,0.599172,0.273789,1.0,0.585052,0.287337,1.0,0.592896,0.284149,1.0,0.598052,0.284946,1.0,0.586172,0.298494,1.0,0.593120,0.296104,1.0,0.595589,0.295705,1.0,0.507631,0.251202,1.0,0.496922,0.251318,1.0,0.477009,0.357375,1.0,0.447943,0.360245,1.0,0.436967,0.372677,1.0,0.433968,0.375958,1.0,0.445043,0.361192,1.0,0.443658,0.359962,1.0,0.443428,0.365704,1.0,0.441120,0.369806,1.0,0.434660,0.366114,1.0,0.441582,0.380470,1.0,0.443197,0.384982,1.0,0.436045,0.363243,1.0,0.441351,0.384982,1.0,0.441582,0.385393,1.0,0.433968,0.362422,1.0,0.433737,0.366114,1.0,0.441351,0.387444,1.0,0.521458,0.441975,1.0,0.521458,0.441975,1.0,0.552089,0.597350,1.0,0.553656,0.768951,1.0,0.553656,0.768951,1.0,0.493844,0.447427,1.0,0.493844,0.447427,1.0,0.524500,0.605482,1.0,0.530615,0.771725,1.0,0.530615,0.771725,1.0
0.503855,0.443272,1.0,0.515933,0.288981,1.0,0.511907,0.340412,1.0,0.519959,0.237551,1.0,0.524537,0.166732,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.547521,0.147656,1.0,0.547521,0.147656,1.0,0.524537,0.236179,1.0,0.529115,0.234806,1.0,0.498522,0.335768,1.0,0.545995,0.294882,1.0,0.549354,0.286439,1.0,0.554797,0.272977,1.0,0.560948,0.268769,1.0,0.556453,0.269611,1.0,0.564974,0.262459,1.0,0.570891,0.262039,1.0,0.558818,0.276343,1.0,0.568047,0.270453,1.0,0.575146,0.271294,1.0,0.560005,0.286019,1.0,0.567578,0.280970,1.0,0.573729,0.282232,1.0,0.560479,0.295694,1.0,0.568047,0.292749,1.0,0.571833,0.292749,1.0,0.515356,0.236189,1.0,0.510753,0.234828,1.0,0.486226,0.335642,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.512260,0.441914,1.0,0.512260,0.441914,1.0,0.546042,0.599946,1.0,0.545948,0.771711,1.0,0.545948,0.771711,1.0,0.495449,0.444631,1.0,0.495449,0.444631,1.0,0.526047,0.608169,1.0,0.518346,0.766256,1.0,0.518346,0.766256,1.0
0.503855,0.443272,1.0,0.515933,0.288981,1.0,0.511907,0.340412,1.0,0.519959,0.237551,1.0,0.524537,0.166732,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.547521,0.147656,1.0,0.547521,0.147656,1.0,0.524537,0.236179,1.0,0.529115,0.234806,1.0,0.498522,0.335768,1.0,0.545995,0.294882,1.0,0.549354,0.286439,1.0,0.554797,0.272977,1.0,0.560948,0.268769,1.0,0.556453,0.269611,1.0,0.564974,0.262459,1.0,0.570891,0.262039,1.0,0.558818,0.276343,1.0,0.568047,0.270453,1.0,0.575146,0.271294,1.0,0.560005,0.286019,1.0,0.567578,0.280970,1.0,0.573729,0.282232,1.0,0.560479,0.295694,1.0,0.568047,0.292749,1.0,0.571833,0.292749,1.0,0.515356,0.236189,1.0,0.510753,0.234828,1.0,0.486226,0.335642,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.512260,0.441914,1.0,0.512260,0.441914,1.0,0.546042,0.599946,1.0,0.545948,0.771711,1.0,0.545948,0.771711,1.0,0.495449,0.444631,1.0,0.495449,0.444631,1.0,0.526047,0.608169,1.0,0.518346,0.766256,1.0,0.518346,0.766256,1.0
0.507681,0.446038,1.0,0.516902,0.295756,1.0,0.513828,0.345850,1.0,0.519976,0.245662,1.0,0.520730,0.163969,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.545979,0.155819,1.0,0.545979,0.155819,1.0,0.519193,0.242982,1.0,0.518411,0.240302,1.0,0.484699,0.341212,1.0,0.523016,0.297619,1.0,0.526943,0.288831,1.0,0.533000,0.274623,1.0,0.539052,0.271179,1.0,0.534693,0.271179,1.0,0.543896,0.266873,1.0,0.549708,0.267304,1.0,0.536391,0.278929,1.0,0.546078,0.275484,1.0,0.553828,0.277637,1.0,0.536391,0.288401,1.0,0.548016,0.287540,1.0,0.551891,0.287970,1.0,0.535906,0.299165,1.0,0.543656,0.295720,1.0,0.547531,0.295720,1.0,0.523787,0.246995,1.0,0.527599,0.248329,1.0,0.522995,0.360273,1.0,0.542906,0.368380,1.0,0.553182,0.385055,1.0,0.547391,0.364879,1.0,0.550865,0.362819,1.0,0.552026,0.364879,1.0,0.555964,0.372702,1.0,0.556656,0.378467,1.0,0.554339,0.347173,1.0,0.554339,0.362408,1.0,0.549474,0.391231,1.0,0.555266,0.346761,1.0,0.554802,0.350056,1.0,0.549245,0.382172,1.0,0.555964,0.340173,1.0,0.555964,0.366114,1.0,0.556656,0.379290,1.0,0.506138,0.447365,1.0,0.506138,0.447365,1.0,0.544396,0.600133,1.0,0.542932,0.771591,1.0,0.542932,0.771591,1.0,0.509224,0.444712,1.0,0.509224,0.444712,1.0,0.530656,0.600008,1.0,0.507577,0.752695,1.0,0.507577,0.752695,1.0
0.506898,0.450152,1.0,0.514382,0.298969,1.0,0.511887,0.349364,1.0,0.516877,0.248575,1.0,0.542911,0.174848,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.541365,0.158562,1.0,0.541365,0.158562,1.0,0.512249,0.248477,1.0,0.507622,0.248379,1.0,0.472400,0.357322,1.0,0.506156,0.316503,1.0,0.504331,0.320549,1.0,0.515221,0.289664,1.0,0.526109,0.281828,1.0,0.513925,0.286437,1.0,0.522224,0.280444,1.0,0.528703,0.283671,1.0,0.512110,0.293352,1.0,0.519889,0.290586,1.0,0.529740,0.296579,1.0,0.511073,0.301649,1.0,0.519889,0.301188,1.0,0.527151,0.304415,1.0,0.506146,0.317322,1.0,0.518333,0.311791,1.0,0.523776,0.310869,1.0,0.521470,0.249915,1.0,0.526062,0.251256,1.0,0.521484,0.381944,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.498461,0.450205,1.0,0.498461,0.450205,1.0,0.542865,0.600097,1.0,0.539854,0.771644,1.0,0.539854,0.771644,1.0,0.515335,0.450100,1.0,0.515335,0.450100,1.0,0.533740,0.599968,1.0,0.501529,0.752577,1.0,0.501529,0.752577,1.0
0.507691,0.451539,1.0,0.508839,0.303338,1.0,0.508456,0.352738,1.0,0.509222,0.253937,1.0,0.542885,0.166732,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.535286,0.155809,1.0,0.535286,0.155809,1.0,0.502303,0.252544,1.0,0.495385,0.251150,1.0,0.464722,0.360206,1.0,0.493893,0.335631,1.0,0.490689,0.340044,1.0,0.494210,0.339597,1.0,0.499997,0.309631,1.0,0.495468,0.338702,1.0,0.500752,0.310078,1.0,0.502513,0.307393,1.0,0.502513,0.339150,1.0,0.507041,0.307842,1.0,0.509054,0.307393,1.0,0.505029,0.339150,1.0,0.514589,0.310525,1.0,0.514589,0.311419,1.0,0.516853,0.326179,1.0,0.516853,0.323048,1.0,0.517105,0.322154,1.0,0.516879,0.257992,1.0,0.524536,0.262046,1.0,0.510756,0.368381,1.0,0.532193,0.376531,1.0,0.548271,0.338789,1.0,0.549172,0.347195,1.0,0.542193,0.368412,1.0,0.547599,0.343193,1.0,0.540167,0.364408,1.0,0.541969,0.382022,1.0,0.546698,0.344394,1.0,0.540844,0.358004,1.0,0.543318,0.363207,1.0,0.541745,0.345994,1.0,0.539490,0.357203,1.0,0.542417,0.370814,1.0,0.547370,0.345194,1.0,0.550974,0.345594,1.0,0.544443,0.381621,1.0,0.495414,0.452894,1.0,0.495414,0.452894,1.0,0.541375,0.600096,1.0,0.539828,0.771729,1.0,0.539828,0.771729,1.0,0.519968,0.450185,1.0,0.519968,0.450185,1.0,0.536786,0.600106,1.0,0.498478,0.749888,1.0,0.498478,0.749888,1.0
0.505352,0.454214,1.0,0.505924,0.310115,1.0,0.505733,0.358148,1.0,0.506114,0.262081,1.0,0.536828,0.164000,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.532240,0.153126,1.0,0.532240,0.153126,1.0,0.495410,0.258042,1.0,0.484706,0.254003,1.0,0.460204,0.365661,1.0,0.484730,0.365704,1.0,0.503211,0.361761,1.0,0.487878,0.349450,1.0,0.483673,0.352968,1.0,0.481200,0.373632,1.0,0.479469,0.371434,1.0,0.489856,0.350769,1.0,0.483673,0.373193,1.0,0.489609,0.366157,1.0,0.494308,0.347251,1.0,0.490103,0.380667,1.0,0.493566,0.372753,1.0,0.498265,0.357804,1.0,0.493319,0.381106,1.0,0.498265,0.375831,1.0,0.499502,0.371434,1.0,0.513802,0.264774,1.0,0.521490,0.267466,1.0,0.529109,0.360099,1.0,0.559807,0.319305,1.0,0.570323,0.317863,1.0,0.570901,0.312368,1.0,0.577469,0.311337,1.0,0.561630,0.315802,1.0,0.563370,0.318206,1.0,0.569938,0.317863,1.0,0.570323,0.327135,1.0,0.571479,0.335378,1.0,0.583651,0.333318,1.0,0.561245,0.315802,1.0,0.570516,0.337095,1.0,0.569547,0.344307,1.0,0.561047,0.314771,1.0,0.571094,0.345681,1.0,0.570130,0.348085,1.0,0.489287,0.458286,1.0,0.489287,0.458286,1.0,0.535297,0.600152,1.0,0.542880,0.774345,1.0,0.542880,0.774345,1.0,0.521417,0.450143,1.0,0.521417,0.450143,1.0,0.533807,0.602843,1.0,0.496969,0.752545,1.0,0.496969,0.752545,1.0
0.503077,0.463680,1.0,0.499656,0.312463,1.0,0.500797,0.362869,1.0,0.498516,0.262057,1.0,0.533771,0.163968,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.530604,0.153090,1.0,0.530604,0.153090,1.0,0.487766,0.263404,1.0,0.477017,0.264751,1.0,0.458607,0.376520,1.0,0.478515,0.387437,1.0,0.479077,0.386768,1.0,0.489170,0.393176,1.0,0.496380,0.416246,1.0,0.491573,0.386768,1.0,0.498543,0.403430,1.0,0.491814,0.413683,1.0,0.490131,0.387621,1.0,0.494217,0.417101,1.0,0.492054,0.424364,1.0,0.483883,0.390185,1.0,0.490131,0.417529,1.0,0.484604,0.424792,1.0,0.478836,0.398730,1.0,0.484123,0.423082,1.0,0.480038,0.421373,1.0,0.510018,0.260729,1.0,0.521521,0.259400,1.0,0.546021,0.354639,1.0,0.582797,0.313933,1.0,0.581323,0.315483,1.0,0.589099,0.308183,1.0,0.598609,0.308183,1.0,0.606172,0.311257,1.0,0.601849,0.320094,1.0,0.607036,0.320478,1.0,0.605958,0.325088,1.0,0.603797,0.327777,1.0,0.608120,0.329314,1.0,0.610062,0.328545,1.0,0.602068,0.335461,1.0,0.602281,0.334693,1.0,0.599255,0.344682,1.0,0.599255,0.344682,1.0,0.595370,0.345066,1.0,0.484722,0.466374,1.0,0.484722,0.466374,1.0,0.532188,0.602706,1.0,0.542870,0.771645,1.0,0.542870,0.771645,1.0,0.521432,0.460986,1.0,0.521432,0.460986,1.0,0.533760,0.616317,1.0,0.496928,0.752655,1.0,0.496928,0.752655,1.0
0.503077,0.463680,1.0,0.499656,0.312463,1.0,0.500797,0.362869,1.0,0.498516,0.262057,1.0,0.533771,0.163968,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.530604,0.153090,1.0,0.530604,0.153090,1.0,0.487766,0.263404,1.0,0.477017,0.264751,1.0,0.458607,0.376520,1.0,0.478515,0.387437,1.0,0.479077,0.386768,1.0,0.489170,0.393176,1.0,0.496380,0.416246,1.0,0.491573,0.386768,1.0,0.498543,0.403430,1.0,0.491814,0.413683,1.0,0.490131,0.387621,1.0,0.494217,0.417101,1.0,0.492054,0.424364,1.0,0.483883,0.390185,1.0,0.490131,0.417529,1.0,0.484604,0.424792,1.0,0.478836,0.398730,1.0,0.484123,0.423082,1.0,0.480038,0.421373,1.0,0.510018,0.260729,1.0,0.521521,0.259400,1.0,0.546021,0.354639,1.0,0.582797,0.313933,1.0,0.581323,0.315483,1.0,0.589099,0.308183,1.0,0.598609,0.308183,1.0,0.606172,0.311257,1.0,0.601849,0.320094,1.0,0.607036,0.320478,1.0,0.605958,0.325088,1.0,0.603797,0.327777,1.0,0.608120,0.329314,1.0,0.610062,0.328545,1.0,0.602068,0.335461,1.0,0.602281,0.334693,1.0,0.599255,0.344682,1.0,0.599255,0.344682,1.0,0.595370,0.345066,1.0,0.484722,0.466374,1.0,0.484722,0.466374,1.0,0.532188,0.602706,1.0,0.542870,0.771645,1.0,0.542870,0.771645,1.0,0.521432,0.460986,1.0,0.521432,0.460986,1.0,0.533760,0.616317,1.0,0.496928,0.752655,1.0,0.496928,0.752655,1.0
0.501540,0.459661,1.0,0.498134,0.313540,1.0,0.499269,0.362247,1.0,0.496998,0.264833,1.0,0.526849,0.154426,1.0,0.532151,0.150380,1.0,0.532151,0.150380,1.0,0.521547,0.158472,1.0,0.521547,0.158472,1.0,0.484687,0.266166,1.0,0.472376,0.267498,1.0,0.457060,0.381894,1.0,0.472400,0.420111,1.0,0.478190,0.415899,1.0,0.486197,0.420644,1.0,0.487896,0.429703,1.0,0.480131,0.435311,1.0,0.482557,0.449978,1.0,0.486925,0.458606,1.0,0.476248,0.438762,1.0,0.478190,0.452566,1.0,0.481829,0.461625,1.0,0.474065,0.439194,1.0,0.474793,0.449115,1.0,0.478190,0.458606,1.0,0.472609,0.438762,1.0,0.474307,0.445664,1.0,0.476006,0.452566,1.0,0.510012,0.262098,1.0,0.523026,0.259363,1.0,0.558198,0.349246,1.0,0.598104,0.302955,1.0,0.619859,0.302139,1.0,0.615568,0.300131,1.0,0.616698,0.299729,1.0,0.619406,0.299327,1.0,0.600427,0.298925,1.0,0.607432,0.297720,1.0,0.615792,0.316599,1.0,0.616922,0.321018,1.0,0.610594,0.328248,1.0,0.624151,0.318608,1.0,0.611500,0.322625,1.0,0.610823,0.324232,1.0,0.602911,0.297720,1.0,0.612630,0.296516,1.0,0.607656,0.296114,1.0,0.483102,0.463719,1.0,0.483102,0.463719,1.0,0.523042,0.613636,1.0,0.536807,0.769004,1.0,0.536807,0.769004,1.0,0.519979,0.455604,1.0,0.519979,0.455604,1.0,0.530615,0.619044,1.0,0.495461,0.752734,1.0,0.495461,0.752734,1.0
0.499196,0.459614,1.0,0.497533,0.311490,1.0,0.498087,0.360865,1.0,0.496979,0.262116,1.0,0.520658,0.157197,1.0,0.522984,0.155811,1.0,0.522984,0.155811,1.0,0.518331,0.158582,1.0,0.518331,0.158582,1.0,0.483905,0.262103,1.0,0.470832,0.262090,1.0,0.447948,0.371126,1.0,0.466267,0.425631,1.0,0.472792,0.428248,1.0,0.480477,0.437641,1.0,0.482398,0.448314,1.0,0.474713,0.451730,1.0,0.478075,0.468380,1.0,0.483598,0.473076,1.0,0.471111,0.456853,1.0,0.474713,0.471369,1.0,0.478796,0.476492,1.0,0.468709,0.459414,1.0,0.471351,0.471369,1.0,0.474713,0.475210,1.0,0.467989,0.460269,1.0,0.469910,0.467953,1.0,0.472311,0.471795,1.0,0.511536,0.260720,1.0,0.526094,0.259324,1.0,0.567427,0.338378,1.0,0.607281,0.292089,1.0,0.617984,0.291068,1.0,0.611307,0.283544,1.0,0.609078,0.281961,1.0,0.632016,0.287900,1.0,0.631125,0.285129,1.0,0.641151,0.303342,1.0,0.635359,0.296215,1.0,0.634693,0.295027,1.0,0.638698,0.303738,1.0,0.639812,0.303738,1.0,0.634021,0.306906,1.0,0.638255,0.304926,1.0,0.641151,0.306114,1.0,0.609302,0.279585,1.0,0.640927,0.306114,1.0,0.478516,0.463682,1.0,0.478516,0.463682,1.0,0.515332,0.616332,1.0,0.526068,0.774435,1.0,0.526068,0.774435,1.0,0.519875,0.455545,1.0,0.519875,0.455545,1.0,0.523031,0.619109,1.0,0.495450,0.752657,1.0,0.495450,0.752657,1.0
0.496169,0.448777,1.0,0.496706,0.302675,1.0,0.496527,0.351376,1.0,0.496885,0.253975,1.0,0.513043,0.148969,1.0,0.518418,0.147584,1.0,0.518418,0.147584,1.0,0.507668,0.150354,1.0,0.507668,0.150354,1.0,0.480804,0.258003,1.0,0.464723,0.262031,1.0,0.446379,0.360330,1.0,0.460128,0.428378,1.0,0.467017,0.433737,1.0,0.474069,0.442856,1.0,0.477275,0.453494,1.0,0.468940,0.461472,1.0,0.473642,0.476669,1.0,0.478557,0.481609,1.0,0.465520,0.464892,1.0,0.470436,0.479330,1.0,0.474283,0.485408,1.0,0.463170,0.466031,1.0,0.467230,0.478190,1.0,0.471505,0.479709,1.0,0.462101,0.465271,1.0,0.465307,0.474390,1.0,0.468726,0.475910,1.0,0.512997,0.252615,1.0,0.529109,0.251256,1.0,0.570568,0.330174,1.0,0.611917,0.272905,1.0,0.623115,0.267870,1.0,0.634698,0.265098,1.0,0.642719,0.261929,1.0,0.640938,0.278170,1.0,0.643615,0.280944,1.0,0.647844,0.286489,1.0,0.641162,0.283716,1.0,0.640495,0.287678,1.0,0.644505,0.286885,1.0,0.642943,0.289262,1.0,0.639380,0.294808,1.0,0.639380,0.289262,1.0,0.637375,0.302334,1.0,0.639156,0.299562,1.0,0.638932,0.301938,1.0,0.475453,0.450111,1.0,0.475453,0.450111,1.0,0.504592,0.608177,1.0,0.507619,0.768938,1.0,0.507619,0.768938,1.0,0.516885,0.447443,1.0,0.516885,0.447443,1.0,0.519971,0.618981,1.0,0.492307,0.758138,1.0,0.492307,0.758138,1.0
0.490110,0.447427,1.0,0.494029,0.300178,1.0,0.492723,0.349261,1.0,0.495336,0.251094,1.0,0.504616,0.140818,1.0,0.510732,0.139542,1.0,0.510732,0.139542,1.0,0.498500,0.142094,1.0,0.498500,0.142094,1.0,0.477710,0.252492,1.0,0.460083,0.253889,1.0,0.443292,0.357574,1.0,0.450952,0.425485,1.0,0.457932,0.430876,1.0,0.464834,0.440375,1.0,0.466838,0.451854,1.0,0.459936,0.458979,1.0,0.463498,0.475207,1.0,0.465502,0.483915,1.0,0.457264,0.462937,1.0,0.460158,0.477582,1.0,0.463276,0.484311,1.0,0.454592,0.463729,1.0,0.457709,0.474416,1.0,0.459936,0.480749,1.0,0.454147,0.462937,1.0,0.456596,0.471249,1.0,0.458377,0.476394,1.0,0.512223,0.249743,1.0,0.529109,0.248391,1.0,0.573589,0.313928,1.0,0.614938,0.251295,1.0,0.631901,0.251095,1.0,0.616182,0.249521,1.0,0.644964,0.243617,1.0,0.635224,0.248340,1.0,0.638323,0.247946,1.0,0.648948,0.263298,1.0,0.636995,0.251095,1.0,0.641646,0.251882,1.0,0.647401,0.262511,1.0,0.640094,0.258181,1.0,0.643635,0.260543,1.0,0.640312,0.260936,1.0,0.641422,0.260543,1.0,0.644745,0.260543,1.0,0.647844,0.263692,1.0,0.470938,0.447411,1.0,0.470938,0.447411,1.0,0.490829,0.600020,1.0,0.489242,0.760806,1.0,0.489242,0.760806,1.0,0.509282,0.447444,1.0,0.509282,0.447444,1.0,0.510756,0.613597,1.0,0.496916,0.752605,1.0,0.496916,0.752605,1.0
0.489208,0.431072,1.0,0.488129,0.287988,1.0,0.488489,0.335683,1.0,0.487770,0.240294,1.0,0.498453,0.127233,1.0,0.506080,0.125882,1.0,0.506080,0.125882,1.0,0.490826,0.128583,1.0,0.490826,0.128583,1.0,0.470895,0.244360,1.0,0.454021,0.248426,1.0,0.438692,0.338304,1.0,0.444833,0.417430,1.0,0.449379,0.424247,1.0,0.455193,0.434239,1.0,0.456744,0.445264,1.0,0.449185,0.449744,1.0,0.450930,0.462836,1.0,0.452674,0.472138,1.0,0.446084,0.451810,1.0,0.447829,0.465247,1.0,0.450155,0.473861,1.0,0.444341,0.452155,1.0,0.445891,0.463181,1.0,0.448023,0.471794,1.0,0.444146,0.452500,1.0,0.445116,0.460769,1.0,0.446666,0.466626,1.0,0.505401,0.234861,1.0,0.523031,0.229429,1.0,0.573557,0.294931,1.0,0.611927,0.237582,1.0,0.629411,0.236194,1.0,0.613354,0.232523,1.0,0.613125,0.232523,1.0,0.633078,0.236194,1.0,0.633766,0.236194,1.0,0.614500,0.235785,1.0,0.636063,0.236601,1.0,0.643630,0.237008,1.0,0.649823,0.243942,1.0,0.638354,0.243942,1.0,0.643859,0.237008,1.0,0.650286,0.243126,1.0,0.641797,0.245165,1.0,0.645240,0.232115,1.0,0.650516,0.228444,1.0,0.469281,0.431086,1.0,0.469281,0.431086,1.0,0.478525,0.599938,1.0,0.470838,0.766257,1.0,0.470838,0.766257,1.0,0.509135,0.431058,1.0,0.509135,0.431058,1.0,0.509180,0.605488,1.0,0.495442,0.749941,1.0,0.495442,0.749941,1.0
0.489208,0.431072,1.0,0.488129,0.287988,1.0,0.488489,0.335683,1.0,0.487770,0.240294,1.0,0.498453,0.127233,1.0,0.506080,0.125882,1.0,0.506080,0.125882,1.0,0.490826,0.128583,1.0,0.490826,0.128583,1.0,0.470895,0.244360,1.0,0.454021,0.248426,1.0,0.438692,0.338304,1.0,0.444833,0.417430,1.0,0.449379,0.424247,1.0,0.455193,0.434239,1.0,0.456744,0.445264,1.0,0.449185,0.449744,1.0,0.450930,0.462836,1.0,0.452674,0.472138,1.0,0.446084,0.451810,1.0,0.447829,0.465247,1.0,0.450155,0.473861,1.0,0.444341,0.452155,1.0,0.445891,0.463181,1.0,0.448023,0.471794,1.0,0.444146,0.452500,1.0,0.445116,0.460769,1.0,0.446666,0.466626,1.0,0.505401,0.234861,1.0,0.523031,0.229429,1.0,0.573557,0.294931,1.0,0.611927,0.237582,1.0,0.629411,0.236194,1.0,0.613354,0.232523,1.0,0.613125,0.232523,1.0,0.633078,0.236194,1.0,0.633766,0.236194,1.0,0.614500,0.235785,1.0,0.636063,0.236601,1.0,0.643630,0.237008,1.0,0.649823,0.243942,1.0,0.638354,0.243942,1.0,0.643859,0.237008,1.0,0.650286,0.243126,1.0,0.641797,0.245165,1.0,0.645240,0.232115,1.0,0.650516,0.228444,1.0,0.469281,0.431086,1.0,0.469281,0.431086,1.0,0.478525,0.599938,1.0,0.470838,0.766257,1.0,0.470838,0.766257,1.0,0.509135,0.431058,1.0,0.509135,0.431058,1.0,0.509180,0.605488,1.0,0.495442,0.749941,1.0,0.495442,0.749941,1.0
0.483901,0.420145,1.0,0.484438,0.277068,1.0,0.484259,0.324760,1.0,0.484618,0.229375,1.0,0.490793,0.117745,1.0,0.496967,0.117733,1.0,0.496967,0.117733,1.0,0.484619,0.117757,1.0,0.484619,0.117757,1.0,0.466233,0.236187,1.0,0.447848,0.242998,1.0,0.435672,0.330206,1.0,0.435702,0.403755,1.0,0.441274,0.416488,1.0,0.445353,0.424069,1.0,0.445909,0.433629,1.0,0.439420,0.440552,1.0,0.441089,0.454726,1.0,0.442201,0.463956,1.0,0.437380,0.445167,1.0,0.439420,0.460330,1.0,0.441645,0.471537,1.0,0.436453,0.447804,1.0,0.438493,0.460659,1.0,0.440903,0.470878,1.0,0.436268,0.448792,1.0,0.438678,0.459341,1.0,0.441274,0.466263,1.0,0.502272,0.226633,1.0,0.519927,0.223891,1.0,0.570505,0.286553,1.0,0.608833,0.226592,1.0,0.620125,0.224897,1.0,0.611755,0.217660,1.0,0.611078,0.218062,1.0,0.635500,0.226907,1.0,0.610396,0.217258,1.0,0.649297,0.221681,1.0,0.634823,0.225299,1.0,0.642286,0.228113,1.0,0.649974,0.233742,1.0,0.636406,0.233742,1.0,0.643417,0.230123,1.0,0.649974,0.233340,1.0,0.637083,0.235350,1.0,0.644323,0.224494,1.0,0.649297,0.221681,1.0,0.460208,0.420186,1.0,0.460208,0.420186,1.0,0.469341,0.597395,1.0,0.449447,0.771718,1.0,0.449447,0.771718,1.0,0.507593,0.420105,1.0,0.507593,0.420105,1.0,0.507623,0.599989,1.0,0.495468,0.749844,1.0,0.495468,0.749844,1.0
0.478509,0.418786,1.0,0.477397,0.274669,1.0,0.477768,0.322708,1.0,0.477026,0.226631,1.0,0.482357,0.114922,1.0,0.489254,0.114898,1.0,0.489254,0.114898,1.0,0.475460,0.114945,1.0,0.475460,0.114945,1.0,0.459395,0.230750,1.0,0.441764,0.234869,1.0,0.435571,0.319306,1.0,0.432490,0.390129,1.0,0.432000,0.404441,1.0,0.435690,0.416311,1.0,0.435866,0.428806,1.0,0.429013,0.429119,1.0,0.430595,0.442551,1.0,0.432879,0.454421,1.0,0.427783,0.433180,1.0,0.429365,0.447861,1.0,0.431825,0.457857,1.0,0.427607,0.434429,1.0,0.428661,0.446924,1.0,0.430946,0.455983,1.0,0.427959,0.436304,1.0,0.429189,0.445050,1.0,0.431649,0.450048,1.0,0.495402,0.218478,1.0,0.513779,0.210325,1.0,0.568927,0.272924,1.0,0.607286,0.213025,1.0,0.614901,0.215021,1.0,0.621146,0.219716,1.0,0.626906,0.222276,1.0,0.629063,0.216302,1.0,0.638906,0.220569,1.0,0.645865,0.221422,1.0,0.629063,0.214594,1.0,0.638667,0.218862,1.0,0.646349,0.218862,1.0,0.628583,0.212034,1.0,0.635547,0.215448,1.0,0.643708,0.218008,1.0,0.626667,0.210755,1.0,0.631943,0.210755,1.0,0.634823,0.210755,1.0,0.458524,0.417405,1.0,0.458524,0.417405,1.0,0.458578,0.602704,1.0,0.435595,0.774369,1.0,0.435595,0.774369,1.0,0.498494,0.420167,1.0,0.498494,0.420167,1.0,0.504557,0.597266,1.0,0.496928,0.741734,1.0,0.496928,0.741734,1.0
0.473955,0.418811,1.0,0.472755,0.272662,1.0,0.473155,0.321378,1.0,0.472355,0.223946,1.0,0.476272,0.110837,1.0,0.483205,0.112155,1.0,0.483205,0.112155,1.0,0.469340,0.109519,1.0,0.469340,0.109519,1.0,0.453998,0.228007,1.0,0.435642,0.232068,1.0,0.434010,0.313976,1.0,0.423302,0.379243,1.0,0.424335,0.394166,1.0,0.427041,0.404088,1.0,0.427041,0.414612,1.0,0.420445,0.418821,1.0,0.422813,0.433554,1.0,0.423658,0.443777,1.0,0.419769,0.423031,1.0,0.420953,0.437763,1.0,0.421629,0.449189,1.0,0.420276,0.423331,1.0,0.420614,0.436260,1.0,0.421291,0.447986,1.0,0.421460,0.423331,1.0,0.421798,0.435057,1.0,0.423151,0.444378,1.0,0.490011,0.215800,1.0,0.507667,0.207654,1.0,0.559828,0.267515,1.0,0.605812,0.207515,1.0,0.613078,0.210034,1.0,0.629120,0.208794,1.0,0.629354,0.209207,1.0,0.625635,0.237726,1.0,0.634703,0.229046,1.0,0.642604,0.219540,1.0,0.624937,0.229459,1.0,0.635401,0.219127,1.0,0.643771,0.219127,1.0,0.624937,0.217473,1.0,0.635630,0.212927,1.0,0.643771,0.212514,1.0,0.623776,0.208381,1.0,0.628422,0.205901,1.0,0.631448,0.203007,1.0,0.450985,0.420169,1.0,0.450985,0.420169,1.0,0.447841,0.602839,1.0,0.424902,0.777114,1.0,0.424902,0.777114,1.0,0.496926,0.417452,1.0,0.496926,0.417452,1.0,0.498516,0.597391,1.0,0.496999,0.741697,1.0,0.496999,0.741697,1.0
0.469378,0.417419,1.0,0.467060,0.272325,1.0,0.467833,0.320690,1.0,0.466287,0.223960,1.0,0.467819,0.113504,1.0,0.475447,0.114847,1.0,0.475447,0.114847,1.0,0.460192,0.112160,1.0,0.460192,0.112160,1.0,0.449415,0.228032,1.0,0.432542,0.232105,1.0,0.427980,0.316486,1.0,0.420233,0.373848,1.0,0.418552,0.388113,1.0,0.421001,0.397753,1.0,0.421001,0.408948,1.0,0.414354,0.410503,1.0,0.416978,0.424808,1.0,0.417852,0.434137,1.0,0.414354,0.414545,1.0,0.415403,0.428851,1.0,0.415578,0.440979,1.0,0.415403,0.416101,1.0,0.415403,0.428540,1.0,0.415578,0.440356,1.0,0.416103,0.417033,1.0,0.417328,0.426363,1.0,0.417677,0.434759,1.0,0.483161,0.215777,1.0,0.500035,0.207594,1.0,0.555208,0.267496,1.0,0.598125,0.207718,1.0,0.605885,0.216661,1.0,0.611813,0.223406,1.0,0.618927,0.226358,1.0,0.619167,0.220034,1.0,0.631974,0.217082,1.0,0.637901,0.218769,1.0,0.618927,0.217926,1.0,0.631734,0.216239,1.0,0.638141,0.216661,1.0,0.618927,0.214131,1.0,0.630313,0.210758,1.0,0.636479,0.209494,1.0,0.617505,0.210336,1.0,0.623432,0.206542,1.0,0.627464,0.203591,1.0,0.446396,0.417406,1.0,0.446396,0.417406,1.0,0.441755,0.610921,1.0,0.423355,0.782565,1.0,0.423355,0.782565,1.0,0.492359,0.417432,1.0,0.492359,0.417432,1.0,0.501508,0.597314,1.0,0.503089,0.730893,1.0,0.503089,0.730893,1.0
0.462486,0.425534,1.0,0.460735,0.276320,1.0,0.461319,0.326058,1.0,0.460152,0.226582,1.0,0.454812,0.129898,1.0,0.470877,0.114889,1.0,0.470877,0.114889,1.0,0.457021,0.112197,1.0,0.457021,0.112197,1.0,0.441784,0.230715,1.0,0.423417,0.234848,1.0,0.423317,0.327498,1.0,0.414131,0.379373,1.0,0.415115,0.390374,1.0,0.417600,0.397852,1.0,0.417982,0.408728,1.0,0.412629,0.414166,1.0,0.415115,0.427761,1.0,0.416261,0.438298,1.0,0.413011,0.419264,1.0,0.414158,0.433200,1.0,0.414541,0.445095,1.0,0.413394,0.420964,1.0,0.414732,0.434219,1.0,0.415497,0.443396,1.0,0.414158,0.421644,1.0,0.415497,0.431500,1.0,0.416453,0.439657,1.0,0.477808,0.217132,1.0,0.495465,0.207681,1.0,0.544505,0.270243,1.0,0.591990,0.226739,1.0,0.596146,0.231278,1.0,0.600792,0.237577,1.0,0.607214,0.239151,1.0,0.609208,0.237182,1.0,0.612974,0.241119,1.0,0.614302,0.239544,1.0,0.611865,0.234427,1.0,0.622495,0.232459,1.0,0.630021,0.229309,1.0,0.613635,0.228916,1.0,0.622495,0.226160,1.0,0.626922,0.221043,1.0,0.613417,0.222618,1.0,0.618953,0.217500,1.0,0.620724,0.215925,1.0,0.440224,0.425527,1.0,0.440224,0.425527,1.0,0.437158,0.619040,1.0,0.423384,0.785351,1.0,0.423384,0.785351,1.0,0.484748,0.425542,1.0,0.484748,0.425542,1.0,0.506113,0.616293,1.0,0.507618,0.725339,1.0,0.507618,0.725339,1.0
0.462486,0.425534,1.0,0.460735,0.276320,1.0,0.461319,0.326058,1.0,0.460152,0.226582,1.0,0.454812,0.129898,1.0,0.470877,0.114889,1.0,0.470877,0.114889,1.0,0.457021,0.112197,1.0,0.457021,0.112197,1.0,0.441784,0.230715,1.0,0.423417,0.234848,1.0,0.423317,0.327498,1.0,0.414131,0.379373,1.0,0.415115,0.390374,1.0,0.417600,0.397852,1.0,0.417982,0.408728,1.0,0.412629,0.414166,1.0,0.415115,0.427761,1.0,0.416261,0.438298,1.0,0.413011,0.419264,1.0,0.414158,0.433200,1.0,0.414541,0.445095,1.0,0.413394,0.420964,1.0,0.414732,0.434219,1.0,0.415497,0.443396,1.0,0.414158,0.421644,1.0,0.415497,0.431500,1.0,0.416453,0.439657,1.0,0.477808,0.217132,1.0,0.495465,0.207681,1.0,0.544505,0.270243,1.0,0.591990,0.226739,1.0,0.596146,0.231278,1.0,0.600792,0.237577,1.0,0.607214,0.239151,1.0,0.609208,0.237182,1.0,0.612974,0.241119,1.0,0.614302,0.239544,1.0,0.611865,0.234427,1.0,0.622495,0.232459,1.0,0.630021,0.229309,1.0,0.613635,0.228916,1.0,0.622495,0.226160,1.0,0.626922,0.221043,1.0,0.613417,0.222618,1.0,0.618953,0.217500,1.0,0.620724,0.215925,1.0,0.440224,0.425527,1.0,0.440224,0.425527,1.0,0.437158,0.619040,1.0,0.423384,0.785351,1.0,0.423384,0.785351,1.0,0.484748,0.425542,1.0,0.484748,0.425542,1.0,0.506113,0.616293,1.0,0.507618,0.725339,1.0,0.507618,0.725339,1.0
0.460882,0.421565,1.0,0.457989,0.275446,1.0,0.458953,0.324152,1.0,0.457024,0.226740,1.0,0.450977,0.133978,1.0,0.464724,0.117601,1.0,0.464724,0.117601,1.0,0.447944,0.114918,1.0,0.447944,0.114918,1.0,0.438666,0.234892,1.0,0.420307,0.243044,1.0,0.420264,0.335717,1.0,0.412605,0.398365,1.0,0.412372,0.406460,1.0,0.411033,0.402040,1.0,0.412372,0.425838,1.0,0.418492,0.430597,1.0,0.412181,0.424819,1.0,0.412181,0.422779,1.0,0.413328,0.425498,1.0,0.411990,0.427198,1.0,0.412563,0.426178,1.0,0.417153,0.432297,1.0,0.414858,0.434337,1.0,0.412181,0.427198,1.0,0.417535,0.434337,1.0,0.414093,0.436717,1.0,0.412372,0.440456,1.0,0.474665,0.218539,1.0,0.492306,0.210339,1.0,0.532250,0.273068,1.0,0.572068,0.264737,1.0,0.579729,0.261988,1.0,0.596937,0.258165,1.0,0.593026,0.265117,1.0,0.574255,0.263379,1.0,0.578557,0.263031,1.0,0.596740,0.277630,1.0,0.578359,0.271026,1.0,0.581490,0.263726,1.0,0.587943,0.282149,1.0,0.584812,0.273806,1.0,0.583641,0.277282,1.0,0.590484,0.283192,1.0,0.590677,0.282496,1.0,0.583641,0.292577,1.0,0.590677,0.284234,1.0,0.437129,0.422940,1.0,0.437129,0.422940,1.0,0.438711,0.621763,1.0,0.426401,0.779857,1.0,0.426401,0.779857,1.0,0.484635,0.420190,1.0,0.484635,0.420190,1.0,0.506140,0.619207,1.0,0.509250,0.711850,1.0,0.509250,0.711850,1.0
0.459400,0.426968,1.0,0.450803,0.280822,1.0,0.453669,0.329538,1.0,0.447938,0.232107,1.0,0.453222,0.120292,1.0,0.460143,0.120331,1.0,0.460143,0.120331,1.0,0.446300,0.120253,1.0,0.446300,0.120253,1.0,0.430269,0.241604,1.0,0.412601,0.251101,1.0,0.411115,0.357543,1.0,0.420262,0.428385,1.0,0.422182,0.436140,1.0,0.425697,0.443952,1.0,0.428993,0.454498,1.0,0.425917,0.444343,1.0,0.430531,0.457623,1.0,0.432289,0.470122,1.0,0.425697,0.446686,1.0,0.429652,0.459185,1.0,0.431190,0.474028,1.0,0.423500,0.448639,1.0,0.427455,0.459576,1.0,0.429432,0.472075,1.0,0.420864,0.450201,1.0,0.425697,0.459185,1.0,0.427675,0.468169,1.0,0.466323,0.225278,1.0,0.484708,0.218448,1.0,0.521474,0.286634,1.0,0.549042,0.294808,1.0,0.548000,0.296119,1.0,0.555797,0.292307,1.0,0.559693,0.291268,1.0,0.565932,0.292307,1.0,0.574313,0.285724,1.0,0.568854,0.295426,1.0,0.558917,0.289535,1.0,0.572365,0.285378,1.0,0.566516,0.301663,1.0,0.556771,0.298198,1.0,0.559693,0.298544,1.0,0.560865,0.298544,1.0,0.557161,0.301317,1.0,0.543516,0.298544,1.0,0.559500,0.298544,1.0,0.435666,0.431072,1.0,0.435666,0.431072,1.0,0.446252,0.632714,1.0,0.429480,0.779922,1.0,0.429480,0.779922,1.0,0.483134,0.422863,1.0,0.483134,0.422863,1.0,0.497019,0.624514,1.0,0.516874,0.700794,1.0,0.516874,0.700794,1.0
0.459418,0.441921,1.0,0.449636,0.292722,1.0,0.452896,0.342455,1.0,0.446375,0.242989,1.0,0.441785,0.151689,1.0,0.458541,0.131316,1.0,0.458541,0.131316,1.0,0.438718,0.128512,1.0,0.438718,0.128512,1.0,0.428709,0.249797,1.0,0.411043,0.256605,1.0,0.409588,0.365647,1.0,0.423372,0.447300,1.0,0.429046,0.453039,1.0,0.435573,0.464243,1.0,0.439175,0.480648,1.0,0.436023,0.465043,1.0,0.439850,0.475846,1.0,0.443001,0.488651,1.0,0.433323,0.465043,1.0,0.437374,0.476646,1.0,0.439625,0.491452,1.0,0.428821,0.463843,1.0,0.431297,0.473445,1.0,0.437599,0.487450,1.0,0.424545,0.462242,1.0,0.424995,0.469043,1.0,0.424995,0.472645,1.0,0.463989,0.234801,1.0,0.481603,0.226614,1.0,0.518344,0.294928,1.0,0.518366,0.330201,1.0,0.529880,0.345655,1.0,0.524615,0.343228,1.0,0.513303,0.335253,1.0,0.516033,0.333172,1.0,0.520519,0.339760,1.0,0.514862,0.337333,1.0,0.531635,0.334213,1.0,0.522276,0.335253,1.0,0.516423,0.331785,1.0,0.531635,0.332132,1.0,0.523833,0.329012,1.0,0.523833,0.329358,1.0,0.524422,0.325198,1.0,0.522661,0.325544,1.0,0.521885,0.325198,1.0,0.435694,0.447346,1.0,0.435694,0.447346,1.0,0.447817,0.640981,1.0,0.429508,0.788006,1.0,0.429508,0.788006,1.0,0.483142,0.436495,1.0,0.483142,0.436495,1.0,0.495444,0.621719,1.0,0.519881,0.679050,1.0,0.519881,0.679050,1.0
0.459419,0.447368,1.0,0.446173,0.298191,1.0,0.450588,0.347917,1.0,0.441757,0.248466,1.0,0.439480,0.159812,1.0,0.449463,0.139546,1.0,0.449463,0.139546,1.0,0.435621,0.139430,1.0,0.435621,0.139430,1.0,0.424873,0.258004,1.0,0.407990,0.267543,1.0,0.409537,0.379261,1.0,0.427951,0.447381,1.0,0.433104,0.453051,1.0,0.440253,0.469040,1.0,0.442559,0.481338,1.0,0.440484,0.470269,1.0,0.442559,0.484618,1.0,0.444173,0.496507,1.0,0.438408,0.467400,1.0,0.440484,0.482158,1.0,0.442329,0.494047,1.0,0.434949,0.463710,1.0,0.436564,0.474369,1.0,0.440714,0.486668,1.0,0.431721,0.459610,1.0,0.431490,0.464940,1.0,0.431259,0.468630,1.0,0.458608,0.238917,1.0,0.475459,0.229368,1.0,0.506161,0.313924,1.0,0.470896,0.346530,1.0,0.464035,0.355075,1.0,0.448667,0.356182,1.0,0.463412,0.347321,1.0,0.460505,0.328492,1.0,0.460090,0.342891,1.0,0.463620,0.347321,1.0,0.450536,0.353967,1.0,0.456974,0.349906,1.0,0.459674,0.352859,1.0,0.450952,0.354336,1.0,0.457182,0.349906,1.0,0.458636,0.348429,1.0,0.466528,0.351013,1.0,0.464035,0.347321,1.0,0.463620,0.348429,1.0,0.435682,0.450141,1.0,0.435682,0.450141,1.0,0.447875,0.643655,1.0,0.430995,0.790724,1.0,0.430995,0.790724,1.0,0.483156,0.444594,1.0,0.483156,0.444594,1.0,0.495308,0.613579,1.0,0.521510,0.665481,1.0,0.521510,0.665481,1.0
0.460919,0.436503,1.0,0.443094,0.295558,1.0,0.449036,0.342540,1.0,0.437153,0.248577,1.0,0.435619,0.162582,1.0,0.447940,0.142185,1.0,0.447940,0.142185,1.0,0.434071,0.139547,1.0,0.434071,0.139547,1.0,0.419529,0.259366,1.0,0.401905,0.270156,1.0,0.409480,0.376460,1.0,0.426451,0.431090,1.0,0.432935,0.434181,1.0,0.432714,0.451083,1.0,0.436031,0.456586,1.0,0.439790,0.441256,1.0,0.444655,0.455014,1.0,0.446866,0.466020,1.0,0.439569,0.441256,1.0,0.443549,0.456586,1.0,0.444655,0.471917,1.0,0.436916,0.442435,1.0,0.440453,0.456586,1.0,0.443107,0.468772,1.0,0.434483,0.446759,1.0,0.438242,0.455800,1.0,0.441780,0.465234,1.0,0.454789,0.239038,1.0,0.472425,0.229500,1.0,0.496908,0.316612,1.0,0.466301,0.335678,1.0,0.462028,0.331609,1.0,0.455397,0.340183,1.0,0.449167,0.341255,1.0,0.455999,0.354830,1.0,0.457004,0.356617,1.0,0.462229,0.357331,1.0,0.463434,0.360189,1.0,0.463635,0.351972,1.0,0.470066,0.357331,1.0,0.465444,0.353758,1.0,0.463635,0.351257,1.0,0.463434,0.352330,1.0,0.466851,0.356617,1.0,0.468458,0.357688,1.0,0.471673,0.358045,1.0,0.438695,0.444652,1.0,0.438695,0.444652,1.0,0.447859,0.643630,1.0,0.432496,0.790735,1.0,0.432496,0.790735,1.0,0.483142,0.428354,1.0,0.483142,0.428354,1.0,0.495333,0.597195,1.0,0.526089,0.668240,1.0,0.526089,0.668240,1.0
0.460919,0.436503,1.0,0.443094,0.295558,1.0,0.449036,0.342540,1.0,0.437153,0.248577,1.0,0.435619,0.162582,1.0,0.447940,0.142185,1.0,0.447940,0.142185,1.0,0.434071,0.139547,1.0,0.434071,0.139547,1.0,0.419529,0.259366,1.0,0.401905,0.270156,1.0,0.409480,0.376460,1.0,0.426451,0.431090,1.0,0.432935,0.434181,1.0,0.432714,0.451083,1.0,0.436031,0.456586,1.0,0.439790,0.441256,1.0,0.444655,0.455014,1.0,0.446866,0.466020,1.0,0.439569,0.441256,1.0,0.443549,0.456586,1.0,0.444655,0.471917,1.0,0.436916,0.442435,1.0,0.440453,0.456586,1.0,0.443107,0.468772,1.0,0.434483,0.446759,1.0,0.438242,0.455800,1.0,0.441780,0.465234,1.0,0.454789,0.239038,1.0,0.472425,0.229500,1.0,0.496908,0.316612,1.0,0.466301,0.335678,1.0,0.462028,0.331609,1.0,0.455397,0.340183,1.0,0.449167,0.341255,1.0,0.455999,0.354830,1.0,0.457004,0.356617,1.0,0.462229,0.357331,1.0,0.463434,0.360189,1.0,0.463635,0.351972,1.0,0.470066,0.357331,1.0,0.465444,0.353758,1.0,0.463635,0.351257,1.0,0.463434,0.352330,1.0,0.466851,0.356617,1.0,0.468458,0.357688,1.0,0.471673,0.358045,1.0,0.438695,0.444652,1.0,0.438695,0.444652,1.0,0.447859,0.643630,1.0,0.432496,0.790735,1.0,0.432496,0.790735,1.0,0.483142,0.428354,1.0,0.483142,0.428354,1.0,0.495333,0.597195,1.0,0.526089,0.668240,1.0,0.526089,0.668240,1.0
0.460942,0.440587,1.0,0.441948,0.296405,1.0,0.448280,0.344466,1.0,0.435617,0.248344,1.0,0.431799,0.157131,1.0,0.446396,0.139552,1.0,0.446396,0.139552,1.0,0.432501,0.139342,1.0,0.432501,0.139342,1.0,0.417250,0.257902,1.0,0.398883,0.267459,1.0,0.409505,0.373821,1.0,0.423294,0.401110,1.0,0.431633,0.411701,1.0,0.437429,0.418834,1.0,0.440327,0.427156,1.0,0.436983,0.407342,1.0,0.438321,0.420816,1.0,0.438767,0.434290,1.0,0.433863,0.404568,1.0,0.437206,0.415268,1.0,0.437206,0.427553,1.0,0.430296,0.399019,1.0,0.433863,0.408531,1.0,0.437206,0.422797,1.0,0.426283,0.396642,1.0,0.427398,0.399019,1.0,0.422048,0.408134,1.0,0.453249,0.237506,1.0,0.470881,0.226669,1.0,0.492308,0.316492,1.0,0.457075,0.324799,1.0,0.447260,0.322888,1.0,0.437797,0.325393,1.0,0.431959,0.326467,1.0,0.439408,0.340068,1.0,0.438401,0.340783,1.0,0.439408,0.337562,1.0,0.443434,0.343647,1.0,0.443233,0.345436,1.0,0.446253,0.341857,1.0,0.448065,0.345436,1.0,0.448669,0.350090,1.0,0.451085,0.348657,1.0,0.452092,0.346510,1.0,0.454105,0.353669,1.0,0.457729,0.357964,1.0,0.438688,0.450095,1.0,0.438688,0.450095,1.0,0.446308,0.643556,1.0,0.432501,0.788101,1.0,0.432501,0.788101,1.0,0.483196,0.431079,1.0,0.483196,0.431079,1.0,0.498519,0.589161,1.0,0.532219,0.684510,1.0,0.532219,0.684510,1.0
0.462439,0.429657,1.0,0.441161,0.281578,1.0,0.448254,0.330938,1.0,0.434068,0.232219,1.0,0.429527,0.150325,1.0,0.446335,0.133998,1.0,0.446335,0.133998,1.0,0.427980,0.123215,1.0,0.427980,0.123215,1.0,0.416455,0.243099,1.0,0.398842,0.253980,1.0,0.406516,0.357404,1.0,0.418725,0.368419,1.0,0.415866,0.359809,1.0,0.422539,0.357513,1.0,0.420602,0.365932,1.0,0.422969,0.379709,1.0,0.422323,0.384684,1.0,0.424692,0.388129,1.0,0.422539,0.383918,1.0,0.423184,0.396548,1.0,0.423400,0.400375,1.0,0.407685,0.385449,1.0,0.423400,0.398079,1.0,0.416942,0.399992,1.0,0.405318,0.397695,1.0,0.443635,0.330724,1.0,0.437607,0.333785,1.0,0.450917,0.222638,1.0,0.467766,0.213056,1.0,0.483214,0.302959,1.0,0.446352,0.311191,1.0,0.436515,0.309080,1.0,0.425846,0.309424,1.0,0.421967,0.309768,1.0,0.428949,0.322529,1.0,0.428561,0.323563,1.0,0.430502,0.325287,1.0,0.433411,0.326321,1.0,0.433023,0.330805,1.0,0.434963,0.326667,1.0,0.438067,0.329425,1.0,0.438260,0.336322,1.0,0.440006,0.332874,1.0,0.441946,0.329770,1.0,0.443692,0.331839,1.0,0.444468,0.338046,1.0,0.440236,0.439185,1.0,0.440236,0.439185,1.0,0.440230,0.632706,1.0,0.432543,0.790757,1.0,0.432543,0.790757,1.0,0.484643,0.420129,1.0,0.484643,0.420129,1.0,0.509209,0.583725,1.0,0.536813,0.706176,1.0,0.536813,0.706176,1.0
0.463216,0.414730,1.0,0.440226,0.273651,1.0,0.447889,0.320677,1.0,0.432563,0.226624,1.0,0.428735,0.144905,1.0,0.446277,0.125791,1.0,0.446277,0.125791,1.0,0.426428,0.120337,1.0,0.426428,0.120337,1.0,0.414957,0.237551,1.0,0.397352,0.248479,1.0,0.408033,0.357577,1.0,0.412605,0.335673,1.0,0.407715,0.368662,1.0,0.402230,0.352006,1.0,0.402002,0.332507,1.0,0.408171,0.317069,1.0,0.422568,0.339006,1.0,0.420968,0.331694,1.0,0.422111,0.332101,1.0,0.424624,0.336163,1.0,0.428509,0.330069,1.0,0.423482,0.327226,1.0,0.430566,0.330882,1.0,0.432622,0.329663,1.0,0.434679,0.319507,1.0,0.433079,0.323164,1.0,0.434907,0.324382,1.0,0.448643,0.215708,1.0,0.464724,0.204793,1.0,0.478561,0.294754,1.0,0.435609,0.294796,1.0,0.426438,0.293100,1.0,0.416239,0.293443,1.0,0.408733,0.295837,1.0,0.416816,0.309865,1.0,0.405269,0.314655,1.0,0.402767,0.312944,1.0,0.421434,0.322866,1.0,0.416239,0.325603,1.0,0.421627,0.324919,1.0,0.424321,0.323550,1.0,0.418355,0.331761,1.0,0.417778,0.334156,1.0,0.428362,0.323207,1.0,0.431634,0.329024,1.0,0.417778,0.336551,1.0,0.441770,0.425704,1.0,0.441770,0.425704,1.0,0.435546,0.621920,1.0,0.435630,0.793463,1.0,0.435630,0.793463,1.0,0.484662,0.403756,1.0,0.484662,0.403756,1.0,0.521458,0.583664,1.0,0.544500,0.725402,1.0,0.544500,0.725402,1.0
0.464698,0.416109,1.0,0.440568,0.271904,1.0,0.448611,0.319972,1.0,0.432525,0.223835,1.0,0.428732,0.140786,1.0,0.444821,0.123125,1.0,0.444821,0.123125,1.0,0.426427,0.117715,1.0,0.426427,0.117715,1.0,0.415681,0.234785,1.0,0.398837,0.245735,1.0,0.408033,0.352043,1.0,0.403435,0.316503,1.0,0.398589,0.303196,1.0,0.394816,0.294516,1.0,0.397479,0.279917,1.0,0.408354,0.298461,1.0,0.406579,0.280706,1.0,0.399254,0.277549,1.0,0.403028,0.299645,1.0,0.404803,0.281889,1.0,0.404581,0.306353,1.0,0.400808,0.297278,1.0,0.395925,0.290175,1.0,0.396147,0.290569,1.0,0.395925,0.296489,1.0,0.394593,0.279522,1.0,0.399920,0.280311,1.0,0.447087,0.210244,1.0,0.461649,0.196653,1.0,0.472352,0.291939,1.0,0.429454,0.289294,1.0,0.417904,0.280935,1.0,0.409282,0.277727,1.0,0.403267,0.278083,1.0,0.408681,0.283787,1.0,0.400059,0.287707,1.0,0.400059,0.289133,1.0,0.407879,0.294837,1.0,0.401463,0.301253,1.0,0.403468,0.301253,1.0,0.409683,0.306956,1.0,0.402064,0.307313,1.0,0.404069,0.308381,1.0,0.411689,0.318719,1.0,0.403468,0.315511,1.0,0.404470,0.314798,1.0,0.444760,0.428383,1.0,0.444760,0.428383,1.0,0.426415,0.621829,1.0,0.444807,0.796251,1.0,0.444807,0.796251,1.0,0.484636,0.403834,1.0,0.484636,0.403834,1.0,0.532172,0.589107,1.0,0.546073,0.749830,1.0,0.546073,0.749830,1.0
0.465474,0.424221,1.0,0.441888,0.273930,1.0,0.449750,0.324027,1.0,0.434027,0.223833,1.0,0.428779,0.142186,1.0,0.444843,0.125802,1.0,0.444843,0.125802,1.0,0.426420,0.120337,1.0,0.426420,0.120337,1.0,0.417190,0.234775,1.0,0.400354,0.245718,1.0,0.406480,0.346535,1.0,0.403420,0.300287,1.0,0.419359,0.291721,1.0,0.418731,0.303997,1.0,0.417685,0.314785,1.0,0.413082,0.313297,1.0,0.415383,0.316645,1.0,0.415383,0.316273,1.0,0.411826,0.307718,1.0,0.410361,0.311809,1.0,0.410780,0.311065,1.0,0.408059,0.306973,1.0,0.406385,0.309949,1.0,0.405130,0.306601,1.0,0.402828,0.299533,1.0,0.401364,0.304369,1.0,0.401364,0.300277,1.0,0.447841,0.208870,1.0,0.461655,0.193907,1.0,0.469302,0.291932,1.0,0.421820,0.275789,1.0,0.413502,0.274093,1.0,0.404108,0.269736,1.0,0.394102,0.270825,1.0,0.403700,0.274819,1.0,0.402679,0.273004,1.0,0.401249,0.276271,1.0,0.404313,0.283894,1.0,0.408193,0.306404,1.0,0.405742,0.304225,1.0,0.403904,0.296964,1.0,0.411052,0.308944,1.0,0.405946,0.308944,1.0,0.415136,0.305678,1.0,0.415340,0.308582,1.0,0.415340,0.313665,1.0,0.446285,0.439195,1.0,0.446285,0.439195,1.0,0.424876,0.621854,1.0,0.444784,0.796262,1.0,0.444784,0.796262,1.0,0.484662,0.409246,1.0,0.484662,0.409246,1.0,0.538297,0.597166,1.0,0.547531,0.763568,1.0,0.547531,0.763568,1.0
0.465474,0.424221,1.0,0.441888,0.273930,1.0,0.449750,0.324027,1.0,0.434027,0.223833,1.0,0.428779,0.142186,1.0,0.444843,0.125802,1.0,0.444843,0.125802,1.0,0.426420,0.120337,1.0,0.426420,0.120337,1.0,0.417190,0.234775,1.0,0.400354,0.245718,1.0,0.406480,0.346535,1.0,0.403420,0.300287,1.0,0.419359,0.291721,1.0,0.418731,0.303997,1.0,0.417685,0.314785,1.0,0.413082,0.313297,1.0,0.415383,0.316645,1.0,0.415383,0.316273,1.0,0.411826,0.307718,1.0,0.410361,0.311809,1.0,0.410780,0.311065,1.0,0.408059,0.306973,1.0,0.406385,0.309949,1.0,0.405130,0.306601,1.0,0.402828,0.299533,1.0,0.401364,0.304369,1.0,0.401364,0.300277,1.0,0.447841,0.208870,1.0,0.461655,0.193907,1.0,0.469302,0.291932,1.0,0.421820,0.275789,1.0,0.413502,0.274093,1.0,0.404108,0.269736,1.0,0.394102,0.270825,1.0,0.403700,0.274819,1.0,0.402679,0.273004,1.0,0.401249,0.276271,1.0,0.404313,0.283894,1.0,0.408193,0.306404,1.0,0.405742,0.304225,1.0,0.403904,0.296964,1.0,0.411052,0.308944,1.0,0.405946,0.308944,1.0,0.415136,0.305678,1.0,0.415340,0.308582,1.0,0.415340,0.313665,1.0,0.446285,0.439195,1.0,0.446285,0.439195,1.0,0.424876,0.621854,1.0,0.444784,0.796262,1.0,0.444784,0.796262,1.0,0.484662,0.409246,1.0,0.484662,0.409246,1.0,0.538297,0.597166,1.0,0.547531,0.763568,1.0,0.547531,0.763568,1.0
0.466323,0.426929,1.0,0.442147,0.276618,1.0,0.450206,0.326722,1.0,0.434089,0.226515,1.0,0.429513,0.149006,1.0,0.446314,0.133966,1.0,0.446314,0.133966,1.0,0.429470,0.123084,1.0,0.429470,0.123084,1.0,0.418748,0.237504,1.0,0.403406,0.248494,1.0,0.408026,0.352034,1.0,0.401896,0.316505,1.0,0.411875,0.302113,1.0,0.397515,0.310876,1.0,0.398158,0.287633,1.0,0.402016,0.315068,1.0,0.402659,0.281537,1.0,0.395586,0.278869,1.0,0.406303,0.313924,1.0,0.406303,0.281918,1.0,0.398158,0.281537,1.0,0.409303,0.316592,1.0,0.410804,0.281918,1.0,0.415947,0.316592,1.0,0.420020,0.299064,1.0,0.419591,0.300207,1.0,0.414661,0.320020,1.0,0.447878,0.212956,1.0,0.461668,0.199397,1.0,0.466286,0.294724,1.0,0.421883,0.291982,1.0,0.419076,0.304065,1.0,0.415719,0.314594,1.0,0.413745,0.315647,1.0,0.395383,0.280899,1.0,0.392422,0.280899,1.0,0.395186,0.280899,1.0,0.395778,0.281250,1.0,0.398147,0.280899,1.0,0.412560,0.312489,1.0,0.398147,0.299502,1.0,0.398740,0.302661,1.0,0.408414,0.312138,1.0,0.397160,0.306170,1.0,0.398542,0.306170,1.0,0.405255,0.317403,1.0,0.446407,0.441882,1.0,0.446407,0.441882,1.0,0.427942,0.621966,1.0,0.444781,0.796176,1.0,0.444781,0.796176,1.0,0.486239,0.411976,1.0,0.486239,0.411976,1.0,0.533734,0.597369,1.0,0.547562,0.768908,1.0,0.547562,0.768908,1.0
0.467829,0.417446,1.0,0.443657,0.274430,1.0,0.451714,0.322102,1.0,0.435599,0.226757,1.0,0.432571,0.147664,1.0,0.446384,0.136682,1.0,0.446384,0.136682,1.0,0.432490,0.125898,1.0,0.432490,0.125898,1.0,0.420273,0.238922,1.0,0.404947,0.251086,1.0,0.407997,0.346586,1.0,0.403451,0.316613,1.0,0.408859,0.305669,1.0,0.413597,0.328829,1.0,0.418926,0.349532,1.0,0.414978,0.335145,1.0,0.419321,0.349181,1.0,0.421295,0.356199,1.0,0.412018,0.342514,1.0,0.409057,0.349883,1.0,0.405504,0.347778,1.0,0.407478,0.346725,1.0,0.402346,0.355497,1.0,0.400964,0.346725,1.0,0.402543,0.347427,1.0,0.398990,0.353042,1.0,0.397806,0.346725,1.0,0.450940,0.215806,1.0,0.466281,0.204855,1.0,0.470840,0.308431,1.0,0.423426,0.305650,1.0,0.421715,0.321883,1.0,0.424287,0.339034,1.0,0.430076,0.348563,1.0,0.399847,0.285676,1.0,0.395131,0.308925,1.0,0.392129,0.306638,1.0,0.396846,0.306257,1.0,0.395345,0.309306,1.0,0.394916,0.307019,1.0,0.396846,0.305494,1.0,0.395131,0.307781,1.0,0.394702,0.306257,1.0,0.396631,0.304732,1.0,0.402205,0.284152,1.0,0.395559,0.287200,1.0,0.447890,0.428384,1.0,0.447890,0.428384,1.0,0.435627,0.624519,1.0,0.446259,0.796135,1.0,0.446259,0.796135,1.0,0.487767,0.406507,1.0,0.487767,0.406507,1.0,0.521536,0.613637,1.0,0.547500,0.768923,1.0,0.547500,0.768923,1.0
0.471645,0.428273,1.0,0.445814,0.281172,1.0,0.454424,0.330206,1.0,0.437204,0.232139,1.0,0.438650,0.154426,1.0,0.447940,0.139526,1.0,0.447940,0.139526,1.0,0.434029,0.136708,1.0,0.434029,0.136708,1.0,0.423376,0.243019,1.0,0.409549,0.253900,1.0,0.409539,0.308406,1.0,0.409507,0.338457,1.0,0.404210,0.331179,1.0,0.400723,0.334778,1.0,0.408146,0.340577,1.0,0.408934,0.339177,1.0,0.407809,0.340977,1.0,0.405335,0.344176,1.0,0.406347,0.334978,1.0,0.404097,0.343176,1.0,0.404547,0.345576,1.0,0.406122,0.334978,1.0,0.403985,0.342976,1.0,0.404097,0.342376,1.0,0.414670,0.368969,1.0,0.414445,0.369769,1.0,0.408709,0.338577,1.0,0.454040,0.221234,1.0,0.470876,0.210329,1.0,0.477006,0.319297,1.0,0.447840,0.335603,1.0,0.440927,0.330940,1.0,0.448384,0.363080,1.0,0.447932,0.342189,1.0,0.442735,0.365088,1.0,0.443412,0.375131,1.0,0.456745,0.375533,1.0,0.442960,0.365892,1.0,0.445672,0.375131,1.0,0.457649,0.386381,1.0,0.443639,0.354241,1.0,0.446124,0.371114,1.0,0.457197,0.386381,1.0,0.446124,0.356652,1.0,0.448158,0.364686,1.0,0.456519,0.376337,1.0,0.449419,0.436477,1.0,0.449419,0.436477,1.0,0.446372,0.635424,1.0,0.446382,0.796196,1.0,0.446382,0.796196,1.0,0.493871,0.420069,1.0,0.493871,0.420069,1.0,0.509139,0.619045,1.0,0.545922,0.763539,1.0,0.545922,0.763539,1.0
0.475462,0.444706,1.0,0.454725,0.297445,1.0,0.461637,0.346532,1.0,0.447812,0.248358,1.0,0.441729,0.161169,1.0,0.450949,0.144871,1.0,0.450949,0.144871,1.0,0.435588,0.142156,1.0,0.435588,0.142156,1.0,0.429493,0.257916,1.0,0.411173,0.267473,1.0,0.412652,0.363018,1.0,0.406451,0.379244,1.0,0.411308,0.382845,1.0,0.408349,0.402831,1.0,0.404405,0.418610,1.0,0.406377,0.405286,1.0,0.398093,0.420013,1.0,0.395924,0.430531,1.0,0.401644,0.401780,1.0,0.395332,0.417207,1.0,0.392965,0.428428,1.0,0.397305,0.397572,1.0,0.392768,0.411948,1.0,0.390993,0.423519,1.0,0.393360,0.394066,1.0,0.390598,0.407741,1.0,0.389809,0.416156,1.0,0.463951,0.237525,1.0,0.480089,0.226693,1.0,0.484641,0.349311,1.0,0.463205,0.379226,1.0,0.467035,0.362951,1.0,0.466020,0.355287,1.0,0.467795,0.357993,1.0,0.469570,0.361598,1.0,0.472106,0.369262,1.0,0.471599,0.368811,1.0,0.465006,0.361148,1.0,0.460949,0.375573,1.0,0.470078,0.365656,1.0,0.465006,0.360697,1.0,0.469824,0.389097,1.0,0.452074,0.386844,1.0,0.465260,0.360246,1.0,0.466781,0.358894,1.0,0.452327,0.387745,1.0,0.453985,0.447460,1.0,0.453985,0.447460,1.0,0.452458,0.643624,1.0,0.446383,0.798926,1.0,0.446383,0.798926,1.0,0.496939,0.441953,1.0,0.496939,0.441953,1.0,0.496877,0.627233,1.0,0.545937,0.768882,1.0,0.545937,0.768882,1.0
0.477004,0.452840,1.0,0.456339,0.301598,1.0,0.463227,0.352012,1.0,0.449450,0.251183,1.0,0.447863,0.164013,1.0,0.458518,0.153112,1.0,0.458518,0.153112,1.0,0.438658,0.145009,1.0,0.438658,0.145009,1.0,0.434085,0.260676,1.0,0.418720,0.270169,1.0,0.417197,0.376446,1.0,0.398856,0.387477,1.0,0.389294,0.388778,1.0,0.382493,0.393847,1.0,0.376790,0.405547,1.0,0.382932,0.393068,1.0,0.375693,0.414128,1.0,0.374376,0.417247,1.0,0.384029,0.412178,1.0,0.380299,0.423488,1.0,0.382932,0.432847,1.0,0.386661,0.428947,1.0,0.385565,0.428557,1.0,0.383371,0.439478,1.0,0.385565,0.433628,1.0,0.386003,0.429728,1.0,0.387758,0.448057,1.0,0.467061,0.243044,1.0,0.484671,0.234905,1.0,0.493852,0.332933,1.0,0.496958,0.384669,1.0,0.503725,0.426897,1.0,0.513979,0.440021,1.0,0.519515,0.446948,1.0,0.516849,0.424345,1.0,0.520953,0.430907,1.0,0.523411,0.436011,1.0,0.510287,0.424710,1.0,0.516029,0.432001,1.0,0.517055,0.442574,1.0,0.504135,0.418147,1.0,0.508442,0.431637,1.0,0.512543,0.441116,1.0,0.499623,0.421429,1.0,0.507211,0.429814,1.0,0.506596,0.435282,1.0,0.455558,0.458267,1.0,0.455558,0.458267,1.0,0.447916,0.643644,1.0,0.446391,0.796303,1.0,0.446391,0.796303,1.0,0.498451,0.447414,1.0,0.498451,0.447414,1.0,0.495318,0.632737,1.0,0.544474,0.769003,1.0,0.544474,0.769003,1.0
0.477004,0.452840,1.0,0.456339,0.301598,1.0,0.463227,0.352012,1.0,0.449450,0.251183,1.0,0.447863,0.164013,1.0,0.458518,0.153112,1.0,0.458518,0.153112,1.0,0.438658,0.145009,1.0,0.438658,0.145009,1.0,0.434085,0.260676,1.0,0.418720,0.270169,1.0,0.417197,0.376446,1.0,0.398856,0.387477,1.0,0.389294,0.388778,1.0,0.382493,0.393847,1.0,0.376790,0.405547,1.0,0.382932,0.393068,1.0,0.375693,0.414128,1.0,0.374376,0.417247,1.0,0.384029,0.412178,1.0,0.380299,0.423488,1.0,0.382932,0.432847,1.0,0.386661,0.428947,1.0,0.385565,0.428557,1.0,0.383371,0.439478,1.0,0.385565,0.433628,1.0,0.386003,0.429728,1.0,0.387758,0.448057,1.0,0.467061,0.243044,1.0,0.484671,0.234905,1.0,0.493852,0.332933,1.0,0.496958,0.384669,1.0,0.503725,0.426897,1.0,0.513979,0.440021,1.0,0.519515,0.446948,1.0,0.516849,0.424345,1.0,0.520953,0.430907,1.0,0.523411,0.436011,1.0,0.510287,0.424710,1.0,0.516029,0.432001,1.0,0.517055,0.442574,1.0,0.504135,0.418147,1.0,0.508442,0.431637,1.0,0.512543,0.441116,1.0,0.499623,0.421429,1.0,0.507211,0.429814,1.0,0.506596,0.435282,1.0,0.455558,0.458267,1.0,0.455558,0.458267,1.0,0.447916,0.643644,1.0,0.446391,0.796303,1.0,0.446391,0.796303,1.0,0.498451,0.447414,1.0,0.498451,0.447414,1.0,0.495318,0.632737,1.0,0.544474,0.769003,1.0,0.544474,0.769003,1.0
0.477791,0.452864,1.0,0.463356,0.301633,1.0,0.468168,0.352043,1.0,0.458545,0.251222,1.0,0.453249,0.162654,1.0,0.460148,0.155780,1.0,0.460148,0.155780,1.0,0.446276,0.144970,1.0,0.446276,0.144970,1.0,0.440180,0.259389,1.0,0.421816,0.267556,1.0,0.420280,0.373811,1.0,0.394246,0.398315,1.0,0.380830,0.396264,1.0,0.372495,0.402112,1.0,0.371837,0.404062,1.0,0.374030,0.401332,1.0,0.365257,0.417319,1.0,0.367231,0.414590,1.0,0.374030,0.423169,1.0,0.372056,0.429797,1.0,0.372714,0.430187,1.0,0.375785,0.435645,1.0,0.374030,0.435256,1.0,0.371837,0.438765,1.0,0.375127,0.438375,1.0,0.364380,0.419269,1.0,0.371179,0.445004,1.0,0.476180,0.248443,1.0,0.493815,0.245663,1.0,0.498480,0.354773,1.0,0.521510,0.398288,1.0,0.524365,0.398598,1.0,0.536109,0.396591,1.0,0.539271,0.396190,1.0,0.511947,0.425894,1.0,0.545141,0.412246,1.0,0.544911,0.411043,1.0,0.542432,0.413049,1.0,0.544464,0.414254,1.0,0.544464,0.429507,1.0,0.540625,0.417465,1.0,0.544234,0.436331,1.0,0.543333,0.434726,1.0,0.516237,0.433120,1.0,0.544010,0.436331,1.0,0.535432,0.436733,1.0,0.457085,0.461005,1.0,0.457085,0.461005,1.0,0.435653,0.640875,1.0,0.444823,0.796282,1.0,0.444823,0.796282,1.0,0.498497,0.444724,1.0,0.498497,0.444724,1.0,0.496984,0.638054,1.0,0.544437,0.771575,1.0,0.544437,0.771575,1.0
0.478558,0.448766,1.0,0.465874,0.300535,1.0,0.470102,0.349945,1.0,0.461646,0.251124,1.0,0.457878,0.161268,1.0,0.466266,0.147592,1.0,0.466266,0.147592,1.0,0.447936,0.142278,1.0,0.447936,0.142278,1.0,0.443297,0.255249,1.0,0.424947,0.259374,1.0,0.421783,0.371099,1.0,0.388072,0.398231,1.0,0.377179,0.392410,1.0,0.366560,0.397334,1.0,0.361251,0.405952,1.0,0.364714,0.421546,1.0,0.358943,0.433447,1.0,0.356865,0.438782,1.0,0.368407,0.428523,1.0,0.361020,0.438782,1.0,0.357789,0.447811,1.0,0.371870,0.432217,1.0,0.365406,0.441656,1.0,0.361251,0.452325,1.0,0.374870,0.434679,1.0,0.368638,0.446990,1.0,0.368176,0.449453,1.0,0.479293,0.247088,1.0,0.496941,0.243052,1.0,0.509169,0.357524,1.0,0.542885,0.384826,1.0,0.540307,0.406232,1.0,0.544396,0.419482,1.0,0.566516,0.402812,1.0,0.564594,0.406232,1.0,0.566276,0.406659,1.0,0.567479,0.409652,1.0,0.562427,0.411361,1.0,0.569161,0.416063,1.0,0.572047,0.416063,1.0,0.560984,0.405377,1.0,0.567479,0.428459,1.0,0.568682,0.427605,1.0,0.559063,0.391699,1.0,0.564833,0.433161,1.0,0.574208,0.434870,1.0,0.457099,0.455548,1.0,0.457099,0.455548,1.0,0.424897,0.635443,1.0,0.441763,0.796292,1.0,0.441763,0.796292,1.0,0.500017,0.441984,1.0,0.500017,0.441984,1.0,0.510710,0.635371,1.0,0.544484,0.771575,1.0,0.544484,0.771575,1.0
0.482335,0.448740,1.0,0.473737,0.298420,1.0,0.476603,0.348526,1.0,0.470871,0.248313,1.0,0.465522,0.153060,1.0,0.470941,0.142180,1.0,0.470941,0.142180,1.0,0.457035,0.139488,1.0,0.457035,0.139488,1.0,0.452487,0.249708,1.0,0.434103,0.251104,1.0,0.423366,0.360186,1.0,0.385060,0.382113,1.0,0.371277,0.381631,1.0,0.362365,0.384068,1.0,0.357566,0.393818,1.0,0.359622,0.410068,1.0,0.354138,0.416568,1.0,0.350253,0.423880,1.0,0.362365,0.422255,1.0,0.354595,0.423473,1.0,0.350482,0.431598,1.0,0.367163,0.424286,1.0,0.360308,0.426723,1.0,0.357566,0.435255,1.0,0.367849,0.423473,1.0,0.362136,0.429161,1.0,0.360765,0.435255,1.0,0.489243,0.244289,1.0,0.507615,0.240265,1.0,0.516858,0.357362,1.0,0.556740,0.382113,1.0,0.561115,0.383774,1.0,0.575271,0.382906,1.0,0.582833,0.390281,1.0,0.580391,0.399390,1.0,0.586979,0.401559,1.0,0.586495,0.403294,1.0,0.578927,0.402860,1.0,0.588203,0.408933,1.0,0.588203,0.406331,1.0,0.576734,0.415874,1.0,0.584786,0.415006,1.0,0.589906,0.413705,1.0,0.576490,0.417609,1.0,0.581854,0.421946,1.0,0.589906,0.422381,1.0,0.458568,0.452819,1.0,0.458568,0.452819,1.0,0.423329,0.629987,1.0,0.440196,0.796177,1.0,0.440196,0.796177,1.0,0.506101,0.444660,1.0,0.506101,0.444660,1.0,0.529125,0.624589,1.0,0.546016,0.768919,1.0,0.546016,0.768919,1.0
0.483121,0.443282,1.0,0.479665,0.289018,1.0,0.480817,0.340440,1.0,0.478512,0.237597,1.0,0.475445,0.147619,1.0,0.478510,0.139398,1.0,0.478510,0.139398,1.0,0.460222,0.136756,1.0,0.460222,0.136756,1.0,0.460883,0.241635,1.0,0.443254,0.245673,1.0,0.429495,0.357414,1.0,0.384953,0.373812,1.0,0.367422,0.370831,1.0,0.361521,0.367474,1.0,0.352315,0.379644,1.0,0.360105,0.370412,1.0,0.349719,0.398946,1.0,0.344998,0.413632,1.0,0.356800,0.398946,1.0,0.352315,0.398527,1.0,0.346651,0.413213,1.0,0.359632,0.409856,1.0,0.353968,0.399785,1.0,0.350427,0.405241,1.0,0.367422,0.401044,1.0,0.359160,0.401044,1.0,0.343582,0.416990,1.0,0.496160,0.234900,1.0,0.513808,0.232204,1.0,0.523042,0.357461,1.0,0.569047,0.379150,1.0,0.575104,0.372868,1.0,0.587615,0.372405,1.0,0.595958,0.380283,1.0,0.593094,0.388161,1.0,0.604563,0.397894,1.0,0.601953,0.396040,1.0,0.591526,0.399283,1.0,0.602995,0.409016,1.0,0.602214,0.410406,1.0,0.587615,0.406235,1.0,0.595177,0.416431,1.0,0.592047,0.415040,1.0,0.581099,0.409479,1.0,0.584229,0.416431,1.0,0.585792,0.419675,1.0,0.458647,0.447345,1.0,0.458647,0.447345,1.0,0.421882,0.627243,1.0,0.437208,0.796318,1.0,0.437208,0.796318,1.0,0.507595,0.439219,1.0,0.507595,0.439219,1.0,0.544500,0.621924,1.0,0.549031,0.771580,1.0,0.549031,0.771580,1.0
0.484684,0.445994,1.0,0.484720,0.289691,1.0,0.484708,0.341792,1.0,0.484732,0.237590,1.0,0.480869,0.142213,1.0,0.484703,0.139417,1.0,0.484703,0.139417,1.0,0.470845,0.139335,1.0,0.470845,0.139335,1.0,0.466349,0.237594,1.0,0.447967,0.237597,1.0,0.434046,0.354670,1.0,0.384950,0.360244,1.0,0.377143,0.358132,1.0,0.362822,0.350231,1.0,0.355908,0.353304,1.0,0.356402,0.356377,1.0,0.349982,0.356377,1.0,0.345043,0.386227,1.0,0.355661,0.367790,1.0,0.349241,0.377886,1.0,0.345538,0.386227,1.0,0.357636,0.378765,1.0,0.352451,0.388422,1.0,0.345043,0.390617,1.0,0.360599,0.385349,1.0,0.356896,0.391933,1.0,0.352698,0.398957,1.0,0.503121,0.236241,1.0,0.521510,0.234893,1.0,0.532198,0.357583,1.0,0.581193,0.368394,1.0,0.585839,0.366042,1.0,0.597109,0.362853,1.0,0.606333,0.369685,1.0,0.603000,0.380616,1.0,0.612734,0.386081,1.0,0.616833,0.391092,1.0,0.601464,0.389725,1.0,0.610943,0.396101,1.0,0.616068,0.400656,1.0,0.599156,0.397468,1.0,0.608635,0.406121,1.0,0.610432,0.409309,1.0,0.596083,0.402933,1.0,0.600182,0.410220,1.0,0.598901,0.408398,1.0,0.460201,0.447407,1.0,0.460201,0.447407,1.0,0.421833,0.627233,1.0,0.437130,0.796287,1.0,0.437130,0.796287,1.0,0.509167,0.444581,1.0,0.509167,0.444581,1.0,0.556682,0.621813,1.0,0.553620,0.771643,1.0,0.553620,0.771643,1.0
0.484684,0.445994,1.0,0.484720,0.289691,1.0,0.484708,0.341792,1.0,0.484732,0.237590,1.0,0.480869,0.142213,1.0,0.484703,0.139417,1.0,0.484703,0.139417,1.0,0.470845,0.139335,1.0,0.470845,0.139335,1.0,0.466349,0.237594,1.0,0.447967,0.237597,1.0,0.434046,0.354670,1.0,0.384950,0.360244,1.0,0.377143,0.358132,1.0,0.362822,0.350231,1.0,0.355908,0.353304,1.0,0.356402,0.356377,1.0,0.349982,0.356377,1.0,0.345043,0.386227,1.0,0.355661,0.367790,1.0,0.349241,0.377886,1.0,0.345538,0.386227,1.0,0.357636,0.378765,1.0,0.352451,0.388422,1.0,0.345043,0.390617,1.0,0.360599,0.385349,1.0,0.356896,0.391933,1.0,0.352698,0.398957,1.0,0.503121,0.236241,1.0,0.521510,0.234893,1.0,0.532198,0.357583,1.0,0.581193,0.368394,1.0,0.585839,0.366042,1.0,0.597109,0.362853,1.0,0.606333,0.369685,1.0,0.603000,0.380616,1.0,0.612734,0.386081,1.0,0.616833,0.391092,1.0,0.601464,0.389725,1.0,0.610943,0.396101,1.0,0.616068,0.400656,1.0,0.599156,0.397468,1.0,0.608635,0.406121,1.0,0.610432,0.409309,1.0,0.596083,0.402933,1.0,0.600182,0.410220,1.0,0.598901,0.408398,1.0,0.460201,0.447407,1.0,0.460201,0.447407,1.0,0.421833,0.627233,1.0,0.437130,0.796287,1.0,0.437130,0.796287,1.0,0.509167,0.444581,1.0,0.509167,0.444581,1.0,0.556682,0.621813,1.0,0.553620,0.771643,1.0,0.553620,0.771643,1.0
0.486999,0.448768,1.0,0.493248,0.296432,1.0,0.491165,0.347210,1.0,0.495330,0.245653,1.0,0.489287,0.151688,1.0,0.493895,0.142087,1.0,0.493895,0.142087,1.0,0.476995,0.139448,1.0,0.476995,0.139448,1.0,0.476962,0.244305,1.0,0.458594,0.242956,1.0,0.435675,0.357382,1.0,0.384985,0.354693,1.0,0.378032,0.344448,1.0,0.367505,0.334645,1.0,0.360738,0.334645,1.0,0.360989,0.349795,1.0,0.355976,0.350686,1.0,0.355474,0.349795,1.0,0.360989,0.357369,1.0,0.353219,0.363162,1.0,0.347454,0.362717,1.0,0.361740,0.367619,1.0,0.352717,0.371183,1.0,0.345448,0.366282,1.0,0.363745,0.369846,1.0,0.364497,0.372074,1.0,0.343443,0.368509,1.0,0.513728,0.245676,1.0,0.532125,0.245699,1.0,0.539880,0.360225,1.0,0.585854,0.371121,1.0,0.592214,0.364138,1.0,0.603167,0.359482,1.0,0.611734,0.362868,1.0,0.609828,0.375986,1.0,0.618635,0.378102,1.0,0.625302,0.381488,1.0,0.609594,0.385719,1.0,0.619828,0.389951,1.0,0.625302,0.393759,1.0,0.607688,0.392913,1.0,0.616255,0.399684,1.0,0.619828,0.403069,1.0,0.605307,0.400107,1.0,0.608162,0.404339,1.0,0.610781,0.407301,1.0,0.464735,0.452837,1.0,0.464735,0.452837,1.0,0.421774,0.630016,1.0,0.435698,0.796182,1.0,0.435698,0.796182,1.0,0.509264,0.444699,1.0,0.509264,0.444699,1.0,0.561312,0.621959,1.0,0.550563,0.774514,1.0,0.550563,0.774514,1.0
0.493881,0.462376,1.0,0.496227,0.301899,1.0,0.495445,0.355391,1.0,0.497008,0.248406,1.0,0.497718,0.158477,1.0,0.499991,0.145001,1.0,0.499991,0.145001,1.0,0.484635,0.144874,1.0,0.484635,0.144874,1.0,0.480105,0.248413,1.0,0.463202,0.248420,1.0,0.438661,0.360170,1.0,0.385025,0.346542,1.0,0.378713,0.336763,1.0,0.373019,0.322681,1.0,0.363117,0.316959,1.0,0.365592,0.346885,1.0,0.361136,0.350845,1.0,0.348759,0.364929,1.0,0.350492,0.340283,1.0,0.354205,0.353046,1.0,0.349254,0.365369,1.0,0.349997,0.342044,1.0,0.354453,0.353046,1.0,0.350492,0.364488,1.0,0.348511,0.346444,1.0,0.348511,0.349085,1.0,0.347769,0.362288,1.0,0.515377,0.248448,1.0,0.533745,0.248489,1.0,0.544484,0.368405,1.0,0.593453,0.379249,1.0,0.598589,0.369019,1.0,0.608359,0.362782,1.0,0.616630,0.362782,1.0,0.616630,0.377037,1.0,0.624901,0.377037,1.0,0.630911,0.377037,1.0,0.616380,0.385946,1.0,0.626151,0.387728,1.0,0.631661,0.389955,1.0,0.614625,0.394409,1.0,0.622896,0.397973,1.0,0.628156,0.401091,1.0,0.611870,0.401537,1.0,0.618635,0.405545,1.0,0.621891,0.408664,1.0,0.469349,0.463727,1.0,0.469349,0.463727,1.0,0.421809,0.635471,1.0,0.435672,0.796336,1.0,0.435672,0.796336,1.0,0.518414,0.461026,1.0,0.518414,0.461026,1.0,0.567406,0.638133,1.0,0.549036,0.779941,1.0,0.549036,0.779941,1.0
0.496902,0.463738,1.0,0.504935,0.304380,1.0,0.502257,0.357500,1.0,0.507613,0.251261,1.0,0.503868,0.162665,1.0,0.509142,0.158513,1.0,0.509142,0.158513,1.0,0.493890,0.158432,1.0,0.493890,0.158432,1.0,0.489986,0.251206,1.0,0.472359,0.251152,1.0,0.438709,0.360191,1.0,0.385072,0.341123,1.0,0.382514,0.333006,1.0,0.377637,0.316581,1.0,0.370451,0.308369,1.0,0.368655,0.314300,1.0,0.361982,0.304262,1.0,0.356079,0.300156,1.0,0.366602,0.321600,1.0,0.358132,0.311562,1.0,0.353513,0.306087,1.0,0.365318,0.329356,1.0,0.358132,0.321600,1.0,0.352999,0.315212,1.0,0.364805,0.338937,1.0,0.359672,0.332550,1.0,0.355822,0.328900,1.0,0.524509,0.252578,1.0,0.541406,0.253894,1.0,0.547521,0.379148,1.0,0.595089,0.384706,1.0,0.601708,0.378699,1.0,0.611568,0.370858,1.0,0.618828,0.368092,1.0,0.620385,0.384234,1.0,0.628427,0.381467,1.0,0.634396,0.381467,1.0,0.620385,0.392536,1.0,0.630505,0.392075,1.0,0.636474,0.392075,1.0,0.618828,0.400377,1.0,0.628172,0.402221,1.0,0.633880,0.402683,1.0,0.616495,0.406834,1.0,0.623760,0.410524,1.0,0.628427,0.412830,1.0,0.472392,0.463787,1.0,0.472392,0.463787,1.0,0.423393,0.640886,1.0,0.435683,0.796344,1.0,0.435683,0.796344,1.0,0.521411,0.463689,1.0,0.521411,0.463689,1.0,0.559833,0.643560,1.0,0.547510,0.785344,1.0,0.547510,0.785344,1.0
0.498514,0.466542,1.0,0.507724,0.307067,1.0,0.504654,0.360226,1.0,0.510794,0.253909,1.0,0.513795,0.164020,1.0,0.516854,0.161189,1.0,0.516854,0.161189,1.0,0.498508,0.161114,1.0,0.498508,0.161114,1.0,0.495415,0.252552,1.0,0.480037,0.251195,1.0,0.443263,0.354794,1.0,0.388096,0.338545,1.0,0.385059,0.334082,1.0,0.380508,0.317905,1.0,0.372925,0.312961,1.0,0.369892,0.312062,1.0,0.363067,0.302625,1.0,0.358516,0.297681,1.0,0.366858,0.317905,1.0,0.359022,0.308018,1.0,0.354472,0.302176,1.0,0.365847,0.325094,1.0,0.358516,0.316556,1.0,0.353461,0.309816,1.0,0.366100,0.334082,1.0,0.359274,0.325994,1.0,0.355483,0.321050,1.0,0.528407,0.255278,1.0,0.546021,0.256647,1.0,0.553656,0.379175,1.0,0.596552,0.400932,1.0,0.602062,0.395448,1.0,0.608422,0.390926,1.0,0.614016,0.387760,1.0,0.619104,0.404041,1.0,0.631312,0.399519,1.0,0.636146,0.402232,1.0,0.621396,0.413538,1.0,0.627245,0.412181,1.0,0.636146,0.408111,1.0,0.617578,0.422583,1.0,0.622411,0.421679,1.0,0.625974,0.420322,1.0,0.616052,0.426653,1.0,0.619615,0.432081,1.0,0.622667,0.432532,1.0,0.473991,0.466531,1.0,0.473991,0.466531,1.0,0.435598,0.649035,1.0,0.435692,0.799042,1.0,0.435692,0.799042,1.0,0.523036,0.466553,1.0,0.523036,0.466553,1.0,0.553677,0.659923,1.0,0.544516,0.796212,1.0,0.544516,0.796212,1.0
0.504585,0.467844,1.0,0.516024,0.307416,1.0,0.512211,0.360892,1.0,0.519837,0.253940,1.0,0.520660,0.166683,1.0,0.521521,0.163857,1.0,0.521521,0.163857,1.0,0.507678,0.161279,1.0,0.507678,0.161279,1.0,0.501518,0.252523,1.0,0.483199,0.251107,1.0,0.446260,0.338481,1.0,0.395763,0.341077,1.0,0.387895,0.337924,1.0,0.382031,0.327499,1.0,0.375716,0.326696,1.0,0.372784,0.321083,1.0,0.363085,0.317474,1.0,0.356319,0.315069,1.0,0.369401,0.327098,1.0,0.359928,0.325494,1.0,0.354515,0.320281,1.0,0.367822,0.333513,1.0,0.359928,0.332310,1.0,0.357221,0.328702,1.0,0.367596,0.339929,1.0,0.362183,0.339528,1.0,0.360153,0.337122,1.0,0.535981,0.259365,1.0,0.552125,0.264790,1.0,0.558229,0.376538,1.0,0.596635,0.406540,1.0,0.595641,0.407792,1.0,0.597724,0.410674,1.0,0.605141,0.416441,1.0,0.616490,0.419324,1.0,0.615797,0.421383,1.0,0.625755,0.427561,1.0,0.617880,0.424678,1.0,0.623208,0.432504,1.0,0.625990,0.443212,1.0,0.617417,0.431269,1.0,0.621354,0.439918,1.0,0.624599,0.440330,1.0,0.630161,0.431680,1.0,0.614635,0.444036,1.0,0.614635,0.451038,1.0,0.480040,0.466467,1.0,0.480040,0.466467,1.0,0.450920,0.662643,1.0,0.435682,0.799027,1.0,0.435682,0.799027,1.0,0.529130,0.469221,1.0,0.529130,0.469221,1.0,0.542937,0.662663,1.0,0.544495,0.796152,1.0,0.544495,0.796152,1.0
0.504585,0.467844,1.0,0.516024,0.307416,1.0,0.512211,0.360892,1.0,0.519837,0.253940,1.0,0.520660,0.166683,1.0,0.521521,0.163857,1.0,0.521521,0.163857,1.0,0.507678,0.161279,1.0,0.507678,0.161279,1.0,0.501518,0.252523,1.0,0.483199,0.251107,1.0,0.446260,0.338481,1.0,0.395763,0.341077,1.0,0.387895,0.337924,1.0,0.382031,0.327499,1.0,0.375716,0.326696,1.0,0.372784,0.321083,1.0,0.363085,0.317474,1.0,0.356319,0.315069,1.0,0.369401,0.327098,1.0,0.359928,0.325494,1.0,0.354515,0.320281,1.0,0.367822,0.333513,1.0,0.359928,0.332310,1.0,0.357221,0.328702,1.0,0.367596,0.339929,1.0,0.362183,0.339528,1.0,0.360153,0.337122,1.0,0.535981,0.259365,1.0,0.552125,0.264790,1.0,0.558229,0.376538,1.0,0.596635,0.406540,1.0,0.595641,0.407792,1.0,0.597724,0.410674,1.0,0.605141,0.416441,1.0,0.616490,0.419324,1.0,0.615797,0.421383,1.0,0.625755,0.427561,1.0,0.617880,0.424678,1.0,0.623208,0.432504,1.0,0.625990,0.443212,1.0,0.617417,0.431269,1.0,0.621354,0.439918,1.0,0.624599,0.440330,1.0,0.630161,0.431680,1.0,0.614635,0.444036,1.0,0.614635,0.451038,1.0,0.480040,0.466467,1.0,0.480040,0.466467,1.0,0.450920,0.662643,1.0,0.435682,0.799027,1.0,0.435682,0.799027,1.0,0.529130,0.469221,1.0,0.529130,0.469221,1.0,0.542937,0.662663,1.0,0.544495,0.796152,1.0,0.544495,0.796152,1.0
0.506830,0.462410,1.0,0.518946,0.310100,1.0,0.514907,0.360870,1.0,0.522984,0.259330,1.0,0.526802,0.181621,1.0,0.532109,0.166732,1.0,0.532109,0.166732,1.0,0.512298,0.166754,1.0,0.512298,0.166754,1.0,0.505368,0.255256,1.0,0.487753,0.251182,1.0,0.444831,0.335507,1.0,0.397290,0.341068,1.0,0.393335,0.344988,1.0,0.391457,0.348326,1.0,0.384417,0.349160,1.0,0.375969,0.339981,1.0,0.366347,0.338313,1.0,0.359777,0.337479,1.0,0.372918,0.342068,1.0,0.364000,0.337479,1.0,0.358368,0.337895,1.0,0.372449,0.344571,1.0,0.364000,0.337895,1.0,0.360011,0.342068,1.0,0.371041,0.344988,1.0,0.365408,0.343737,1.0,0.361654,0.343737,1.0,0.540617,0.264758,1.0,0.558250,0.270187,1.0,0.561333,0.368404,1.0,0.595031,0.422944,1.0,0.595802,0.430116,1.0,0.596818,0.448159,1.0,0.590526,0.421094,1.0,0.594583,0.439859,1.0,0.602094,0.435168,1.0,0.601281,0.453933,1.0,0.601891,0.438055,1.0,0.601281,0.439138,1.0,0.601281,0.437333,1.0,0.600672,0.439498,1.0,0.601687,0.442385,1.0,0.597021,0.433724,1.0,0.601484,0.439138,1.0,0.600469,0.447438,1.0,0.602094,0.456459,1.0,0.483056,0.458334,1.0,0.483056,0.458334,1.0,0.469320,0.665311,1.0,0.438664,0.799009,1.0,0.438664,0.799009,1.0,0.530604,0.466486,1.0,0.530604,0.466486,1.0,0.533698,0.665321,1.0,0.544474,0.798943,1.0,0.544474,0.798943,1.0
0.506923,0.471924,1.0,0.524692,0.316534,1.0,0.518769,0.368331,1.0,0.530615,0.264738,1.0,0.532995,0.184377,1.0,0.535224,0.180259,1.0,0.535224,0.180259,1.0,0.519943,0.180261,1.0,0.519943,0.180261,1.0,0.513023,0.258005,1.0,0.495432,0.251271,1.0,0.446273,0.322025,1.0,0.397257,0.343839,1.0,0.391059,0.358875,1.0,0.386650,0.365063,1.0,0.378761,0.369188,1.0,0.372496,0.358463,1.0,0.363679,0.356400,1.0,0.357879,0.355163,1.0,0.369712,0.353513,1.0,0.361359,0.348975,1.0,0.355094,0.346500,1.0,0.369016,0.351038,1.0,0.361359,0.344438,1.0,0.355790,0.339488,1.0,0.369016,0.348150,1.0,0.361823,0.341550,1.0,0.356950,0.338663,1.0,0.545219,0.267498,1.0,0.559823,0.270258,1.0,0.565901,0.360283,1.0,0.585859,0.425724,1.0,0.583656,0.447985,1.0,0.583094,0.460625,1.0,0.585151,0.474263,1.0,0.593568,0.464617,1.0,0.592260,0.485572,1.0,0.591698,0.488232,1.0,0.595068,0.466280,1.0,0.593198,0.485572,1.0,0.593385,0.486569,1.0,0.596188,0.461291,1.0,0.593568,0.484906,1.0,0.593385,0.485572,1.0,0.597313,0.461623,1.0,0.603115,0.468275,1.0,0.599182,0.490229,1.0,0.483169,0.469212,1.0,0.483169,0.469212,1.0,0.472342,0.665519,1.0,0.438708,0.812586,1.0,0.438708,0.812586,1.0,0.530677,0.474635,1.0,0.530677,0.474635,1.0,0.533677,0.665562,1.0,0.544396,0.801703,1.0,0.544396,0.801703,1.0
0.507675,0.470575,1.0,0.527157,0.314223,1.0,0.520663,0.366341,1.0,0.533651,0.262106,1.0,0.531456,0.181672,1.0,0.539880,0.183006,1.0,0.539880,0.183006,1.0,0.523031,0.180339,1.0,0.523031,0.180339,1.0,0.516834,0.256710,1.0,0.500017,0.251314,1.0,0.447900,0.313919,1.0,0.394243,0.352012,1.0,0.387604,0.365838,1.0,0.380775,0.372537,1.0,0.371590,0.376306,1.0,0.368999,0.363326,1.0,0.360051,0.359977,1.0,0.354398,0.359140,1.0,0.366409,0.358302,1.0,0.358637,0.352441,1.0,0.352043,0.349510,1.0,0.366644,0.354534,1.0,0.359344,0.348254,1.0,0.353456,0.342811,1.0,0.367586,0.352441,1.0,0.362170,0.348672,1.0,0.356518,0.342811,1.0,0.549789,0.266169,1.0,0.565927,0.270231,1.0,0.565927,0.357532,1.0,0.578177,0.431005,1.0,0.571589,0.452368,1.0,0.568526,0.465179,1.0,0.567089,0.477028,1.0,0.578615,0.471904,1.0,0.575193,0.487917,1.0,0.572849,0.489519,1.0,0.585099,0.477989,1.0,0.580057,0.489519,1.0,0.578255,0.494002,1.0,0.588344,0.479269,1.0,0.584562,0.491760,1.0,0.585823,0.494322,1.0,0.590505,0.482472,1.0,0.591224,0.486316,1.0,0.590688,0.487596,1.0,0.484689,0.466520,1.0,0.484689,0.466520,1.0,0.469336,0.665353,1.0,0.437143,0.809833,1.0,0.437143,0.809833,1.0,0.530661,0.474629,1.0,0.530661,0.474629,1.0,0.544401,0.665312,1.0,0.544385,0.798964,1.0,0.544385,0.798964,1.0
0.507616,0.473288,1.0,0.528353,0.314917,1.0,0.521441,0.367707,1.0,0.535266,0.262127,1.0,0.536755,0.181666,1.0,0.544401,0.182984,1.0,0.544401,0.182984,1.0,0.529109,0.180347,1.0,0.529109,0.180347,1.0,0.521435,0.256681,1.0,0.507604,0.251234,1.0,0.449433,0.313826,1.0,0.389609,0.354668,1.0,0.383711,0.365825,1.0,0.378226,0.373256,1.0,0.366210,0.377434,1.0,0.364643,0.363039,1.0,0.354978,0.360717,1.0,0.347925,0.358395,1.0,0.363859,0.358395,1.0,0.354717,0.351894,1.0,0.347664,0.347715,1.0,0.364643,0.355144,1.0,0.356806,0.347715,1.0,0.350015,0.342142,1.0,0.364643,0.351430,1.0,0.359157,0.347250,1.0,0.355239,0.343535,1.0,0.552096,0.266199,1.0,0.568927,0.270270,1.0,0.558339,0.352052,1.0,0.568932,0.425681,1.0,0.564760,0.453386,1.0,0.565458,0.429532,1.0,0.554828,0.447191,1.0,0.564932,0.426744,1.0,0.560750,0.467326,1.0,0.555000,0.450288,1.0,0.570339,0.466706,1.0,0.560750,0.480646,1.0,0.569464,0.476000,1.0,0.570339,0.468565,1.0,0.560750,0.480956,1.0,0.570161,0.478169,1.0,0.572255,0.471043,1.0,0.570510,0.478478,1.0,0.570510,0.478788,1.0,0.484628,0.466512,1.0,0.484628,0.466512,1.0,0.458559,0.665385,1.0,0.434067,0.815202,1.0,0.434067,0.815202,1.0,0.530604,0.480063,1.0,0.530604,0.480063,1.0,0.556667,0.659882,1.0,0.544401,0.798931,1.0,0.544401,0.798931,1.0
0.506136,0.466462,1.0,0.531421,0.311139,1.0,0.522993,0.362913,1.0,0.539849,0.259365,1.0,0.539070,0.180287,1.0,0.545979,0.180356,1.0,0.545979,0.180356,1.0,0.532161,0.180219,1.0,0.532161,0.180219,1.0,0.524532,0.255238,1.0,0.509215,0.251111,1.0,0.449410,0.311150,1.0,0.386627,0.352023,1.0,0.378172,0.365995,1.0,0.371086,0.371325,1.0,0.362093,0.378593,1.0,0.359912,0.359213,1.0,0.351464,0.359213,1.0,0.345196,0.355821,1.0,0.359912,0.354368,1.0,0.350919,0.350492,1.0,0.343833,0.346131,1.0,0.359912,0.351461,1.0,0.352554,0.344678,1.0,0.345469,0.340318,1.0,0.360730,0.348554,1.0,0.354462,0.343708,1.0,0.351192,0.341286,1.0,0.554406,0.264785,1.0,0.568964,0.270206,1.0,0.558214,0.354725,1.0,0.556776,0.420194,1.0,0.557193,0.426540,1.0,0.557016,0.419229,1.0,0.543068,0.419229,1.0,0.558443,0.419865,1.0,0.558625,0.419865,1.0,0.543958,0.428766,1.0,0.549146,0.437031,1.0,0.547359,0.435123,1.0,0.550578,0.435759,1.0,0.547536,0.441163,1.0,0.547536,0.440845,1.0,0.549146,0.445295,1.0,0.545031,0.446885,1.0,0.545568,0.445295,1.0,0.544854,0.444342,1.0,0.484679,0.461000,1.0,0.484679,0.461000,1.0,0.446390,0.659881,1.0,0.429479,0.812606,1.0,0.429479,0.812606,1.0,0.527594,0.471924,1.0,0.527594,0.471924,1.0,0.565875,0.646425,1.0,0.542859,0.798947,1.0,0.542859,0.798947,1.0
0.506136,0.466462,1.0,0.531421,0.311139,1.0,0.522993,0.362913,1.0,0.539849,0.259365,1.0,0.539070,0.180287,1.0,0.545979,0.180356,1.0,0.545979,0.180356,1.0,0.532161,0.180219,1.0,0.532161,0.180219,1.0,0.524532,0.255238,1.0,0.509215,0.251111,1.0,0.449410,0.311150,1.0,0.386627,0.352023,1.0,0.378172,0.365995,1.0,0.371086,0.371325,1.0,0.362093,0.378593,1.0,0.359912,0.359213,1.0,0.351464,0.359213,1.0,0.345196,0.355821,1.0,0.359912,0.354368,1.0,0.350919,0.350492,1.0,0.343833,0.346131,1.0,0.359912,0.351461,1.0,0.352554,0.344678,1.0,0.345469,0.340318,1.0,0.360730,0.348554,1.0,0.354462,0.343708,1.0,0.351192,0.341286,1.0,0.554406,0.264785,1.0,0.568964,0.270206,1.0,0.558214,0.354725,1.0,0.556776,0.420194,1.0,0.557193,0.426540,1.0,0.557016,0.419229,1.0,0.543068,0.419229,1.0,0.558443,0.419865,1.0,0.558625,0.419865,1.0,0.543958,0.428766,1.0,0.549146,0.437031,1.0,0.547359,0.435123,1.0,0.550578,0.435759,1.0,0.547536,0.441163,1.0,0.547536,0.440845,1.0,0.549146,0.445295,1.0,0.545031,0.446885,1.0,0.545568,0.445295,1.0,0.544854,0.444342,1.0,0.484679,0.461000,1.0,0.484679,0.461000,1.0,0.446390,0.659881,1.0,0.429479,0.812606,1.0,0.429479,0.812606,1.0,0.527594,0.471924,1.0,0.527594,0.471924,1.0,0.565875,0.646425,1.0,0.542859,0.798947,1.0,0.542859,0.798947,1.0
0.504602,0.467828,1.0,0.533315,0.309460,1.0,0.523744,0.362249,1.0,0.542885,0.256670,1.0,0.539141,0.180334,1.0,0.546073,0.180306,1.0,0.546073,0.180306,1.0,0.532208,0.180363,1.0,0.532208,0.180363,1.0,0.527563,0.253890,1.0,0.512241,0.251109,1.0,0.449431,0.311118,1.0,0.386539,0.352055,1.0,0.378888,0.367506,1.0,0.370971,0.375756,1.0,0.361962,0.382066,1.0,0.358959,0.363623,1.0,0.351042,0.363138,1.0,0.345036,0.360711,1.0,0.357048,0.356344,1.0,0.348858,0.355372,1.0,0.342306,0.351975,1.0,0.356775,0.351975,1.0,0.349131,0.348093,1.0,0.342580,0.345666,1.0,0.357048,0.348093,1.0,0.351042,0.343725,1.0,0.345309,0.341298,1.0,0.555961,0.263388,1.0,0.569036,0.270106,1.0,0.558245,0.338364,1.0,0.550604,0.400981,1.0,0.547641,0.413810,1.0,0.545292,0.410415,1.0,0.548964,0.412765,1.0,0.549698,0.413810,1.0,0.546615,0.426869,1.0,0.546464,0.426085,1.0,0.546464,0.431569,1.0,0.547495,0.434965,1.0,0.546318,0.428957,1.0,0.545880,0.432875,1.0,0.549109,0.441233,1.0,0.545438,0.437577,1.0,0.544995,0.437316,1.0,0.548818,0.441756,1.0,0.546615,0.447501,1.0,0.484641,0.461004,1.0,0.484641,0.461004,1.0,0.437118,0.654504,1.0,0.423399,0.817996,1.0,0.423399,0.817996,1.0,0.524562,0.474653,1.0,0.524562,0.474653,1.0,0.569047,0.640941,1.0,0.535297,0.798996,1.0,0.535297,0.798996,1.0
0.503836,0.471900,1.0,0.534240,0.312500,1.0,0.524105,0.365633,1.0,0.544375,0.259367,1.0,0.547534,0.184433,1.0,0.547578,0.182958,1.0,0.547578,0.182958,1.0,0.533677,0.183018,1.0,0.533677,0.183018,1.0,0.530601,0.255310,1.0,0.516827,0.251254,1.0,0.449422,0.311183,1.0,0.385070,0.357326,1.0,0.376562,0.371044,1.0,0.366945,0.378586,1.0,0.359026,0.383112,1.0,0.356481,0.367524,1.0,0.347430,0.366519,1.0,0.342339,0.365010,1.0,0.355632,0.359480,1.0,0.347147,0.356966,1.0,0.341208,0.354451,1.0,0.357046,0.354451,1.0,0.349410,0.350931,1.0,0.343753,0.348418,1.0,0.359874,0.352440,1.0,0.352238,0.346909,1.0,0.348561,0.345904,1.0,0.557424,0.263445,1.0,0.570474,0.267524,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.484666,0.463741,1.0,0.484666,0.463741,1.0,0.434071,0.646450,1.0,0.417201,0.812594,1.0,0.417201,0.812594,1.0,0.523005,0.480059,1.0,0.523005,0.480059,1.0,0.570521,0.640893,1.0,0.533802,0.804447,1.0,0.533802,0.804447,1.0
0.503062,0.474581,1.0,0.534047,0.317224,1.0,0.523718,0.369676,1.0,0.544375,0.264771,1.0,0.548294,0.185770,1.0,0.549057,0.182968,1.0,0.549057,0.182968,1.0,0.533719,0.183105,1.0,0.533719,0.183105,1.0,0.529851,0.259348,1.0,0.515326,0.253924,1.0,0.450963,0.313866,1.0,0.386586,0.360147,1.0,0.379778,0.380956,1.0,0.369022,0.389006,1.0,0.361380,0.393535,1.0,0.359681,0.375923,1.0,0.350341,0.373407,1.0,0.345529,0.372401,1.0,0.357983,0.368879,1.0,0.349492,0.364853,1.0,0.343547,0.361834,1.0,0.359398,0.363846,1.0,0.351473,0.360828,1.0,0.345812,0.356802,1.0,0.361663,0.360828,1.0,0.355153,0.357306,1.0,0.352039,0.355293,1.0,0.557445,0.267458,1.0,0.570516,0.270144,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.483139,0.466389,1.0,0.483139,0.466389,1.0,0.434059,0.651752,1.0,0.409554,0.804458,1.0,0.409554,0.804458,1.0,0.522984,0.482774,1.0,0.522984,0.482774,1.0,0.569047,0.640920,1.0,0.533719,0.807152,1.0,0.533719,0.807152,1.0
0.503069,0.470546,1.0,0.531795,0.312153,1.0,0.522220,0.364950,1.0,0.541370,0.259355,1.0,0.546708,0.183058,1.0,0.547536,0.172167,1.0,0.547536,0.172167,1.0,0.532245,0.177626,1.0,0.532245,0.177626,1.0,0.525318,0.255294,1.0,0.509266,0.251233,1.0,0.453995,0.316505,1.0,0.397332,0.373809,1.0,0.389794,0.394609,1.0,0.380228,0.407363,1.0,0.369068,0.412087,1.0,0.370131,0.394136,1.0,0.362956,0.390357,1.0,0.358173,0.384217,1.0,0.368536,0.386106,1.0,0.362691,0.387995,1.0,0.364816,0.396026,1.0,0.371725,0.388940,1.0,0.364551,0.387995,1.0,0.364816,0.389885,1.0,0.371991,0.380909,1.0,0.369068,0.385633,1.0,0.365082,0.390830,1.0,0.555195,0.263441,1.0,0.569021,0.267528,1.0,0.558219,0.341069,1.0,0.547536,0.409239,1.0,0.548719,0.421352,1.0,0.540604,0.430294,1.0,0.541094,0.429717,1.0,0.541578,0.430005,1.0,0.540927,0.446157,1.0,0.543526,0.453369,1.0,0.543203,0.444139,1.0,0.542552,0.447312,1.0,0.542068,0.455677,1.0,0.546448,0.432601,1.0,0.542068,0.450773,1.0,0.541255,0.460581,1.0,0.547906,0.434044,1.0,0.545635,0.452792,1.0,0.545958,0.449331,1.0,0.483102,0.463709,1.0,0.483102,0.463709,1.0,0.435698,0.646378,1.0,0.407963,0.807095,1.0,0.407963,0.807095,1.0,0.523036,0.477383,1.0,0.523036,0.477383,1.0,0.568896,0.640908,1.0,0.533661,0.801738,1.0,0.533661,0.801738,1.0
0.503791,0.456909,1.0,0.526303,0.302720,1.0,0.518799,0.354116,1.0,0.533807,0.251324,1.0,0.541383,0.168066,1.0,0.545937,0.161130,1.0,0.545937,0.161130,1.0,0.530667,0.161188,1.0,0.530667,0.161188,1.0,0.519941,0.248551,1.0,0.506074,0.245778,1.0,0.458608,0.316475,1.0,0.411030,0.384719,1.0,0.403801,0.418313,1.0,0.401558,0.427173,1.0,0.388352,0.426287,1.0,0.390594,0.424072,1.0,0.378384,0.416541,1.0,0.378384,0.417427,1.0,0.386109,0.417427,1.0,0.382371,0.422300,1.0,0.375145,0.421857,1.0,0.390843,0.418313,1.0,0.383617,0.425401,1.0,0.382122,0.424515,1.0,0.392090,0.425844,1.0,0.389847,0.428944,1.0,0.382371,0.435590,1.0,0.551375,0.259397,1.0,0.568943,0.267469,1.0,0.556693,0.360178,1.0,0.556698,0.409294,1.0,0.552766,0.396505,1.0,0.545495,0.409431,1.0,0.541370,0.422706,1.0,0.550604,0.425152,1.0,0.545104,0.435982,1.0,0.543333,0.444716,1.0,0.554536,0.428645,1.0,0.550016,0.444716,1.0,0.548052,0.455196,1.0,0.558661,0.429344,1.0,0.556307,0.444367,1.0,0.555714,0.452402,1.0,0.562396,0.428995,1.0,0.563578,0.435632,1.0,0.564167,0.439476,1.0,0.483072,0.447371,1.0,0.483072,0.447371,1.0,0.444835,0.640779,1.0,0.409599,0.801650,1.0,0.409599,0.801650,1.0,0.524510,0.466446,1.0,0.524510,0.466446,1.0,0.558276,0.640760,1.0,0.532219,0.804445,1.0,0.532219,0.804445,1.0
0.503791,0.456909,1.0,0.526303,0.302720,1.0,0.518799,0.354116,1.0,0.533807,0.251324,1.0,0.541383,0.168066,1.0,0.545937,0.161130,1.0,0.545937,0.161130,1.0,0.530667,0.161188,1.0,0.530667,0.161188,1.0,0.519941,0.248551,1.0,0.506074,0.245778,1.0,0.458608,0.316475,1.0,0.411030,0.384719,1.0,0.403801,0.418313,1.0,0.401558,0.427173,1.0,0.388352,0.426287,1.0,0.390594,0.424072,1.0,0.378384,0.416541,1.0,0.378384,0.417427,1.0,0.386109,0.417427,1.0,0.382371,0.422300,1.0,0.375145,0.421857,1.0,0.390843,0.418313,1.0,0.383617,0.425401,1.0,0.382122,0.424515,1.0,0.392090,0.425844,1.0,0.389847,0.428944,1.0,0.382371,0.435590,1.0,0.551375,0.259397,1.0,0.568943,0.267469,1.0,0.556693,0.360178,1.0,0.556698,0.409294,1.0,0.552766,0.396505,1.0,0.545495,0.409431,1.0,0.541370,0.422706,1.0,0.550604,0.425152,1.0,0.545104,0.435982,1.0,0.543333,0.444716,1.0,0.554536,0.428645,1.0,0.550016,0.444716,1.0,0.548052,0.455196,1.0,0.558661,0.429344,1.0,0.556307,0.444367,1.0,0.555714,0.452402,1.0,0.562396,0.428995,1.0,0.563578,0.435632,1.0,0.564167,0.439476,1.0,0.483072,0.447371,1.0,0.483072,0.447371,1.0,0.444835,0.640779,1.0,0.409599,0.801650,1.0,0.409599,0.801650,1.0,0.524510,0.466446,1.0,0.524510,0.466446,1.0,0.558276,0.640760,1.0,0.532219,0.804445,1.0,0.532219,0.804445,1.0
0.505338,0.450103,1.0,0.525432,0.298851,1.0,0.518734,0.349268,1.0,0.532130,0.248433,1.0,0.536748,0.153104,1.0,0.539828,0.142185,1.0,0.539828,0.142185,1.0,0.521521,0.142330,1.0,0.521521,0.142330,1.0,0.513769,0.240301,1.0,0.495407,0.232169,1.0,0.461680,0.319319,1.0,0.430983,0.398394,1.0,0.428783,0.422530,1.0,0.428342,0.439760,1.0,0.428563,0.440544,1.0,0.425478,0.440935,1.0,0.430104,0.440544,1.0,0.403890,0.428012,1.0,0.408957,0.428012,1.0,0.405653,0.431144,1.0,0.403890,0.435844,1.0,0.407855,0.423704,1.0,0.404551,0.435844,1.0,0.404551,0.437411,1.0,0.411380,0.436628,1.0,0.410499,0.440152,1.0,0.405432,0.442502,1.0,0.549773,0.253903,1.0,0.567417,0.259373,1.0,0.555151,0.338508,1.0,0.558328,0.390140,1.0,0.556328,0.403263,1.0,0.551417,0.424944,1.0,0.553276,0.439700,1.0,0.557344,0.427956,1.0,0.555818,0.446927,1.0,0.554635,0.454154,1.0,0.561750,0.428256,1.0,0.561068,0.449336,1.0,0.561240,0.455358,1.0,0.566490,0.426450,1.0,0.567167,0.437592,1.0,0.568521,0.448131,1.0,0.570385,0.423439,1.0,0.572417,0.434280,1.0,0.573438,0.438796,1.0,0.481562,0.441899,1.0,0.481562,0.441899,1.0,0.447918,0.624557,1.0,0.414198,0.793557,1.0,0.414198,0.793557,1.0,0.529115,0.458307,1.0,0.529115,0.458307,1.0,0.547531,0.640809,1.0,0.530677,0.807145,1.0,0.530677,0.807145,1.0
0.503074,0.437841,1.0,0.521440,0.285625,1.0,0.515318,0.336363,1.0,0.527562,0.234886,1.0,0.526850,0.140852,1.0,0.532229,0.128526,1.0,0.532229,0.128526,1.0,0.516825,0.133949,1.0,0.516825,0.133949,1.0,0.508413,0.232088,1.0,0.489264,0.229291,1.0,0.470870,0.330218,1.0,0.444844,0.403937,1.0,0.445669,0.421648,1.0,0.445888,0.439162,1.0,0.440415,0.454730,1.0,0.430345,0.441497,1.0,0.429907,0.452006,1.0,0.429907,0.459400,1.0,0.429907,0.432934,1.0,0.427936,0.451227,1.0,0.429688,0.457455,1.0,0.425309,0.441107,1.0,0.426404,0.454341,1.0,0.429907,0.456287,1.0,0.427060,0.438772,1.0,0.426404,0.454341,1.0,0.429907,0.454730,1.0,0.545964,0.241682,1.0,0.564365,0.248479,1.0,0.558286,0.338476,1.0,0.561302,0.382121,1.0,0.557063,0.394861,1.0,0.554255,0.411488,1.0,0.555568,0.425454,1.0,0.560990,0.421796,1.0,0.562484,0.435762,1.0,0.563047,0.444075,1.0,0.566229,0.421131,1.0,0.568099,0.435430,1.0,0.569594,0.445073,1.0,0.570344,0.417141,1.0,0.572401,0.429777,1.0,0.574083,0.439087,1.0,0.573708,0.413483,1.0,0.576703,0.424124,1.0,0.578760,0.429777,1.0,0.478528,0.428326,1.0,0.478528,0.428326,1.0,0.455519,0.610946,1.0,0.423425,0.777200,1.0,0.423425,0.777200,1.0,0.527620,0.447356,1.0,0.527620,0.447356,1.0,0.535292,0.627316,1.0,0.529089,0.804401,1.0,0.529089,0.804401,1.0
0.500023,0.429681,1.0,0.516100,0.279385,1.0,0.510741,0.329483,1.0,0.521458,0.229286,1.0,0.520681,0.132606,1.0,0.524557,0.117721,1.0,0.524557,0.117721,1.0,0.509148,0.120270,1.0,0.509148,0.120270,1.0,0.503047,0.226620,1.0,0.484635,0.223955,1.0,0.472485,0.330222,1.0,0.457047,0.417359,1.0,0.455085,0.428610,1.0,0.454414,0.444920,1.0,0.451058,0.457253,1.0,0.442107,0.453673,1.0,0.441883,0.468790,1.0,0.446806,0.481918,1.0,0.439869,0.454469,1.0,0.438303,0.471972,1.0,0.442778,0.482713,1.0,0.438303,0.456059,1.0,0.436289,0.469983,1.0,0.436960,0.480326,1.0,0.437855,0.458446,1.0,0.435618,0.468790,1.0,0.436736,0.475552,1.0,0.539893,0.230718,1.0,0.558328,0.232150,1.0,0.559771,0.316561,1.0,0.558286,0.360260,1.0,0.555703,0.375610,1.0,0.552568,0.390791,1.0,0.554484,0.405351,1.0,0.561453,0.397606,1.0,0.563198,0.410618,1.0,0.564068,0.420222,1.0,0.567031,0.400394,1.0,0.568599,0.412786,1.0,0.569818,0.425179,1.0,0.571214,0.400704,1.0,0.572609,0.410618,1.0,0.574177,0.422391,1.0,0.575224,0.400084,1.0,0.577661,0.407830,1.0,0.578880,0.411547,1.0,0.477020,0.422869,1.0,0.477020,0.422869,1.0,0.458604,0.602695,1.0,0.434083,0.766212,1.0,0.434083,0.766212,1.0,0.523026,0.436493,1.0,0.523026,0.436493,1.0,0.530672,0.632709,1.0,0.524521,0.807107,1.0,0.524521,0.807107,1.0
0.499216,0.433741,1.0,0.514685,0.278329,1.0,0.509529,0.330133,1.0,0.519842,0.226525,1.0,0.513814,0.120384,1.0,0.519958,0.112137,1.0,0.519958,0.112137,1.0,0.501566,0.114881,1.0,0.501566,0.114881,1.0,0.500722,0.222524,1.0,0.481603,0.218523,1.0,0.473997,0.332981,1.0,0.457105,0.414741,1.0,0.454384,0.429460,1.0,0.450817,0.442990,1.0,0.448201,0.453982,1.0,0.443206,0.452714,1.0,0.442969,0.468781,1.0,0.444395,0.478082,1.0,0.444633,0.454828,1.0,0.443682,0.470049,1.0,0.445347,0.481042,1.0,0.446298,0.453982,1.0,0.444633,0.467512,1.0,0.447011,0.478082,1.0,0.448677,0.453982,1.0,0.447249,0.464553,1.0,0.447249,0.473431,1.0,0.538272,0.227908,1.0,0.556703,0.229292,1.0,0.558255,0.322039,1.0,0.558286,0.341153,1.0,0.553703,0.339972,1.0,0.549870,0.351886,1.0,0.549104,0.365502,1.0,0.559255,0.360056,1.0,0.562125,0.373331,1.0,0.561932,0.381159,1.0,0.563656,0.359715,1.0,0.565380,0.373670,1.0,0.564234,0.382181,1.0,0.566531,0.358013,1.0,0.568635,0.371629,1.0,0.567104,0.381500,1.0,0.567484,0.358013,1.0,0.571318,0.370948,1.0,0.573042,0.379117,1.0,0.475469,0.425614,1.0,0.475469,0.425614,1.0,0.460210,0.597160,1.0,0.444827,0.755353,1.0,0.444827,0.755353,1.0,0.522964,0.441868,1.0,0.522964,0.441868,1.0,0.521495,0.629969,1.0,0.521422,0.796306,1.0,0.521422,0.796306,1.0
0.496937,0.432405,1.0,0.509599,0.276002,1.0,0.505378,0.328136,1.0,0.513820,0.223868,1.0,0.507653,0.119073,1.0,0.512305,0.103994,1.0,0.512305,0.103994,1.0,0.495447,0.109438,1.0,0.495447,0.109438,1.0,0.494661,0.221191,1.0,0.475503,0.218514,1.0,0.477033,0.332924,1.0,0.457046,0.412022,1.0,0.454228,0.430568,1.0,0.451394,0.444421,1.0,0.446435,0.454498,1.0,0.443365,0.445261,1.0,0.439823,0.459956,1.0,0.440059,0.470871,1.0,0.443129,0.446941,1.0,0.440059,0.462055,1.0,0.441948,0.472131,1.0,0.444782,0.446941,1.0,0.441948,0.459536,1.0,0.445491,0.469612,1.0,0.447144,0.447360,1.0,0.445018,0.459956,1.0,0.447380,0.465413,1.0,0.532983,0.225200,1.0,0.552146,0.226531,1.0,0.556698,0.316657,1.0,0.556766,0.324806,1.0,0.548948,0.313554,1.0,0.544839,0.326832,1.0,0.544276,0.341438,1.0,0.546146,0.325172,1.0,0.545958,0.340110,1.0,0.548010,0.340774,1.0,0.551750,0.324508,1.0,0.552120,0.343430,1.0,0.554922,0.350069,1.0,0.557911,0.324177,1.0,0.559776,0.345754,1.0,0.558281,0.352060,1.0,0.563698,0.324508,1.0,0.567807,0.338782,1.0,0.567995,0.344757,1.0,0.472452,0.425615,1.0,0.472452,0.425615,1.0,0.466264,0.591864,1.0,0.449423,0.744469,1.0,0.449423,0.744469,1.0,0.521422,0.439195,1.0,0.521422,0.439195,1.0,0.519909,0.624631,1.0,0.519983,0.796294,1.0,0.519983,0.796294,1.0
0.496937,0.432405,1.0,0.509599,0.276002,1.0,0.505378,0.328136,1.0,0.513820,0.223868,1.0,0.507653,0.119073,1.0,0.512305,0.103994,1.0,0.512305,0.103994,1.0,0.495447,0.109438,1.0,0.495447,0.109438,1.0,0.494661,0.221191,1.0,0.475503,0.218514,1.0,0.477033,0.332924,1.0,0.457046,0.412022,1.0,0.454228,0.430568,1.0,0.451394,0.444421,1.0,0.446435,0.454498,1.0,0.443365,0.445261,1.0,0.439823,0.459956,1.0,0.440059,0.470871,1.0,0.443129,0.446941,1.0,0.440059,0.462055,1.0,0.441948,0.472131,1.0,0.444782,0.446941,1.0,0.441948,0.459536,1.0,0.445491,0.469612,1.0,0.447144,0.447360,1.0,0.445018,0.459956,1.0,0.447380,0.465413,1.0,0.532983,0.225200,1.0,0.552146,0.226531,1.0,0.556698,0.316657,1.0,0.556766,0.324806,1.0,0.548948,0.313554,1.0,0.544839,0.326832,1.0,0.544276,0.341438,1.0,0.546146,0.325172,1.0,0.545958,0.340110,1.0,0.548010,0.340774,1.0,0.551750,0.324508,1.0,0.552120,0.343430,1.0,0.554922,0.350069,1.0,0.557911,0.324177,1.0,0.559776,0.345754,1.0,0.558281,0.352060,1.0,0.563698,0.324508,1.0,0.567807,0.338782,1.0,0.567995,0.344757,1.0,0.472452,0.425615,1.0,0.472452,0.425615,1.0,0.466264,0.591864,1.0,0.449423,0.744469,1.0,0.449423,0.744469,1.0,0.521422,0.439195,1.0,0.521422,0.439195,1.0,0.519909,0.624631,1.0,0.519983,0.796294,1.0,0.519983,0.796294,1.0
0.496219,0.425656,1.0,0.505930,0.270259,1.0,0.502693,0.322058,1.0,0.509167,0.218460,1.0,0.502303,0.120364,1.0,0.509167,0.101405,1.0,0.509167,0.101405,1.0,0.492304,0.106790,1.0,0.492304,0.106790,1.0,0.490800,0.221156,1.0,0.472433,0.223852,1.0,0.475481,0.330159,1.0,0.452485,0.411960,1.0,0.452805,0.427631,1.0,0.451486,0.443250,1.0,0.449290,0.455746,1.0,0.441822,0.443641,1.0,0.438088,0.456137,1.0,0.437209,0.468242,1.0,0.441603,0.444031,1.0,0.440065,0.458870,1.0,0.442261,0.465899,1.0,0.442481,0.443641,1.0,0.442481,0.456918,1.0,0.445776,0.461994,1.0,0.445117,0.442860,1.0,0.445556,0.455746,1.0,0.447533,0.460822,1.0,0.527573,0.215750,1.0,0.545979,0.213040,1.0,0.552120,0.346535,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.472456,0.422931,1.0,0.472456,0.422931,1.0,0.467797,0.591852,1.0,0.458532,0.747213,1.0,0.458532,0.747213,1.0,0.519982,0.428382,1.0,0.519982,0.428382,1.0,0.519917,0.624606,1.0,0.521437,0.796279,1.0,0.521437,0.796279,1.0
0.494666,0.424191,1.0,0.503287,0.267846,1.0,0.500414,0.319961,1.0,0.506161,0.215731,1.0,0.499189,0.120356,1.0,0.506108,0.104046,1.0,0.506108,0.104046,1.0,0.486179,0.109439,1.0,0.486179,0.109439,1.0,0.489263,0.219823,1.0,0.472365,0.223916,1.0,0.473956,0.330260,1.0,0.449445,0.406555,1.0,0.448820,0.425488,1.0,0.445528,0.442659,1.0,0.443552,0.454757,1.0,0.437185,0.446952,1.0,0.435868,0.462172,1.0,0.435429,0.470757,1.0,0.436527,0.447343,1.0,0.434990,0.462562,1.0,0.435649,0.471148,1.0,0.436746,0.445781,1.0,0.436307,0.459831,1.0,0.437405,0.467636,1.0,0.438722,0.445391,1.0,0.438064,0.457489,1.0,0.440040,0.461781,1.0,0.523755,0.212992,1.0,0.541349,0.210253,1.0,0.545953,0.341074,1.0,0.547505,0.291974,1.0,0.549917,0.249324,1.0,0.540177,0.257019,1.0,0.537203,0.272406,1.0,0.545047,0.254133,1.0,0.539906,0.261345,1.0,0.554510,0.273367,1.0,0.551266,0.266155,1.0,0.548562,0.273848,1.0,0.551266,0.282022,1.0,0.551536,0.288273,1.0,0.545859,0.282504,1.0,0.545589,0.282022,1.0,0.551536,0.289235,1.0,0.545047,0.287312,1.0,0.545047,0.292601,1.0,0.470933,0.422834,1.0,0.470933,0.422834,1.0,0.461738,0.597198,1.0,0.458619,0.749831,1.0,0.458619,0.749831,1.0,0.518398,0.425548,1.0,0.518398,0.425548,1.0,0.519968,0.629997,1.0,0.521542,0.796253,1.0,0.521542,0.796253,1.0
0.492328,0.424220,1.0,0.499234,0.269927,1.0,0.496932,0.321358,1.0,0.501536,0.218496,1.0,0.492358,0.123148,1.0,0.498494,0.109422,1.0,0.498494,0.109422,1.0,0.483119,0.112164,1.0,0.483119,0.112164,1.0,0.486191,0.222599,1.0,0.470845,0.226701,1.0,0.472483,0.335638,1.0,0.447870,0.403886,1.0,0.445594,0.422010,1.0,0.441996,0.440000,1.0,0.439972,0.452793,1.0,0.434801,0.446796,1.0,0.433002,0.460788,1.0,0.431652,0.469583,1.0,0.435026,0.445197,1.0,0.433227,0.459589,1.0,0.433227,0.468384,1.0,0.436824,0.443997,1.0,0.434801,0.456391,1.0,0.436149,0.462787,1.0,0.439523,0.444397,1.0,0.437274,0.454792,1.0,0.437949,0.459989,1.0,0.518414,0.213069,1.0,0.535292,0.207641,1.0,0.542870,0.330185,1.0,0.544375,0.270224,1.0,0.538000,0.228277,1.0,0.536984,0.233252,1.0,0.532401,0.247271,1.0,0.552245,0.254056,1.0,0.538000,0.233252,1.0,0.548432,0.249532,1.0,0.546141,0.265814,1.0,0.544870,0.262648,1.0,0.540292,0.269432,1.0,0.545885,0.264457,1.0,0.543344,0.273050,1.0,0.541307,0.272145,1.0,0.546901,0.266719,1.0,0.533677,0.273955,1.0,0.533927,0.269884,1.0,0.470852,0.422862,1.0,0.470852,0.422862,1.0,0.458647,0.602806,1.0,0.458535,0.752660,1.0,0.458535,0.752660,1.0,0.513805,0.425579,1.0,0.513805,0.425579,1.0,0.519977,0.638215,1.0,0.523021,0.801701,1.0,0.523021,0.801701,1.0
0.490047,0.431041,1.0,0.495254,0.275741,1.0,0.493519,0.327508,1.0,0.496990,0.223975,1.0,0.490076,0.132626,1.0,0.496903,0.117569,1.0,0.496903,0.117569,1.0,0.480087,0.117619,1.0,0.480087,0.117619,1.0,0.483897,0.226673,1.0,0.470804,0.229371,1.0,0.473967,0.338363,1.0,0.446351,0.403700,1.0,0.443093,0.420857,1.0,0.440165,0.435671,1.0,0.437687,0.448482,1.0,0.430931,0.442077,1.0,0.427779,0.457691,1.0,0.425752,0.468501,1.0,0.430706,0.443679,1.0,0.427554,0.459293,1.0,0.426653,0.468501,1.0,0.432057,0.445280,1.0,0.429355,0.457691,1.0,0.430481,0.464898,1.0,0.434309,0.443679,1.0,0.431157,0.458092,1.0,0.432733,0.461694,1.0,0.514560,0.217196,1.0,0.532130,0.210418,1.0,0.533776,0.319430,1.0,0.536771,0.264745,1.0,0.534604,0.213895,1.0,0.529880,0.218696,1.0,0.525828,0.233098,1.0,0.541354,0.230697,1.0,0.546531,0.243899,1.0,0.543833,0.247500,1.0,0.542484,0.245099,1.0,0.544057,0.246300,1.0,0.537307,0.248300,1.0,0.537083,0.249900,1.0,0.535057,0.247900,1.0,0.534156,0.247500,1.0,0.536182,0.247500,1.0,0.526953,0.248700,1.0,0.527630,0.249100,1.0,0.469351,0.428337,1.0,0.469351,0.428337,1.0,0.455561,0.616414,1.0,0.447887,0.769009,1.0,0.447887,0.769009,1.0,0.510743,0.433744,1.0,0.510743,0.433744,1.0,0.519869,0.643595,1.0,0.522990,0.801653,1.0,0.522990,0.801653,1.0
0.486967,0.437841,1.0,0.493307,0.281488,1.0,0.491193,0.333606,1.0,0.495420,0.229370,1.0,0.487755,0.140866,1.0,0.493897,0.123069,1.0,0.493897,0.123069,1.0,0.473970,0.125799,1.0,0.473970,0.125799,1.0,0.481607,0.236162,1.0,0.467793,0.242955,1.0,0.473909,0.338385,1.0,0.446302,0.401113,1.0,0.441354,0.420052,1.0,0.439570,0.434145,1.0,0.436994,0.447887,1.0,0.429859,0.441193,1.0,0.426886,0.457401,1.0,0.425102,0.468676,1.0,0.429660,0.442602,1.0,0.426886,0.459515,1.0,0.425300,0.469028,1.0,0.430652,0.442955,1.0,0.429462,0.457048,1.0,0.427084,0.466209,1.0,0.433228,0.444011,1.0,0.430057,0.458106,1.0,0.430453,0.460924,1.0,0.509194,0.225304,1.0,0.522969,0.221237,1.0,0.532182,0.316541,1.0,0.532229,0.245738,1.0,0.528250,0.204636,1.0,0.521469,0.212795,1.0,0.518873,0.229469,1.0,0.529849,0.226630,1.0,0.528052,0.242594,1.0,0.525057,0.246142,1.0,0.534635,0.229113,1.0,0.533641,0.242594,1.0,0.529849,0.242594,1.0,0.538031,0.224502,1.0,0.538427,0.238692,1.0,0.533839,0.239401,1.0,0.541021,0.221309,1.0,0.542620,0.231596,1.0,0.539625,0.232306,1.0,0.464762,0.433779,1.0,0.464762,0.433779,1.0,0.449467,0.632681,1.0,0.444823,0.771656,1.0,0.444823,0.771656,1.0,0.509171,0.441904,1.0,0.509171,0.441904,1.0,0.516867,0.646427,1.0,0.521469,0.799012,1.0,0.521469,0.799012,1.0
0.486967,0.437841,1.0,0.493307,0.281488,1.0,0.491193,0.333606,1.0,0.495420,0.229370,1.0,0.487755,0.140866,1.0,0.493897,0.123069,1.0,0.493897,0.123069,1.0,0.473970,0.125799,1.0,0.473970,0.125799,1.0,0.481607,0.236162,1.0,0.467793,0.242955,1.0,0.473909,0.338385,1.0,0.446302,0.401113,1.0,0.441354,0.420052,1.0,0.439570,0.434145,1.0,0.436994,0.447887,1.0,0.429859,0.441193,1.0,0.426886,0.457401,1.0,0.425102,0.468676,1.0,0.429660,0.442602,1.0,0.426886,0.459515,1.0,0.425300,0.469028,1.0,0.430652,0.442955,1.0,0.429462,0.457048,1.0,0.427084,0.466209,1.0,0.433228,0.444011,1.0,0.430057,0.458106,1.0,0.430453,0.460924,1.0,0.509194,0.225304,1.0,0.522969,0.221237,1.0,0.532182,0.316541,1.0,0.532229,0.245738,1.0,0.528250,0.204636,1.0,0.521469,0.212795,1.0,0.518873,0.229469,1.0,0.529849,0.226630,1.0,0.528052,0.242594,1.0,0.525057,0.246142,1.0,0.534635,0.229113,1.0,0.533641,0.242594,1.0,0.529849,0.242594,1.0,0.538031,0.224502,1.0,0.538427,0.238692,1.0,0.533839,0.239401,1.0,0.541021,0.221309,1.0,0.542620,0.231596,1.0,0.539625,0.232306,1.0,0.464762,0.433779,1.0,0.464762,0.433779,1.0,0.449467,0.632681,1.0,0.444823,0.771656,1.0,0.444823,0.771656,1.0,0.509171,0.441904,1.0,0.509171,0.441904,1.0,0.516867,0.646427,1.0,0.521469,0.799012,1.0,0.521469,0.799012,1.0
0.483930,0.446014,1.0,0.489084,0.289679,1.0,0.487366,0.341790,1.0,0.490802,0.237567,1.0,0.484657,0.147681,1.0,0.490819,0.134044,1.0,0.490819,0.134044,1.0,0.472402,0.136701,1.0,0.472402,0.136701,1.0,0.475517,0.244361,1.0,0.460231,0.251156,1.0,0.470794,0.343857,1.0,0.446351,0.403765,1.0,0.446872,0.419370,1.0,0.446872,0.432903,1.0,0.443945,0.441230,1.0,0.434576,0.438107,1.0,0.432624,0.452681,1.0,0.431258,0.461702,1.0,0.434576,0.440883,1.0,0.431648,0.457192,1.0,0.430868,0.467254,1.0,0.435747,0.444006,1.0,0.432820,0.457885,1.0,0.431454,0.466213,1.0,0.438285,0.444700,1.0,0.434186,0.455804,1.0,0.432820,0.462743,1.0,0.505347,0.232087,1.0,0.519891,0.226607,1.0,0.532229,0.313920,1.0,0.532245,0.232142,1.0,0.526250,0.209488,1.0,0.514622,0.217155,1.0,0.511997,0.230821,1.0,0.517997,0.215488,1.0,0.519872,0.239821,1.0,0.517810,0.240155,1.0,0.522125,0.216488,1.0,0.524938,0.233155,1.0,0.525500,0.233155,1.0,0.527938,0.217488,1.0,0.530375,0.232488,1.0,0.530000,0.231155,1.0,0.533188,0.218488,1.0,0.534875,0.227821,1.0,0.534312,0.228488,1.0,0.460204,0.444627,1.0,0.460204,0.444627,1.0,0.447960,0.640891,1.0,0.441730,0.782619,1.0,0.441730,0.782619,1.0,0.507657,0.447402,1.0,0.507657,0.447402,1.0,0.509263,0.651796,1.0,0.521443,0.812536,1.0,0.521443,0.812536,1.0
0.482373,0.450147,1.0,0.485225,0.296857,1.0,0.484275,0.347954,1.0,0.486176,0.245760,1.0,0.479334,0.153102,1.0,0.486242,0.136760,1.0,0.486242,0.136760,1.0,0.470878,0.139341,1.0,0.470878,0.139341,1.0,0.470873,0.253906,1.0,0.455570,0.262051,1.0,0.452495,0.346544,1.0,0.447937,0.398277,1.0,0.451500,0.401681,1.0,0.455518,0.407272,1.0,0.454470,0.416901,1.0,0.444161,0.416280,1.0,0.443637,0.426531,1.0,0.443987,0.433985,1.0,0.442764,0.422181,1.0,0.443637,0.434606,1.0,0.448879,0.438333,1.0,0.442939,0.425909,1.0,0.444511,0.437402,1.0,0.449054,0.437712,1.0,0.444336,0.426841,1.0,0.447306,0.436469,1.0,0.449403,0.436781,1.0,0.503048,0.236258,1.0,0.519921,0.226756,1.0,0.533745,0.316743,1.0,0.529151,0.234852,1.0,0.518009,0.215015,1.0,0.510117,0.227334,1.0,0.506459,0.236573,1.0,0.512811,0.217752,1.0,0.507230,0.228019,1.0,0.504920,0.239311,1.0,0.517431,0.218437,1.0,0.513004,0.240338,1.0,0.510694,0.247181,1.0,0.521667,0.222201,1.0,0.518394,0.242733,1.0,0.516661,0.246497,1.0,0.526286,0.226307,1.0,0.523974,0.240680,1.0,0.523016,0.242048,1.0,0.458644,0.447471,1.0,0.458644,0.447471,1.0,0.447890,0.643682,1.0,0.446283,0.785292,1.0,0.446283,0.785292,1.0,0.506103,0.452823,1.0,0.506103,0.452823,1.0,0.509150,0.657213,1.0,0.521453,0.812524,1.0,0.521453,0.812524,1.0
0.480836,0.446027,1.0,0.483658,0.295774,1.0,0.482717,0.345858,1.0,0.484598,0.245690,1.0,0.477800,0.151683,1.0,0.484723,0.139295,1.0,0.484723,0.139295,1.0,0.470806,0.136767,1.0,0.470806,0.136767,1.0,0.465498,0.255236,1.0,0.446397,0.264781,1.0,0.443303,0.376538,1.0,0.449465,0.382135,1.0,0.450113,0.378235,1.0,0.456116,0.374541,1.0,0.454731,0.405737,1.0,0.457040,0.374952,1.0,0.453345,0.405327,1.0,0.461427,0.398759,1.0,0.456578,0.375772,1.0,0.456116,0.398759,1.0,0.460965,0.395065,1.0,0.461196,0.377415,1.0,0.459118,0.398348,1.0,0.461427,0.395886,1.0,0.464197,0.388907,1.0,0.466275,0.392192,1.0,0.465121,0.395475,1.0,0.503015,0.236151,1.0,0.521432,0.226612,1.0,0.535302,0.332941,1.0,0.519933,0.267469,1.0,0.510358,0.251068,1.0,0.504276,0.246262,1.0,0.501573,0.256673,1.0,0.506078,0.237454,1.0,0.503150,0.247464,1.0,0.501573,0.260277,1.0,0.511934,0.236653,1.0,0.509006,0.257074,1.0,0.506979,0.263881,1.0,0.516214,0.238254,1.0,0.514637,0.257874,1.0,0.513736,0.263080,1.0,0.521396,0.243860,1.0,0.521620,0.249866,1.0,0.520043,0.256673,1.0,0.457098,0.447348,1.0,0.457098,0.447348,1.0,0.447811,0.643634,1.0,0.446318,0.785334,1.0,0.446318,0.785334,1.0,0.504575,0.444706,1.0,0.504575,0.444706,1.0,0.507713,0.646369,1.0,0.521453,0.807112,1.0,0.521453,0.807112,1.0
0.478517,0.445972,1.0,0.478531,0.295778,1.0,0.478526,0.345843,1.0,0.478536,0.245714,1.0,0.476992,0.147639,1.0,0.484718,0.139314,1.0,0.484718,0.139314,1.0,0.470813,0.136668,1.0,0.470813,0.136668,1.0,0.460891,0.249837,1.0,0.443246,0.253959,1.0,0.434104,0.381881,1.0,0.449472,0.357543,1.0,0.474234,0.351877,1.0,0.457204,0.348092,1.0,0.456938,0.346673,1.0,0.447092,0.378368,1.0,0.461461,0.370799,1.0,0.465985,0.369853,1.0,0.461461,0.364176,1.0,0.459599,0.369853,1.0,0.460397,0.347146,1.0,0.461728,0.356607,1.0,0.459333,0.369380,1.0,0.461728,0.347619,1.0,0.445496,0.382625,1.0,0.458268,0.369853,1.0,0.465719,0.370799,1.0,0.496924,0.237517,1.0,0.515312,0.229320,1.0,0.533781,0.332900,1.0,0.519934,0.275713,1.0,0.515140,0.261624,1.0,0.512001,0.258435,1.0,0.501686,0.274380,1.0,0.510656,0.254848,1.0,0.501911,0.263618,1.0,0.501463,0.280359,1.0,0.512225,0.270793,1.0,0.507292,0.276373,1.0,0.506171,0.283548,1.0,0.515140,0.274380,1.0,0.511104,0.279960,1.0,0.508637,0.284345,1.0,0.516485,0.277569,1.0,0.514019,0.280757,1.0,0.510880,0.283548,1.0,0.455514,0.447363,1.0,0.455514,0.447363,1.0,0.446321,0.640962,1.0,0.446260,0.788080,1.0,0.446260,0.788080,1.0,0.501520,0.444581,1.0,0.501520,0.444581,1.0,0.509179,0.643502,1.0,0.521474,0.801656,1.0,0.521474,0.801656,1.0
0.477777,0.439237,1.0,0.473800,0.290005,1.0,0.475126,0.339749,1.0,0.472474,0.240261,1.0,0.476992,0.148914,1.0,0.486211,0.139412,1.0,0.486211,0.139412,1.0,0.472357,0.136626,1.0,0.472357,0.136626,1.0,0.454798,0.245672,1.0,0.437122,0.251082,1.0,0.426443,0.376590,1.0,0.457020,0.330230,1.0,0.459515,0.313068,1.0,0.465802,0.302823,1.0,0.470254,0.296769,1.0,0.462920,0.306082,1.0,0.461872,0.308877,1.0,0.464230,0.308877,1.0,0.462396,0.325641,1.0,0.462396,0.323312,1.0,0.467373,0.316793,1.0,0.471302,0.327503,1.0,0.463706,0.325641,1.0,0.470254,0.316793,1.0,0.472873,0.327969,1.0,0.472873,0.326572,1.0,0.473921,0.326106,1.0,0.490851,0.234774,1.0,0.509228,0.229286,1.0,0.532198,0.332984,1.0,0.521406,0.294712,1.0,0.508189,0.269817,1.0,0.502439,0.281265,1.0,0.501289,0.293939,1.0,0.508648,0.298845,1.0,0.507958,0.295983,1.0,0.509568,0.291894,1.0,0.513248,0.293121,1.0,0.511638,0.298028,1.0,0.514858,0.289442,1.0,0.517388,0.283718,1.0,0.517158,0.297619,1.0,0.516468,0.290259,1.0,0.520147,0.286989,1.0,0.519687,0.296801,1.0,0.518997,0.284535,1.0,0.453996,0.441982,1.0,0.453996,0.441982,1.0,0.446256,0.640914,1.0,0.444832,0.787997,1.0,0.444832,0.787997,1.0,0.501559,0.436491,1.0,0.501559,0.436491,1.0,0.515336,0.635371,1.0,0.521521,0.799041,1.0,0.521521,0.799041,1.0
0.477777,0.439237,1.0,0.473800,0.290005,1.0,0.475126,0.339749,1.0,0.472474,0.240261,1.0,0.476992,0.148914,1.0,0.486211,0.139412,1.0,0.486211,0.139412,1.0,0.472357,0.136626,1.0,0.472357,0.136626,1.0,0.454798,0.245672,1.0,0.437122,0.251082,1.0,0.426443,0.376590,1.0,0.457020,0.330230,1.0,0.459515,0.313068,1.0,0.465802,0.302823,1.0,0.470254,0.296769,1.0,0.462920,0.306082,1.0,0.461872,0.308877,1.0,0.464230,0.308877,1.0,0.462396,0.325641,1.0,0.462396,0.323312,1.0,0.467373,0.316793,1.0,0.471302,0.327503,1.0,0.463706,0.325641,1.0,0.470254,0.316793,1.0,0.472873,0.327969,1.0,0.472873,0.326572,1.0,0.473921,0.326106,1.0,0.490851,0.234774,1.0,0.509228,0.229286,1.0,0.532198,0.332984,1.0,0.521406,0.294712,1.0,0.508189,0.269817,1.0,0.502439,0.281265,1.0,0.501289,0.293939,1.0,0.508648,0.298845,1.0,0.507958,0.295983,1.0,0.509568,0.291894,1.0,0.513248,0.293121,1.0,0.511638,0.298028,1.0,0.514858,0.289442,1.0,0.517388,0.283718,1.0,0.517158,0.297619,1.0,0.516468,0.290259,1.0,0.520147,0.286989,1.0,0.519687,0.296801,1.0,0.518997,0.284535,1.0,0.453996,0.441982,1.0,0.453996,0.441982,1.0,0.446256,0.640914,1.0,0.444832,0.787997,1.0,0.444832,0.787997,1.0,0.501559,0.436491,1.0,0.501559,0.436491,1.0,0.515336,0.635371,1.0,0.521521,0.799041,1.0,0.521521,0.799041,1.0
0.476264,0.440532,1.0,0.473336,0.284266,1.0,0.474312,0.336355,1.0,0.472360,0.232178,1.0,0.477778,0.147599,1.0,0.490803,0.139550,1.0,0.490803,0.139550,1.0,0.473996,0.136711,1.0,0.473996,0.136711,1.0,0.454023,0.237608,1.0,0.435686,0.243039,1.0,0.424907,0.360253,1.0,0.458557,0.300305,1.0,0.460593,0.288800,1.0,0.466966,0.275729,1.0,0.470642,0.265271,1.0,0.473828,0.280086,1.0,0.480200,0.278779,1.0,0.476279,0.282264,1.0,0.476279,0.288800,1.0,0.481916,0.285750,1.0,0.478485,0.288800,1.0,0.477749,0.299693,1.0,0.481671,0.293156,1.0,0.480200,0.296207,1.0,0.477749,0.309714,1.0,0.481671,0.304485,1.0,0.480200,0.305793,1.0,0.489974,0.230739,1.0,0.507587,0.229301,1.0,0.530677,0.335689,1.0,0.521417,0.297544,1.0,0.506595,0.274498,1.0,0.502595,0.299598,1.0,0.504007,0.306709,1.0,0.510831,0.295415,1.0,0.508713,0.309219,1.0,0.508243,0.319678,1.0,0.516714,0.293742,1.0,0.514125,0.306291,1.0,0.512243,0.306709,1.0,0.520243,0.289558,1.0,0.519538,0.302107,1.0,0.516008,0.303363,1.0,0.523302,0.280773,1.0,0.521891,0.299598,1.0,0.520008,0.299598,1.0,0.452504,0.444605,1.0,0.452504,0.444605,1.0,0.446308,0.640896,1.0,0.444796,0.785288,1.0,0.444796,0.785288,1.0,0.500025,0.436460,1.0,0.500025,0.436460,1.0,0.521417,0.624619,1.0,0.521453,0.793575,1.0,0.521453,0.793575,1.0
0.479293,0.439174,1.0,0.472936,0.281928,1.0,0.475055,0.334343,1.0,0.470817,0.229512,1.0,0.488464,0.140799,1.0,0.495339,0.142233,1.0,0.495339,0.142233,1.0,0.481588,0.139364,1.0,0.481588,0.139364,1.0,0.453202,0.230838,1.0,0.435588,0.232164,1.0,0.426393,0.349318,1.0,0.458607,0.278486,1.0,0.464111,0.263356,1.0,0.471190,0.247734,1.0,0.474852,0.236452,1.0,0.479001,0.253376,1.0,0.488765,0.254244,1.0,0.487301,0.254244,1.0,0.477536,0.263356,1.0,0.485592,0.266828,1.0,0.483639,0.265960,1.0,0.474608,0.271601,1.0,0.482662,0.276808,1.0,0.481198,0.275072,1.0,0.472899,0.280714,1.0,0.479245,0.284619,1.0,0.478513,0.284185,1.0,0.486171,0.229474,1.0,0.501526,0.229436,1.0,0.530656,0.335728,1.0,0.519940,0.302971,1.0,0.507621,0.277415,1.0,0.503961,0.290861,1.0,0.504937,0.306042,1.0,0.512989,0.296933,1.0,0.510305,0.310379,1.0,0.509329,0.314282,1.0,0.515672,0.296066,1.0,0.515917,0.308644,1.0,0.513965,0.309078,1.0,0.519332,0.293030,1.0,0.520308,0.306475,1.0,0.518601,0.305174,1.0,0.521286,0.289994,1.0,0.524214,0.299969,1.0,0.523724,0.303439,1.0,0.457040,0.441885,1.0,0.457040,0.441885,1.0,0.447863,0.638154,1.0,0.444793,0.785365,1.0,0.444793,0.785365,1.0,0.501546,0.436463,1.0,0.501546,0.436463,1.0,0.524521,0.624547,1.0,0.519928,0.785326,1.0,0.519928,0.785326,1.0
0.480818,0.439212,1.0,0.471070,0.281813,1.0,0.474319,0.334279,1.0,0.467821,0.229346,1.0,0.489308,0.144918,1.0,0.495454,0.147651,1.0,0.495454,0.147651,1.0,0.483162,0.142185,1.0,0.483162,0.142185,1.0,0.451716,0.229356,1.0,0.435611,0.229366,1.0,0.431000,0.335644,1.0,0.461683,0.267450,1.0,0.470049,0.243381,1.0,0.477308,0.230086,1.0,0.479947,0.217964,1.0,0.483246,0.235952,1.0,0.492045,0.239081,1.0,0.494024,0.240254,1.0,0.481267,0.244945,1.0,0.489845,0.252767,1.0,0.489405,0.253940,1.0,0.477968,0.252767,1.0,0.485666,0.260587,1.0,0.486326,0.259414,1.0,0.475548,0.261760,1.0,0.481267,0.265280,1.0,0.483027,0.264889,1.0,0.482380,0.229390,1.0,0.496940,0.229433,1.0,0.521536,0.335721,1.0,0.519991,0.297608,1.0,0.510468,0.278285,1.0,0.505250,0.290933,1.0,0.505488,0.303582,1.0,0.506673,0.284188,1.0,0.505250,0.291356,1.0,0.505961,0.303161,1.0,0.514974,0.306956,1.0,0.514262,0.295150,1.0,0.515211,0.305691,1.0,0.518531,0.305691,1.0,0.518294,0.293464,1.0,0.519006,0.299788,1.0,0.522802,0.304847,1.0,0.522563,0.291356,1.0,0.522328,0.296836,1.0,0.458554,0.439230,1.0,0.458554,0.439230,1.0,0.449471,0.640853,1.0,0.444836,0.785355,1.0,0.444836,0.785355,1.0,0.503082,0.439194,1.0,0.503082,0.439194,1.0,0.530672,0.621756,1.0,0.515347,0.771716,1.0,0.515347,0.771716,1.0
0.483124,0.443279,1.0,0.471633,0.282939,1.0,0.475463,0.336385,1.0,0.467802,0.229492,1.0,0.491599,0.153096,1.0,0.496997,0.158573,1.0,0.496997,0.158573,1.0,0.486201,0.147619,1.0,0.486201,0.147619,1.0,0.451738,0.229409,1.0,0.435674,0.229327,1.0,0.434084,0.324756,1.0,0.466288,0.248552,1.0,0.471889,0.234282,1.0,0.481068,0.220295,1.0,0.486531,0.206309,1.0,0.485876,0.223015,1.0,0.496584,0.229231,1.0,0.495054,0.231174,1.0,0.484564,0.231951,1.0,0.493524,0.246715,1.0,0.488279,0.249045,1.0,0.481068,0.238944,1.0,0.488279,0.252931,1.0,0.484127,0.253319,1.0,0.478445,0.246715,1.0,0.483690,0.256816,1.0,0.480412,0.258369,1.0,0.481615,0.232187,1.0,0.495428,0.234882,1.0,0.518344,0.341106,1.0,0.519893,0.311158,1.0,0.508432,0.279991,1.0,0.506319,0.291677,1.0,0.506319,0.305449,1.0,0.511953,0.312544,1.0,0.514301,0.299607,1.0,0.510310,0.315049,1.0,0.515944,0.311710,1.0,0.516883,0.300024,1.0,0.515944,0.308371,1.0,0.519466,0.309623,1.0,0.520639,0.296685,1.0,0.519700,0.305032,1.0,0.522984,0.308788,1.0,0.523224,0.296685,1.0,0.522750,0.301694,1.0,0.460091,0.444649,1.0,0.460091,0.444649,1.0,0.457102,0.640907,1.0,0.446276,0.788056,1.0,0.446276,0.788056,1.0,0.506157,0.441909,1.0,0.506157,0.441909,1.0,0.532120,0.621872,1.0,0.510770,0.755306,1.0,0.510770,0.755306,1.0
0.484655,0.440551,1.0,0.472023,0.284188,1.0,0.476234,0.336309,1.0,0.467812,0.232067,1.0,0.494634,0.162509,1.0,0.498492,0.163921,1.0,0.498492,0.163921,1.0,0.490777,0.161096,1.0,0.490777,0.161096,1.0,0.452499,0.230735,1.0,0.437185,0.229404,1.0,0.435649,0.316696,1.0,0.470871,0.245755,1.0,0.476636,0.227358,1.0,0.489870,0.219259,1.0,0.495293,0.221573,1.0,0.489436,0.216173,1.0,0.495510,0.217717,1.0,0.497246,0.220802,1.0,0.488134,0.224273,1.0,0.495510,0.242015,1.0,0.492256,0.242015,1.0,0.483361,0.230830,1.0,0.490955,0.246257,1.0,0.488785,0.245486,1.0,0.479673,0.237386,1.0,0.486398,0.248956,1.0,0.485531,0.248571,1.0,0.481579,0.236163,1.0,0.495346,0.240259,1.0,0.513824,0.354659,1.0,0.519877,0.313904,1.0,0.510331,0.281243,1.0,0.507384,0.292594,1.0,0.506156,0.307440,1.0,0.508612,0.284299,1.0,0.506647,0.296088,1.0,0.507139,0.309187,1.0,0.510086,0.282989,1.0,0.516471,0.298707,1.0,0.516717,0.307877,1.0,0.517945,0.294778,1.0,0.518928,0.300891,1.0,0.518928,0.311370,1.0,0.521630,0.298271,1.0,0.523594,0.301764,1.0,0.523349,0.311370,1.0,0.461684,0.444604,1.0,0.461684,0.444604,1.0,0.460149,0.643591,1.0,0.446400,0.788044,1.0,0.446400,0.788044,1.0,0.507627,0.436498,1.0,0.507627,0.436498,1.0,0.532182,0.629976,1.0,0.512287,0.747150,1.0,0.512287,0.747150,1.0
0.484655,0.440551,1.0,0.472023,0.284188,1.0,0.476234,0.336309,1.0,0.467812,0.232067,1.0,0.494634,0.162509,1.0,0.498492,0.163921,1.0,0.498492,0.163921,1.0,0.490777,0.161096,1.0,0.490777,0.161096,1.0,0.452499,0.230735,1.0,0.437185,0.229404,1.0,0.435649,0.316696,1.0,0.470871,0.245755,1.0,0.476636,0.227358,1.0,0.489870,0.219259,1.0,0.495293,0.221573,1.0,0.489436,0.216173,1.0,0.495510,0.217717,1.0,0.497246,0.220802,1.0,0.488134,0.224273,1.0,0.495510,0.242015,1.0,0.492256,0.242015,1.0,0.483361,0.230830,1.0,0.490955,0.246257,1.0,0.488785,0.245486,1.0,0.479673,0.237386,1.0,0.486398,0.248956,1.0,0.485531,0.248571,1.0,0.481579,0.236163,1.0,0.495346,0.240259,1.0,0.513824,0.354659,1.0,0.519877,0.313904,1.0,0.510331,0.281243,1.0,0.507384,0.292594,1.0,0.506156,0.307440,1.0,0.508612,0.284299,1.0,0.506647,0.296088,1.0,0.507139,0.309187,1.0,0.510086,0.282989,1.0,0.516471,0.298707,1.0,0.516717,0.307877,1.0,0.517945,0.294778,1.0,0.518928,0.300891,1.0,0.518928,0.311370,1.0,0.521630,0.298271,1.0,0.523594,0.301764,1.0,0.523349,0.311370,1.0,0.461684,0.444604,1.0,0.461684,0.444604,1.0,0.460149,0.643591,1.0,0.446400,0.788044,1.0,0.446400,0.788044,1.0,0.507627,0.436498,1.0,0.507627,0.436498,1.0,0.532182,0.629976,1.0,0.512287,0.747150,1.0,0.512287,0.747150,1.0
0.488467,0.443330,1.0,0.474081,0.284994,1.0,0.478876,0.337772,1.0,0.469285,0.232215,1.0,0.498461,0.172159,1.0,0.503059,0.177584,1.0,0.503059,0.177584,1.0,0.493864,0.166733,1.0,0.493864,0.166733,1.0,0.453974,0.230819,1.0,0.438664,0.229424,1.0,0.438700,0.316503,1.0,0.472455,0.245737,1.0,0.480616,0.229570,1.0,0.492742,0.237134,1.0,0.494657,0.223897,1.0,0.492529,0.222385,1.0,0.495720,0.219737,1.0,0.498698,0.223897,1.0,0.489126,0.223897,1.0,0.491466,0.226923,1.0,0.494657,0.239025,1.0,0.484871,0.228057,1.0,0.491466,0.244320,1.0,0.490828,0.246211,1.0,0.481680,0.233731,1.0,0.487636,0.247724,1.0,0.485722,0.247724,1.0,0.482340,0.238978,1.0,0.495395,0.245742,1.0,0.513795,0.362945,1.0,0.519892,0.319336,1.0,0.506336,0.289769,1.0,0.506838,0.300928,1.0,0.506587,0.313873,1.0,0.510102,0.290215,1.0,0.509098,0.303160,1.0,0.507591,0.314766,1.0,0.515124,0.291107,1.0,0.517384,0.307178,1.0,0.516631,0.316106,1.0,0.519393,0.294679,1.0,0.521651,0.307624,1.0,0.520146,0.316998,1.0,0.522906,0.298696,1.0,0.524917,0.308070,1.0,0.524667,0.315213,1.0,0.467768,0.444728,1.0,0.467768,0.444728,1.0,0.467793,0.646377,1.0,0.447881,0.785302,1.0,0.447881,0.785302,1.0,0.509167,0.441932,1.0,0.509167,0.441932,1.0,0.530688,0.643515,1.0,0.518395,0.744468,1.0,0.518395,0.744468,1.0
0.490785,0.448712,1.0,0.475841,0.294450,1.0,0.480822,0.345871,1.0,0.470859,0.243029,1.0,0.500775,0.183008,1.0,0.506128,0.185702,1.0,0.506128,0.185702,1.0,0.495422,0.180314,1.0,0.495422,0.180314,1.0,0.457074,0.240286,1.0,0.443290,0.237544,1.0,0.444778,0.319327,1.0,0.473941,0.248351,1.0,0.482153,0.248217,1.0,0.497268,0.228512,1.0,0.502306,0.214897,1.0,0.494245,0.220988,1.0,0.499887,0.200925,1.0,0.500694,0.185519,1.0,0.490013,0.224213,1.0,0.493035,0.231378,1.0,0.495656,0.243201,1.0,0.485781,0.228154,1.0,0.488401,0.233169,1.0,0.491423,0.247142,1.0,0.481549,0.234960,1.0,0.487192,0.248933,1.0,0.487192,0.250007,1.0,0.483149,0.245749,1.0,0.495440,0.248469,1.0,0.515309,0.379119,1.0,0.518418,0.324810,1.0,0.509111,0.292491,1.0,0.508832,0.303414,1.0,0.507715,0.312351,1.0,0.513580,0.298945,1.0,0.516093,0.311357,1.0,0.511624,0.321784,1.0,0.518886,0.299442,1.0,0.518886,0.312351,1.0,0.516093,0.323273,1.0,0.521401,0.298945,1.0,0.523073,0.311854,1.0,0.520839,0.321784,1.0,0.523354,0.299938,1.0,0.525589,0.310861,1.0,0.525031,0.319798,1.0,0.470842,0.450086,1.0,0.470842,0.450086,1.0,0.470912,0.646351,1.0,0.449435,0.785329,1.0,0.449435,0.785329,1.0,0.510728,0.447339,1.0,0.510728,0.447339,1.0,0.529099,0.646436,1.0,0.521396,0.752657,1.0,0.521396,0.752657,1.0
0.493132,0.456958,1.0,0.477623,0.302569,1.0,0.482792,0.354032,1.0,0.472453,0.251106,1.0,0.502258,0.184495,1.0,0.507620,0.185848,1.0,0.507620,0.185848,1.0,0.496896,0.183142,1.0,0.496896,0.183142,1.0,0.459382,0.249803,1.0,0.446311,0.248500,1.0,0.446412,0.335506,1.0,0.473944,0.251235,1.0,0.472974,0.205154,1.0,0.471410,0.186086,1.0,0.472304,0.170992,1.0,0.491520,0.230576,1.0,0.496883,0.228590,1.0,0.501352,0.234151,1.0,0.487722,0.231768,1.0,0.492861,0.236932,1.0,0.495766,0.249644,1.0,0.484817,0.236932,1.0,0.488169,0.240905,1.0,0.491073,0.253616,1.0,0.481912,0.242494,1.0,0.484370,0.246863,1.0,0.487052,0.256396,1.0,0.486240,0.252531,1.0,0.500028,0.253956,1.0,0.519945,0.381938,1.0,0.521531,0.327480,1.0,0.516024,0.287587,1.0,0.512188,0.299278,1.0,0.509721,0.310482,1.0,0.516298,0.291483,1.0,0.513284,0.300739,1.0,0.514928,0.319738,1.0,0.520682,0.292458,1.0,0.520958,0.307072,1.0,0.518764,0.319250,1.0,0.523698,0.294407,1.0,0.524792,0.307559,1.0,0.523146,0.318763,1.0,0.526438,0.298791,1.0,0.527807,0.309020,1.0,0.527260,0.318276,1.0,0.470911,0.461024,1.0,0.470911,0.461024,1.0,0.472438,0.646306,1.0,0.450950,0.785354,1.0,0.450950,0.785354,1.0,0.515353,0.452893,1.0,0.515353,0.452893,1.0,0.527589,0.646430,1.0,0.519899,0.755322,1.0,0.519899,0.755322,1.0
0.494626,0.456944,1.0,0.485996,0.306766,1.0,0.488873,0.356825,1.0,0.483120,0.256707,1.0,0.501563,0.181754,1.0,0.507704,0.183149,1.0,0.507704,0.183149,1.0,0.495422,0.180359,1.0,0.495422,0.180359,1.0,0.465493,0.253910,1.0,0.447866,0.251114,1.0,0.447937,0.341167,1.0,0.472501,0.270142,1.0,0.489209,0.234130,1.0,0.495517,0.250781,1.0,0.502017,0.250781,1.0,0.491311,0.240246,1.0,0.497620,0.241946,1.0,0.500869,0.242286,1.0,0.487297,0.242286,1.0,0.490547,0.246704,1.0,0.493988,0.258938,1.0,0.482901,0.247383,1.0,0.485385,0.250781,1.0,0.489782,0.263356,1.0,0.479459,0.255200,1.0,0.481180,0.256899,1.0,0.485194,0.265056,1.0,0.499971,0.263499,1.0,0.516822,0.270292,1.0,0.527604,0.379321,1.0,0.530667,0.316676,1.0,0.523229,0.280165,1.0,0.517746,0.291130,1.0,0.512949,0.302906,1.0,0.520487,0.284632,1.0,0.518203,0.291942,1.0,0.517974,0.309405,1.0,0.526656,0.284226,1.0,0.523229,0.297221,1.0,0.523000,0.304937,1.0,0.530766,0.287069,1.0,0.528484,0.298440,1.0,0.527339,0.304125,1.0,0.534422,0.292348,1.0,0.533052,0.304125,1.0,0.532365,0.307374,1.0,0.470891,0.458303,1.0,0.470891,0.458303,1.0,0.472447,0.643589,1.0,0.452456,0.782619,1.0,0.452456,0.782619,1.0,0.518360,0.455585,1.0,0.518360,0.455585,1.0,0.524531,0.646318,1.0,0.519906,0.755409,1.0,0.519906,0.755409,1.0
0.494610,0.447403,1.0,0.488310,0.302265,1.0,0.490410,0.350644,1.0,0.486209,0.253885,1.0,0.493866,0.172116,1.0,0.507678,0.166749,1.0,0.507678,0.166749,1.0,0.493853,0.164065,1.0,0.493853,0.164065,1.0,0.470115,0.251216,1.0,0.454020,0.248547,1.0,0.447966,0.352062,1.0,0.472366,0.278400,1.0,0.477627,0.258291,1.0,0.489223,0.252182,1.0,0.495451,0.251419,1.0,0.487935,0.252182,1.0,0.495666,0.272035,1.0,0.501249,0.270890,1.0,0.484284,0.257527,1.0,0.493948,0.274326,1.0,0.492659,0.274326,1.0,0.480418,0.262491,1.0,0.489653,0.279289,1.0,0.488364,0.278907,1.0,0.478700,0.270508,1.0,0.484928,0.280434,1.0,0.484714,0.280434,1.0,0.503821,0.256650,1.0,0.521432,0.259416,1.0,0.532234,0.362887,1.0,0.533698,0.294806,1.0,0.526578,0.261144,1.0,0.522234,0.269251,1.0,0.518542,0.282377,1.0,0.523318,0.266548,1.0,0.521146,0.276200,1.0,0.517673,0.283921,1.0,0.528099,0.272726,1.0,0.525276,0.286238,1.0,0.523536,0.292029,1.0,0.533307,0.273498,1.0,0.530052,0.288555,1.0,0.529401,0.294731,1.0,0.538302,0.271954,1.0,0.535266,0.286624,1.0,0.534396,0.291643,1.0,0.470860,0.447395,1.0,0.470860,0.447395,1.0,0.470919,0.640777,1.0,0.452481,0.785362,1.0,0.452481,0.785362,1.0,0.518360,0.447410,1.0,0.518360,0.447410,1.0,0.522964,0.643619,1.0,0.519930,0.758060,1.0,0.519930,0.758060,1.0
0.494610,0.447403,1.0,0.488310,0.302265,1.0,0.490410,0.350644,1.0,0.486209,0.253885,1.0,0.493866,0.172116,1.0,0.507678,0.166749,1.0,0.507678,0.166749,1.0,0.493853,0.164065,1.0,0.493853,0.164065,1.0,0.470115,0.251216,1.0,0.454020,0.248547,1.0,0.447966,0.352062,1.0,0.472366,0.278400,1.0,0.477627,0.258291,1.0,0.489223,0.252182,1.0,0.495451,0.251419,1.0,0.487935,0.252182,1.0,0.495666,0.272035,1.0,0.501249,0.270890,1.0,0.484284,0.257527,1.0,0.493948,0.274326,1.0,0.492659,0.274326,1.0,0.480418,0.262491,1.0,0.489653,0.279289,1.0,0.488364,0.278907,1.0,0.478700,0.270508,1.0,0.484928,0.280434,1.0,0.484714,0.280434,1.0,0.503821,0.256650,1.0,0.521432,0.259416,1.0,0.532234,0.362887,1.0,0.533698,0.294806,1.0,0.526578,0.261144,1.0,0.522234,0.269251,1.0,0.518542,0.282377,1.0,0.523318,0.266548,1.0,0.521146,0.276200,1.0,0.517673,0.283921,1.0,0.528099,0.272726,1.0,0.525276,0.286238,1.0,0.523536,0.292029,1.0,0.533307,0.273498,1.0,0.530052,0.288555,1.0,0.529401,0.294731,1.0,0.538302,0.271954,1.0,0.535266,0.286624,1.0,0.534396,0.291643,1.0,0.470860,0.447395,1.0,0.470860,0.447395,1.0,0.470919,0.640777,1.0,0.452481,0.785362,1.0,0.452481,0.785362,1.0,0.518360,0.447410,1.0,0.518360,0.447410,1.0,0.522964,0.643619,1.0,0.519930,0.758060,1.0,0.519930,0.758060,1.0
0.493868,0.439177,1.0,0.494972,0.298134,1.0,0.494604,0.345148,1.0,0.495340,0.251119,1.0,0.496170,0.165352,1.0,0.506143,0.161344,1.0,0.506143,0.161344,1.0,0.490782,0.161298,1.0,0.490782,0.161298,1.0,0.477006,0.249763,1.0,0.458673,0.248407,1.0,0.449427,0.354761,1.0,0.472372,0.292013,1.0,0.476169,0.268543,1.0,0.489493,0.267358,1.0,0.494823,0.263410,1.0,0.487495,0.263410,1.0,0.493268,0.261436,1.0,0.496377,0.259857,1.0,0.483497,0.268543,1.0,0.492824,0.286307,1.0,0.493268,0.289071,1.0,0.479722,0.275648,1.0,0.488383,0.291440,1.0,0.488383,0.293414,1.0,0.477057,0.283544,1.0,0.484164,0.294598,1.0,0.484164,0.294993,1.0,0.512214,0.252543,1.0,0.529089,0.253966,1.0,0.535229,0.354709,1.0,0.536818,0.272943,1.0,0.528562,0.259344,1.0,0.523333,0.253395,1.0,0.520198,0.258971,1.0,0.524797,0.238898,1.0,0.524797,0.241871,1.0,0.524797,0.261945,1.0,0.530026,0.238526,1.0,0.528146,0.250050,1.0,0.526260,0.260831,1.0,0.535047,0.241129,1.0,0.532328,0.255626,1.0,0.530865,0.262317,1.0,0.540063,0.247076,1.0,0.536510,0.260831,1.0,0.535672,0.262317,1.0,0.470863,0.439173,1.0,0.470863,0.439173,1.0,0.469307,0.630027,1.0,0.452511,0.777194,1.0,0.452511,0.777194,1.0,0.516873,0.439181,1.0,0.516873,0.439181,1.0,0.519977,0.640890,1.0,0.519904,0.755365,1.0,0.519904,0.755365,1.0
0.493851,0.432393,1.0,0.496208,0.294353,1.0,0.495422,0.340366,1.0,0.496994,0.248340,1.0,0.498451,0.162645,1.0,0.504620,0.161240,1.0,0.504620,0.161240,1.0,0.487741,0.161344,1.0,0.487741,0.161344,1.0,0.482381,0.248350,1.0,0.467768,0.248360,1.0,0.449410,0.357409,1.0,0.472391,0.302947,1.0,0.471049,0.266183,1.0,0.487491,0.281217,1.0,0.492424,0.277041,1.0,0.486317,0.279546,1.0,0.491484,0.299172,1.0,0.495243,0.302513,1.0,0.480680,0.282887,1.0,0.489370,0.300425,1.0,0.488666,0.305019,1.0,0.477391,0.287062,1.0,0.484907,0.303766,1.0,0.485612,0.307106,1.0,0.475042,0.295831,1.0,0.480680,0.305019,1.0,0.481149,0.306689,1.0,0.514557,0.248340,1.0,0.532120,0.248340,1.0,0.538349,0.338311,1.0,0.535229,0.253954,1.0,0.528969,0.244380,1.0,0.523734,0.230251,1.0,0.520440,0.241623,1.0,0.525479,0.220947,1.0,0.522573,0.232664,1.0,0.522573,0.238866,1.0,0.530323,0.220603,1.0,0.526641,0.235076,1.0,0.524703,0.241278,1.0,0.535172,0.223359,1.0,0.530521,0.240244,1.0,0.529745,0.243691,1.0,0.540208,0.227839,1.0,0.536724,0.239900,1.0,0.534010,0.244035,1.0,0.470841,0.431033,1.0,0.470841,0.431033,1.0,0.460208,0.621910,1.0,0.457021,0.777166,1.0,0.457021,0.777166,1.0,0.516860,0.433753,1.0,0.516860,0.433753,1.0,0.518401,0.640762,1.0,0.519907,0.755391,1.0,0.519907,0.755391,1.0
0.493083,0.439241,1.0,0.501721,0.296114,1.0,0.498842,0.343823,1.0,0.504600,0.248405,1.0,0.496954,0.166746,1.0,0.500027,0.161329,1.0,0.500027,0.161329,1.0,0.484751,0.164051,1.0,0.484751,0.164051,1.0,0.487759,0.248473,1.0,0.470919,0.248542,1.0,0.450947,0.357453,1.0,0.472354,0.313887,1.0,0.478945,0.297409,1.0,0.489346,0.303713,1.0,0.493364,0.311277,1.0,0.485564,0.292367,1.0,0.489582,0.312118,1.0,0.489818,0.320102,1.0,0.480836,0.293628,1.0,0.486273,0.313798,1.0,0.487455,0.321363,1.0,0.476581,0.297830,1.0,0.482254,0.316320,1.0,0.483672,0.322623,1.0,0.472563,0.304133,1.0,0.477527,0.317160,1.0,0.478709,0.320102,1.0,0.519954,0.248358,1.0,0.535307,0.248311,1.0,0.535281,0.319402,1.0,0.533771,0.245773,1.0,0.531078,0.233788,1.0,0.526516,0.215469,1.0,0.517734,0.229583,1.0,0.524661,0.208561,1.0,0.518409,0.225079,1.0,0.517227,0.229884,1.0,0.528714,0.210063,1.0,0.522125,0.226581,1.0,0.522802,0.234389,1.0,0.534120,0.213066,1.0,0.526854,0.228082,1.0,0.528036,0.231986,1.0,0.539187,0.218772,1.0,0.532094,0.229283,1.0,0.531755,0.233788,1.0,0.470852,0.436501,1.0,0.470852,0.436501,1.0,0.457074,0.619088,1.0,0.458660,0.771689,1.0,0.458660,0.771689,1.0,0.515315,0.441981,1.0,0.515315,0.441981,1.0,0.516820,0.640787,1.0,0.519946,0.763548,1.0,0.519946,0.763548,1.0
0.491597,0.439239,1.0,0.503679,0.296047,1.0,0.499652,0.343778,1.0,0.507707,0.248317,1.0,0.495410,0.172132,1.0,0.496980,0.163875,1.0,0.496980,0.163875,1.0,0.484605,0.166818,1.0,0.484605,0.166818,1.0,0.491605,0.248419,1.0,0.475504,0.248522,1.0,0.455559,0.357437,1.0,0.470864,0.319400,1.0,0.478514,0.301385,1.0,0.486077,0.311890,1.0,0.486549,0.305587,1.0,0.479932,0.304747,1.0,0.484659,0.324076,1.0,0.487022,0.325336,1.0,0.475914,0.306848,1.0,0.481350,0.324916,1.0,0.483950,0.327857,1.0,0.472605,0.310209,1.0,0.478041,0.327017,1.0,0.479932,0.328698,1.0,0.470478,0.314831,1.0,0.473078,0.325336,1.0,0.474732,0.326597,1.0,0.525322,0.246977,1.0,0.542937,0.245638,1.0,0.533714,0.313970,1.0,0.533656,0.229335,1.0,0.524323,0.187262,1.0,0.522578,0.197956,1.0,0.517922,0.210720,1.0,0.522969,0.193471,1.0,0.519086,0.194506,1.0,0.517534,0.196921,1.0,0.527234,0.194506,1.0,0.521802,0.203820,1.0,0.518892,0.215895,1.0,0.531505,0.200026,1.0,0.523745,0.214515,1.0,0.523161,0.221415,1.0,0.535578,0.208306,1.0,0.531120,0.215206,1.0,0.528401,0.220035,1.0,0.470905,0.436489,1.0,0.470905,0.436489,1.0,0.449384,0.610943,1.0,0.466247,0.752742,1.0,0.466247,0.752742,1.0,0.512289,0.441990,1.0,0.512289,0.441990,1.0,0.512257,0.640811,1.0,0.519972,0.758112,1.0,0.519972,0.758112,1.0
0.491581,0.439218,1.0,0.504815,0.296098,1.0,0.500404,0.343805,1.0,0.509227,0.248392,1.0,0.493874,0.173527,1.0,0.496908,0.166706,1.0,0.496908,0.166706,1.0,0.483196,0.177575,1.0,0.483196,0.177575,1.0,0.495422,0.249736,1.0,0.481617,0.251081,1.0,0.458561,0.357480,1.0,0.470815,0.330183,1.0,0.476270,0.309045,1.0,0.480740,0.312392,1.0,0.483329,0.314065,1.0,0.477682,0.315738,1.0,0.483329,0.338744,1.0,0.484740,0.339999,1.0,0.473682,0.319921,1.0,0.477682,0.338744,1.0,0.479799,0.337907,1.0,0.469917,0.322431,1.0,0.473917,0.339162,1.0,0.476034,0.338744,1.0,0.467094,0.326195,1.0,0.469917,0.336234,1.0,0.472035,0.337071,1.0,0.526829,0.245696,1.0,0.544432,0.243000,1.0,0.532115,0.311143,1.0,0.530688,0.226663,1.0,0.528474,0.189139,1.0,0.516654,0.194306,1.0,0.512778,0.191895,1.0,0.518010,0.189483,1.0,0.513166,0.191895,1.0,0.511034,0.189828,1.0,0.523245,0.189483,1.0,0.517235,0.199474,1.0,0.514522,0.208776,1.0,0.528089,0.192584,1.0,0.523047,0.205331,1.0,0.520142,0.211531,1.0,0.531964,0.199130,1.0,0.527698,0.209809,1.0,0.524984,0.213598,1.0,0.470918,0.436468,1.0,0.470918,0.436468,1.0,0.446389,0.608231,1.0,0.470877,0.744476,1.0,0.470877,0.744476,1.0,0.512243,0.441969,1.0,0.512243,0.441969,1.0,0.509238,0.640861,1.0,0.521396,0.755418,1.0,0.521396,0.755418,1.0
0.491581,0.439218,1.0,0.504815,0.296098,1.0,0.500404,0.343805,1.0,0.509227,0.248392,1.0,0.493874,0.173527,1.0,0.496908,0.166706,1.0,0.496908,0.166706,1.0,0.483196,0.177575,1.0,0.483196,0.177575,1.0,0.495422,0.249736,1.0,0.481617,0.251081,1.0,0.458561,0.357480,1.0,0.470815,0.330183,1.0,0.476270,0.309045,1.0,0.480740,0.312392,1.0,0.483329,0.314065,1.0,0.477682,0.315738,1.0,0.483329,0.338744,1.0,0.484740,0.339999,1.0,0.473682,0.319921,1.0,0.477682,0.338744,1.0,0.479799,0.337907,1.0,0.469917,0.322431,1.0,0.473917,0.339162,1.0,0.476034,0.338744,1.0,0.467094,0.326195,1.0,0.469917,0.336234,1.0,0.472035,0.337071,1.0,0.526829,0.245696,1.0,0.544432,0.243000,1.0,0.532115,0.311143,1.0,0.530688,0.226663,1.0,0.528474,0.189139,1.0,0.516654,0.194306,1.0,0.512778,0.191895,1.0,0.518010,0.189483,1.0,0.513166,0.191895,1.0,0.511034,0.189828,1.0,0.523245,0.189483,1.0,0.517235,0.199474,1.0,0.514522,0.208776,1.0,0.528089,0.192584,1.0,0.523047,0.205331,1.0,0.520142,0.211531,1.0,0.531964,0.199130,1.0,0.527698,0.209809,1.0,0.524984,0.213598,1.0,0.470918,0.436468,1.0,0.470918,0.436468,1.0,0.446389,0.608231,1.0,0.470877,0.744476,1.0,0.470877,0.744476,1.0,0.512243,0.441969,1.0,0.512243,0.441969,1.0,0.509238,0.640861,1.0,0.521396,0.755418,1.0,0.521396,0.755418,1.0
0.490072,0.436513,1.0,0.507871,0.293414,1.0,0.501938,0.341114,1.0,0.513804,0.245714,1.0,0.490024,0.177510,1.0,0.496892,0.172109,1.0,0.496892,0.172109,1.0,0.483156,0.182910,1.0,0.483156,0.182910,1.0,0.499260,0.247083,1.0,0.484717,0.248453,1.0,0.460141,0.357471,1.0,0.469295,0.338330,1.0,0.473528,0.319948,1.0,0.480798,0.333305,1.0,0.480798,0.342353,1.0,0.473285,0.324256,1.0,0.479586,0.347092,1.0,0.480314,0.351401,1.0,0.469165,0.326842,1.0,0.473285,0.345799,1.0,0.475708,0.350969,1.0,0.465288,0.330289,1.0,0.468922,0.346661,1.0,0.471346,0.350969,1.0,0.462136,0.332874,1.0,0.463591,0.339768,1.0,0.465530,0.345369,1.0,0.529115,0.240309,1.0,0.544427,0.234905,1.0,0.530625,0.308460,1.0,0.524521,0.226586,1.0,0.521370,0.193508,1.0,0.514366,0.195192,1.0,0.506413,0.208994,1.0,0.513040,0.190142,1.0,0.504140,0.193845,1.0,0.506034,0.212024,1.0,0.518531,0.190479,1.0,0.509821,0.211014,1.0,0.510199,0.214717,1.0,0.522318,0.194519,1.0,0.518342,0.205964,1.0,0.514744,0.214044,1.0,0.526484,0.199568,1.0,0.523266,0.211014,1.0,0.520804,0.214381,1.0,0.470879,0.431094,1.0,0.470879,0.431094,1.0,0.446292,0.613596,1.0,0.473947,0.738969,1.0,0.473947,0.738969,1.0,0.509266,0.441932,1.0,0.509266,0.441932,1.0,0.509155,0.640999,1.0,0.521474,0.752742,1.0,0.521474,0.752742,1.0
0.488538,0.441950,1.0,0.509754,0.296747,1.0,0.502682,0.345148,1.0,0.516825,0.248346,1.0,0.490036,0.183079,1.0,0.496892,0.180324,1.0,0.496892,0.180324,1.0,0.483180,0.185834,1.0,0.483180,0.185834,1.0,0.501520,0.249720,1.0,0.486215,0.251094,1.0,0.483160,0.324765,1.0,0.470860,0.338418,1.0,0.471831,0.329915,1.0,0.477929,0.342110,1.0,0.476404,0.352407,1.0,0.473812,0.334251,1.0,0.471221,0.358911,1.0,0.476099,0.353492,1.0,0.467258,0.335606,1.0,0.469240,0.357015,1.0,0.471374,0.357285,1.0,0.463600,0.338857,1.0,0.466343,0.358369,1.0,0.468478,0.357015,1.0,0.460094,0.342923,1.0,0.462990,0.356744,1.0,0.464971,0.356744,1.0,0.530621,0.244299,1.0,0.544417,0.240251,1.0,0.523063,0.311056,1.0,0.521536,0.229311,1.0,0.508470,0.225339,1.0,0.503969,0.226006,1.0,0.496281,0.218671,1.0,0.502281,0.198002,1.0,0.497781,0.213337,1.0,0.499281,0.222672,1.0,0.509782,0.199002,1.0,0.505094,0.218005,1.0,0.505282,0.231340,1.0,0.516721,0.200002,1.0,0.510345,0.219338,1.0,0.511470,0.216671,1.0,0.521786,0.203003,1.0,0.518784,0.214337,1.0,0.516721,0.218671,1.0,0.469351,0.439195,1.0,0.469351,0.439195,1.0,0.444818,0.616406,1.0,0.478531,0.733568,1.0,0.478531,0.733568,1.0,0.507726,0.444704,1.0,0.507726,0.444704,1.0,0.507608,0.641001,1.0,0.521531,0.752687,1.0,0.521531,0.752687,1.0
0.487704,0.446104,1.0,0.510719,0.299921,1.0,0.503047,0.348649,1.0,0.518391,0.251194,1.0,0.489265,0.189868,1.0,0.495403,0.185791,1.0,0.495403,0.185791,1.0,0.483128,0.193944,1.0,0.483128,0.193944,1.0,0.503824,0.255256,1.0,0.489258,0.259318,1.0,0.489267,0.330229,1.0,0.472350,0.341095,1.0,0.469694,0.335836,1.0,0.474523,0.345981,1.0,0.472474,0.357688,1.0,0.469986,0.337397,1.0,0.468377,0.337397,1.0,0.465743,0.341559,1.0,0.464133,0.337657,1.0,0.461499,0.343381,1.0,0.465011,0.356647,1.0,0.461207,0.341559,1.0,0.458427,0.345201,1.0,0.462817,0.357948,1.0,0.457987,0.344160,1.0,0.456378,0.348323,1.0,0.458280,0.356127,1.0,0.530667,0.248452,1.0,0.542943,0.245711,1.0,0.521542,0.313707,1.0,0.519889,0.229424,1.0,0.502133,0.186830,1.0,0.500973,0.230143,1.0,0.495752,0.227393,1.0,0.498266,0.207111,1.0,0.494785,0.222236,1.0,0.496913,0.230143,1.0,0.504454,0.210206,1.0,0.500199,0.224986,1.0,0.502907,0.230143,1.0,0.509481,0.215018,1.0,0.506001,0.227049,1.0,0.506387,0.229456,1.0,0.516248,0.217081,1.0,0.514508,0.221549,1.0,0.511801,0.226361,1.0,0.467797,0.444723,1.0,0.467797,0.444723,1.0,0.447827,0.621871,1.0,0.481591,0.741702,1.0,0.481591,0.741702,1.0,0.507611,0.447485,1.0,0.507611,0.447485,1.0,0.504608,0.643679,1.0,0.521479,0.755371,1.0,0.521479,0.755371,1.0
0.485429,0.448731,1.0,0.507842,0.300630,1.0,0.500371,0.349997,1.0,0.515313,0.251263,1.0,0.489207,0.193999,1.0,0.495351,0.188572,1.0,0.495351,0.188572,1.0,0.483063,0.199426,1.0,0.483063,0.199426,1.0,0.500769,0.255323,1.0,0.486225,0.259382,1.0,0.484679,0.335627,1.0,0.467815,0.343847,1.0,0.468546,0.333965,1.0,0.471853,0.341242,1.0,0.469491,0.352157,1.0,0.467287,0.333965,1.0,0.470279,0.341802,1.0,0.469019,0.350478,1.0,0.460203,0.335084,1.0,0.461462,0.347399,1.0,0.464139,0.353556,1.0,0.455637,0.340122,1.0,0.457841,0.351318,1.0,0.461147,0.357755,1.0,0.452646,0.345720,1.0,0.454692,0.353556,1.0,0.456582,0.357475,1.0,0.528334,0.249865,1.0,0.541354,0.248468,1.0,0.521510,0.316617,1.0,0.518380,0.234798,1.0,0.507569,0.208801,1.0,0.496099,0.215486,1.0,0.492903,0.230194,1.0,0.495911,0.213481,1.0,0.492527,0.227185,1.0,0.491587,0.226182,1.0,0.501928,0.215152,1.0,0.497792,0.234874,1.0,0.500424,0.240891,1.0,0.508133,0.217492,1.0,0.503432,0.235877,1.0,0.502680,0.245570,1.0,0.513586,0.222506,1.0,0.512082,0.229859,1.0,0.510014,0.233536,1.0,0.464720,0.447361,1.0,0.464720,0.447361,1.0,0.455542,0.635488,1.0,0.483062,0.749810,1.0,0.483062,0.749810,1.0,0.506139,0.450102,1.0,0.506139,0.450102,1.0,0.499984,0.643711,1.0,0.521417,0.755457,1.0,0.521417,0.755457,1.0
0.483919,0.448833,1.0,0.501759,0.300660,1.0,0.495813,0.350051,1.0,0.507706,0.251269,1.0,0.489298,0.192539,1.0,0.492357,0.185658,1.0,0.492357,0.185658,1.0,0.480032,0.188481,1.0,0.480032,0.188481,1.0,0.493137,0.258034,1.0,0.478568,0.264799,1.0,0.460142,0.379324,1.0,0.458613,0.352007,1.0,0.462779,0.309782,1.0,0.466711,0.330320,1.0,0.467449,0.337312,1.0,0.461058,0.323766,1.0,0.461796,0.347362,1.0,0.464745,0.346488,1.0,0.455405,0.326824,1.0,0.459583,0.347362,1.0,0.461058,0.349110,1.0,0.451226,0.331194,1.0,0.456142,0.348673,1.0,0.457863,0.349984,1.0,0.449260,0.337749,1.0,0.452947,0.348673,1.0,0.453684,0.349110,1.0,0.520752,0.249851,1.0,0.533797,0.248434,1.0,0.523010,0.330160,1.0,0.518347,0.240249,1.0,0.507492,0.221987,1.0,0.499832,0.226771,1.0,0.512046,0.179294,1.0,0.499418,0.225668,1.0,0.496312,0.246646,1.0,0.497969,0.249591,1.0,0.502730,0.225668,1.0,0.497348,0.245542,1.0,0.497555,0.249958,1.0,0.506043,0.230452,1.0,0.501695,0.245174,1.0,0.502730,0.247014,1.0,0.509562,0.238549,1.0,0.506664,0.245910,1.0,0.506250,0.246278,1.0,0.461705,0.447490,1.0,0.461705,0.447490,1.0,0.460155,0.638119,1.0,0.484623,0.749985,1.0,0.484623,0.749985,1.0,0.506133,0.450177,1.0,0.506133,0.450177,1.0,0.496987,0.643772,1.0,0.521406,0.763529,1.0,0.521406,0.763529,1.0
0.483919,0.448833,1.0,0.501759,0.300660,1.0,0.495813,0.350051,1.0,0.507706,0.251269,1.0,0.489298,0.192539,1.0,0.492357,0.185658,1.0,0.492357,0.185658,1.0,0.480032,0.188481,1.0,0.480032,0.188481,1.0,0.493137,0.258034,1.0,0.478568,0.264799,1.0,0.460142,0.379324,1.0,0.458613,0.352007,1.0,0.462779,0.309782,1.0,0.466711,0.330320,1.0,0.467449,0.337312,1.0,0.461058,0.323766,1.0,0.461796,0.347362,1.0,0.464745,0.346488,1.0,0.455405,0.326824,1.0,0.459583,0.347362,1.0,0.461058,0.349110,1.0,0.451226,0.331194,1.0,0.456142,0.348673,1.0,0.457863,0.349984,1.0,0.449260,0.337749,1.0,0.452947,0.348673,1.0,0.453684,0.349110,1.0,0.520752,0.249851,1.0,0.533797,0.248434,1.0,0.523010,0.330160,1.0,0.518347,0.240249,1.0,0.507492,0.221987,1.0,0.499832,0.226771,1.0,0.512046,0.179294,1.0,0.499418,0.225668,1.0,0.496312,0.246646,1.0,0.497969,0.249591,1.0,0.502730,0.225668,1.0,0.497348,0.245542,1.0,0.497555,0.249958,1.0,0.506043,0.230452,1.0,0.501695,0.245174,1.0,0.502730,0.247014,1.0,0.509562,0.238549,1.0,0.506664,0.245910,1.0,0.506250,0.246278,1.0,0.461705,0.447490,1.0,0.461705,0.447490,1.0,0.460155,0.638119,1.0,0.484623,0.749985,1.0,0.484623,0.749985,1.0,0.506133,0.450177,1.0,0.506133,0.450177,1.0,0.496987,0.643772,1.0,0.521406,0.763529,1.0,0.521406,0.763529,1.0
0.484653,0.448781,1.0,0.496178,0.306736,1.0,0.492337,0.354084,1.0,0.500020,0.259388,1.0,0.488508,0.184435,1.0,0.489268,0.177541,1.0,0.489268,0.177541,1.0,0.472497,0.180303,1.0,0.472497,0.180303,1.0,0.485442,0.264819,1.0,0.470865,0.270249,1.0,0.452479,0.379214,1.0,0.453995,0.335704,1.0,0.461068,0.299644,1.0,0.465059,0.307991,1.0,0.465294,0.322597,1.0,0.459425,0.307156,1.0,0.463885,0.319258,1.0,0.463181,0.329692,1.0,0.453321,0.312164,1.0,0.458251,0.333031,1.0,0.459190,0.333448,1.0,0.449096,0.316755,1.0,0.454495,0.334282,1.0,0.455669,0.333866,1.0,0.446044,0.323015,1.0,0.450504,0.335118,1.0,0.451678,0.335118,1.0,0.516843,0.255250,1.0,0.533667,0.251113,1.0,0.530651,0.335789,1.0,0.516872,0.254010,1.0,0.512326,0.239202,1.0,0.495297,0.262516,1.0,0.492948,0.262516,1.0,0.494514,0.236767,1.0,0.489425,0.238158,1.0,0.486489,0.239898,1.0,0.499211,0.238855,1.0,0.492948,0.256601,1.0,0.495101,0.263560,1.0,0.503713,0.240942,1.0,0.497645,0.257644,1.0,0.499211,0.264256,1.0,0.508215,0.245118,1.0,0.502930,0.258689,1.0,0.503909,0.259732,1.0,0.461701,0.447462,1.0,0.461701,0.447462,1.0,0.461698,0.632696,1.0,0.484605,0.752570,1.0,0.484605,0.752570,1.0,0.507606,0.450099,1.0,0.507606,0.450099,1.0,0.496947,0.643515,1.0,0.521422,0.758073,1.0,0.521422,0.758073,1.0
0.486226,0.444609,1.0,0.494207,0.299610,1.0,0.491546,0.347943,1.0,0.496867,0.251277,1.0,0.486210,0.169413,1.0,0.486262,0.161245,1.0,0.486262,0.161245,1.0,0.472455,0.163903,1.0,0.472455,0.163903,1.0,0.480034,0.256698,1.0,0.463200,0.262119,1.0,0.446370,0.373798,1.0,0.449395,0.319364,1.0,0.458267,0.316246,1.0,0.463277,0.303521,1.0,0.463754,0.309035,1.0,0.454927,0.295463,1.0,0.453733,0.292919,1.0,0.452779,0.294191,1.0,0.451109,0.298856,1.0,0.449439,0.301825,1.0,0.455404,0.318791,1.0,0.447530,0.304794,1.0,0.447292,0.305643,1.0,0.451348,0.317943,1.0,0.444190,0.310732,1.0,0.445145,0.312853,1.0,0.447769,0.319215,1.0,0.513759,0.249812,1.0,0.530651,0.248346,1.0,0.533786,0.341216,1.0,0.516876,0.267464,1.0,0.503999,0.249952,1.0,0.492865,0.251999,1.0,0.484609,0.256778,1.0,0.492289,0.253706,1.0,0.490561,0.271454,1.0,0.490369,0.277256,1.0,0.495360,0.257802,1.0,0.490945,0.272136,1.0,0.490753,0.279304,1.0,0.498816,0.260531,1.0,0.494976,0.273502,1.0,0.494016,0.278962,1.0,0.502656,0.263604,1.0,0.499392,0.271454,1.0,0.498240,0.275891,1.0,0.464728,0.444605,1.0,0.464728,0.444605,1.0,0.466256,0.630026,1.0,0.483166,0.749977,1.0,0.483166,0.749977,1.0,0.507724,0.444614,1.0,0.507724,0.444614,1.0,0.496868,0.635464,1.0,0.521427,0.752664,1.0,0.521427,0.752664,1.0
0.488468,0.436495,1.0,0.491386,0.295395,1.0,0.490413,0.342428,1.0,0.492359,0.248361,1.0,0.483906,0.163921,1.0,0.487760,0.144918,1.0,0.487760,0.144918,1.0,0.472375,0.144893,1.0,0.472375,0.144893,1.0,0.475494,0.249812,1.0,0.458629,0.251263,1.0,0.440194,0.360217,1.0,0.447897,0.313969,1.0,0.453257,0.314569,1.0,0.457014,0.290360,1.0,0.462883,0.299543,1.0,0.447388,0.289526,1.0,0.446214,0.287021,1.0,0.449266,0.287021,1.0,0.443396,0.302465,1.0,0.446448,0.294117,1.0,0.452787,0.301630,1.0,0.440109,0.309978,1.0,0.445744,0.300378,1.0,0.451379,0.307056,1.0,0.441753,0.316656,1.0,0.445274,0.306638,1.0,0.449266,0.309978,1.0,0.508442,0.242955,1.0,0.524526,0.237549,1.0,0.542943,0.341115,1.0,0.509222,0.273046,1.0,0.497647,0.270506,1.0,0.488458,0.270906,1.0,0.479717,0.276085,1.0,0.485096,0.290829,1.0,0.484199,0.299594,1.0,0.482406,0.302782,1.0,0.488234,0.293219,1.0,0.486889,0.296806,1.0,0.486665,0.292422,1.0,0.491596,0.293219,1.0,0.490251,0.295610,1.0,0.490475,0.290031,1.0,0.494958,0.291625,1.0,0.492268,0.293219,1.0,0.493613,0.290430,1.0,0.467769,0.436514,1.0,0.467769,0.436514,1.0,0.469346,0.624622,1.0,0.483200,0.749977,1.0,0.483200,0.749977,1.0,0.509166,0.436477,1.0,0.509166,0.436477,1.0,0.496872,0.624492,1.0,0.519911,0.749803,1.0,0.519911,0.749803,1.0
0.488457,0.431068,1.0,0.489088,0.290022,1.0,0.488877,0.337037,1.0,0.489298,0.243006,1.0,0.481597,0.157161,1.0,0.487746,0.139396,1.0,0.487746,0.139396,1.0,0.472395,0.139431,1.0,0.472395,0.139431,1.0,0.473178,0.245692,1.0,0.457058,0.248378,1.0,0.435579,0.357331,1.0,0.447942,0.316596,1.0,0.447257,0.284095,1.0,0.458216,0.288755,1.0,0.463933,0.297649,1.0,0.452736,0.288331,1.0,0.460598,0.293837,1.0,0.464172,0.300613,1.0,0.449163,0.293837,1.0,0.454881,0.297649,1.0,0.458692,0.305272,1.0,0.446781,0.298919,1.0,0.449163,0.302307,1.0,0.456072,0.310778,1.0,0.440348,0.303578,1.0,0.448448,0.308660,1.0,0.452260,0.312895,1.0,0.506144,0.237552,1.0,0.522990,0.232098,1.0,0.547547,0.338275,1.0,0.509181,0.294705,1.0,0.500073,0.288749,1.0,0.486096,0.291276,1.0,0.477094,0.300963,1.0,0.486333,0.291276,1.0,0.485385,0.292119,1.0,0.482306,0.295908,1.0,0.490360,0.296330,1.0,0.486570,0.303490,1.0,0.483728,0.312755,1.0,0.492967,0.301805,1.0,0.489887,0.306859,1.0,0.487992,0.311913,1.0,0.495809,0.306438,1.0,0.494388,0.310228,1.0,0.491071,0.311492,1.0,0.467768,0.431063,1.0,0.467768,0.431063,1.0,0.470924,0.619049,1.0,0.483183,0.747218,1.0,0.483183,0.747218,1.0,0.509146,0.431073,1.0,0.509146,0.431073,1.0,0.496907,0.616378,1.0,0.518362,0.733588,1.0,0.518362,0.733588,1.0
0.489273,0.425609,1.0,0.487010,0.280547,1.0,0.487764,0.328901,1.0,0.486255,0.232194,1.0,0.481591,0.149019,1.0,0.489285,0.134030,1.0,0.489285,0.134030,1.0,0.472429,0.133943,1.0,0.472429,0.133943,1.0,0.470130,0.237598,1.0,0.454004,0.243003,1.0,0.434011,0.354654,1.0,0.454004,0.322031,1.0,0.461328,0.310406,1.0,0.471241,0.306107,1.0,0.470516,0.309117,1.0,0.463020,0.298370,1.0,0.464955,0.302239,1.0,0.469065,0.312985,1.0,0.457701,0.302239,1.0,0.463262,0.312125,1.0,0.465196,0.318573,1.0,0.453832,0.306537,1.0,0.458184,0.315994,1.0,0.461569,0.322871,1.0,0.449964,0.314274,1.0,0.453591,0.321152,1.0,0.457459,0.326310,1.0,0.503865,0.230780,1.0,0.521474,0.229366,1.0,0.553615,0.332872,1.0,0.507671,0.316554,1.0,0.500805,0.315071,1.0,0.488119,0.315939,1.0,0.480068,0.321144,1.0,0.482508,0.315939,1.0,0.475677,0.325915,1.0,0.477872,0.328517,1.0,0.485679,0.322011,1.0,0.479580,0.334155,1.0,0.483728,0.335890,1.0,0.489339,0.328083,1.0,0.483240,0.339794,1.0,0.487387,0.340661,1.0,0.492754,0.334589,1.0,0.487631,0.344564,1.0,0.489827,0.346299,1.0,0.469286,0.425615,1.0,0.469286,0.425615,1.0,0.472443,0.616302,1.0,0.483165,0.747161,1.0,0.483165,0.747161,1.0,0.509260,0.425603,1.0,0.509260,0.425603,1.0,0.496999,0.610873,1.0,0.516875,0.730967,1.0,0.516875,0.730967,1.0
0.489273,0.425609,1.0,0.487010,0.280547,1.0,0.487764,0.328901,1.0,0.486255,0.232194,1.0,0.481591,0.149019,1.0,0.489285,0.134030,1.0,0.489285,0.134030,1.0,0.472429,0.133943,1.0,0.472429,0.133943,1.0,0.470130,0.237598,1.0,0.454004,0.243003,1.0,0.434011,0.354654,1.0,0.454004,0.322031,1.0,0.461328,0.310406,1.0,0.471241,0.306107,1.0,0.470516,0.309117,1.0,0.463020,0.298370,1.0,0.464955,0.302239,1.0,0.469065,0.312985,1.0,0.457701,0.302239,1.0,0.463262,0.312125,1.0,0.465196,0.318573,1.0,0.453832,0.306537,1.0,0.458184,0.315994,1.0,0.461569,0.322871,1.0,0.449964,0.314274,1.0,0.453591,0.321152,1.0,0.457459,0.326310,1.0,0.503865,0.230780,1.0,0.521474,0.229366,1.0,0.553615,0.332872,1.0,0.507671,0.316554,1.0,0.500805,0.315071,1.0,0.488119,0.315939,1.0,0.480068,0.321144,1.0,0.482508,0.315939,1.0,0.475677,0.325915,1.0,0.477872,0.328517,1.0,0.485679,0.322011,1.0,0.479580,0.334155,1.0,0.483728,0.335890,1.0,0.489339,0.328083,1.0,0.483240,0.339794,1.0,0.487387,0.340661,1.0,0.492754,0.334589,1.0,0.487631,0.344564,1.0,0.489827,0.346299,1.0,0.469286,0.425615,1.0,0.469286,0.425615,1.0,0.472443,0.616302,1.0,0.483165,0.747161,1.0,0.483165,0.747161,1.0,0.509260,0.425603,1.0,0.509260,0.425603,1.0,0.496999,0.610873,1.0,0.516875,0.730967,1.0,0.516875,0.730967,1.0
0.489996,0.427010,1.0,0.487150,0.280862,1.0,0.488099,0.329578,1.0,0.486202,0.232146,1.0,0.480881,0.143623,1.0,0.492301,0.123180,1.0,0.492301,0.123180,1.0,0.472460,0.123119,1.0,0.472460,0.123119,1.0,0.467832,0.236235,1.0,0.449463,0.240324,1.0,0.431011,0.346537,1.0,0.458586,0.335769,1.0,0.462868,0.327322,1.0,0.473420,0.323244,1.0,0.478696,0.334662,1.0,0.471585,0.318351,1.0,0.479384,0.336701,1.0,0.479384,0.342003,1.0,0.465162,0.322836,1.0,0.475484,0.342410,1.0,0.474108,0.346081,1.0,0.460574,0.328953,1.0,0.471585,0.346896,1.0,0.470897,0.349344,1.0,0.458051,0.337925,1.0,0.468373,0.350158,1.0,0.468144,0.351790,1.0,0.503856,0.230742,1.0,0.521510,0.229337,1.0,0.553635,0.327474,1.0,0.509253,0.349263,1.0,0.501869,0.345206,1.0,0.499760,0.378114,1.0,0.497418,0.378531,1.0,0.480782,0.353120,1.0,0.477735,0.339791,1.0,0.488045,0.385611,1.0,0.481953,0.366033,1.0,0.483828,0.371449,1.0,0.485233,0.378946,1.0,0.489451,0.381446,1.0,0.488280,0.377697,1.0,0.486171,0.378531,1.0,0.491794,0.381030,1.0,0.480547,0.335626,1.0,0.488280,0.387278,1.0,0.469286,0.428327,1.0,0.469286,0.428327,1.0,0.472457,0.613601,1.0,0.483152,0.747138,1.0,0.483152,0.747138,1.0,0.510706,0.425694,1.0,0.510706,0.425694,1.0,0.501536,0.600160,1.0,0.515332,0.730863,1.0,0.515332,0.730863,1.0
0.488519,0.428381,1.0,0.486767,0.279219,1.0,0.487351,0.328940,1.0,0.486183,0.229498,1.0,0.480865,0.142212,1.0,0.490828,0.120486,1.0,0.490828,0.120486,1.0,0.472473,0.120415,1.0,0.472473,0.120415,1.0,0.467824,0.232196,1.0,0.449466,0.234894,1.0,0.424943,0.343795,1.0,0.461668,0.360233,1.0,0.467251,0.357051,1.0,0.476692,0.354468,1.0,0.478386,0.357481,1.0,0.485647,0.371252,1.0,0.483953,0.375555,1.0,0.479112,0.385452,1.0,0.482501,0.379858,1.0,0.479838,0.384161,1.0,0.476933,0.385452,1.0,0.480080,0.385452,1.0,0.476449,0.384161,1.0,0.476449,0.384592,1.0,0.477418,0.390616,1.0,0.473060,0.384592,1.0,0.474513,0.387604,1.0,0.503839,0.228124,1.0,0.521495,0.226749,1.0,0.555151,0.322045,1.0,0.515356,0.371119,1.0,0.505010,0.362957,1.0,0.492472,0.360069,1.0,0.477844,0.381533,1.0,0.481327,0.385248,1.0,0.487364,0.381533,1.0,0.485506,0.391853,1.0,0.492008,0.387312,1.0,0.492008,0.392266,1.0,0.486203,0.403823,1.0,0.497116,0.394743,1.0,0.493865,0.401759,1.0,0.489686,0.409603,1.0,0.503153,0.401759,1.0,0.498741,0.410016,1.0,0.495723,0.412905,1.0,0.467797,0.428377,1.0,0.467797,0.428377,1.0,0.472419,0.608163,1.0,0.483119,0.744470,1.0,0.483119,0.744470,1.0,0.509240,0.428385,1.0,0.509240,0.428385,1.0,0.507630,0.602751,1.0,0.513825,0.738984,1.0,0.513825,0.738984,1.0
0.487001,0.425593,1.0,0.486387,0.280479,1.0,0.486591,0.328850,1.0,0.486182,0.232108,1.0,0.480875,0.142313,1.0,0.492318,0.120491,1.0,0.492318,0.120491,1.0,0.472470,0.120438,1.0,0.472470,0.120438,1.0,0.467073,0.236175,1.0,0.447965,0.240243,1.0,0.423342,0.349339,1.0,0.466266,0.390133,1.0,0.477762,0.393677,1.0,0.490376,0.414376,1.0,0.496197,0.432488,1.0,0.489163,0.414807,1.0,0.494014,0.424726,1.0,0.496925,0.433351,1.0,0.483826,0.418257,1.0,0.486737,0.429901,1.0,0.484069,0.427744,1.0,0.478004,0.419982,1.0,0.482856,0.434213,1.0,0.481158,0.430331,1.0,0.472183,0.420414,1.0,0.477519,0.434644,1.0,0.477519,0.432056,1.0,0.503846,0.230718,1.0,0.521510,0.229328,1.0,0.555120,0.335508,1.0,0.521458,0.403681,1.0,0.510855,0.406512,1.0,0.497530,0.415004,1.0,0.493507,0.421261,1.0,0.496021,0.442269,1.0,0.488730,0.448079,1.0,0.490993,0.441374,1.0,0.500044,0.445844,1.0,0.491495,0.455230,1.0,0.491244,0.450760,1.0,0.503564,0.446738,1.0,0.498032,0.462381,1.0,0.497278,0.459253,1.0,0.506832,0.449867,1.0,0.505072,0.456124,1.0,0.503312,0.459253,1.0,0.464772,0.428303,1.0,0.464772,0.428303,1.0,0.472392,0.610863,1.0,0.483122,0.747148,1.0,0.483122,0.747148,1.0,0.509230,0.422882,1.0,0.509230,0.422882,1.0,0.509133,0.602830,1.0,0.516836,0.749861,1.0,0.516836,0.749861,1.0
0.487002,0.435111,1.0,0.486422,0.286973,1.0,0.486615,0.336352,1.0,0.486229,0.237594,1.0,0.480864,0.145000,1.0,0.493811,0.125788,1.0,0.493811,0.125788,1.0,0.472484,0.123192,1.0,0.472484,0.123192,1.0,0.467808,0.241649,1.0,0.449386,0.245704,1.0,0.423325,0.357409,1.0,0.461689,0.422929,1.0,0.471105,0.424587,1.0,0.482834,0.440557,1.0,0.487076,0.456529,1.0,0.481087,0.444107,1.0,0.490320,0.469838,1.0,0.487825,0.470725,1.0,0.476346,0.449874,1.0,0.485080,0.476936,1.0,0.484581,0.478711,1.0,0.470856,0.452093,1.0,0.475098,0.467619,1.0,0.476096,0.473387,1.0,0.465615,0.452980,1.0,0.467362,0.463627,1.0,0.469358,0.466732,1.0,0.504609,0.234843,1.0,0.522990,0.232093,1.0,0.549083,0.338347,1.0,0.535276,0.436469,1.0,0.521385,0.495219,1.0,0.520191,0.494794,1.0,0.517798,0.493093,1.0,0.525214,0.437802,1.0,0.525932,0.439503,1.0,0.525932,0.440354,1.0,0.520191,0.450136,1.0,0.521625,0.452263,1.0,0.525453,0.449711,1.0,0.518755,0.448435,1.0,0.520669,0.451412,1.0,0.525453,0.442055,1.0,0.525932,0.441205,1.0,0.534068,0.436526,1.0,0.510621,0.494794,1.0,0.464750,0.433747,1.0,0.464750,0.433747,1.0,0.470942,0.613663,1.0,0.483102,0.747196,1.0,0.483102,0.747196,1.0,0.509253,0.436475,1.0,0.509253,0.436475,1.0,0.509205,0.613579,1.0,0.518337,0.758109,1.0,0.518337,0.758109,1.0
0.490077,0.439208,1.0,0.487206,0.290023,1.0,0.488163,0.339751,1.0,0.486248,0.240294,1.0,0.482373,0.153049,1.0,0.493887,0.128538,1.0,0.493887,0.128538,1.0,0.473973,0.128527,1.0,0.473973,0.128527,1.0,0.467862,0.244319,1.0,0.449475,0.248344,1.0,0.423345,0.352008,1.0,0.455519,0.431003,1.0,0.464730,0.440402,1.0,0.472934,0.451654,1.0,0.472466,0.466656,1.0,0.470591,0.461238,1.0,0.472700,0.474991,1.0,0.473404,0.484992,1.0,0.466606,0.464989,1.0,0.469184,0.478741,1.0,0.470356,0.488326,1.0,0.461214,0.465822,1.0,0.461917,0.480407,1.0,0.463089,0.487493,1.0,0.455822,0.464989,1.0,0.455822,0.472490,1.0,0.456291,0.477074,1.0,0.503887,0.236199,1.0,0.521526,0.232104,1.0,0.545995,0.343813,1.0,0.552094,0.441972,1.0,0.548417,0.456334,1.0,0.551141,0.456774,1.0,0.553120,0.448418,1.0,0.550891,0.461612,1.0,0.551385,0.465569,1.0,0.557078,0.472167,1.0,0.549161,0.480962,1.0,0.550891,0.483601,1.0,0.550646,0.484041,1.0,0.545448,0.494595,1.0,0.549161,0.495915,1.0,0.547677,0.496794,1.0,0.544953,0.497234,1.0,0.548911,0.502951,1.0,0.546193,0.505150,1.0,0.469359,0.439215,1.0,0.469359,0.439215,1.0,0.470902,0.616371,1.0,0.483096,0.749867,1.0,0.483096,0.749867,1.0,0.510794,0.439201,1.0,0.510794,0.439201,1.0,0.509253,0.613635,1.0,0.518340,0.766268,1.0,0.518340,0.766268,1.0
0.490077,0.439208,1.0,0.487206,0.290023,1.0,0.488163,0.339751,1.0,0.486248,0.240294,1.0,0.482373,0.153049,1.0,0.493887,0.128538,1.0,0.493887,0.128538,1.0,0.473973,0.128527,1.0,0.473973,0.128527,1.0,0.467862,0.244319,1.0,0.449475,0.248344,1.0,0.423345,0.352008,1.0,0.455519,0.431003,1.0,0.464730,0.440402,1.0,0.472934,0.451654,1.0,0.472466,0.466656,1.0,0.470591,0.461238,1.0,0.472700,0.474991,1.0,0.473404,0.484992,1.0,0.466606,0.464989,1.0,0.469184,0.478741,1.0,0.470356,0.488326,1.0,0.461214,0.465822,1.0,0.461917,0.480407,1.0,0.463089,0.487493,1.0,0.455822,0.464989,1.0,0.455822,0.472490,1.0,0.456291,0.477074,1.0,0.503887,0.236199,1.0,0.521526,0.232104,1.0,0.545995,0.343813,1.0,0.552094,0.441972,1.0,0.548417,0.456334,1.0,0.551141,0.456774,1.0,0.553120,0.448418,1.0,0.550891,0.461612,1.0,0.551385,0.465569,1.0,0.557078,0.472167,1.0,0.549161,0.480962,1.0,0.550891,0.483601,1.0,0.550646,0.484041,1.0,0.545448,0.494595,1.0,0.549161,0.495915,1.0,0.547677,0.496794,1.0,0.544953,0.497234,1.0,0.548911,0.502951,1.0,0.546193,0.505150,1.0,0.469359,0.439215,1.0,0.469359,0.439215,1.0,0.470902,0.616371,1.0,0.483096,0.749867,1.0,0.483096,0.749867,1.0,0.510794,0.439201,1.0,0.510794,0.439201,1.0,0.509253,0.613635,1.0,0.518340,0.766268,1.0,0.518340,0.766268,1.0
0.490029,0.439218,1.0,0.489459,0.292056,1.0,0.489649,0.341110,1.0,0.489268,0.243002,1.0,0.486958,0.150360,1.0,0.495370,0.123127,1.0,0.495370,0.123127,1.0,0.475472,0.125786,1.0,0.475472,0.125786,1.0,0.470877,0.245668,1.0,0.452485,0.248334,1.0,0.423300,0.352032,1.0,0.446264,0.422884,1.0,0.451928,0.423720,1.0,0.460303,0.428399,1.0,0.467481,0.435631,1.0,0.459824,0.445840,1.0,0.464131,0.459452,1.0,0.467003,0.470937,1.0,0.456235,0.451795,1.0,0.460781,0.466683,1.0,0.464370,0.478593,1.0,0.452885,0.454347,1.0,0.458149,0.465832,1.0,0.462217,0.477744,1.0,0.450493,0.454347,1.0,0.455517,0.463281,1.0,0.458628,0.469661,1.0,0.506900,0.237611,1.0,0.524531,0.232220,1.0,0.546042,0.335756,1.0,0.562880,0.428355,1.0,0.562516,0.443526,1.0,0.564339,0.450814,1.0,0.565479,0.454053,1.0,0.560469,0.440691,1.0,0.565021,0.453648,1.0,0.566391,0.452839,1.0,0.565250,0.453648,1.0,0.566391,0.455268,1.0,0.567302,0.454458,1.0,0.570260,0.467010,1.0,0.568438,0.466606,1.0,0.568214,0.467416,1.0,0.576411,0.475514,1.0,0.568667,0.451624,1.0,0.568438,0.470250,1.0,0.469321,0.439206,1.0,0.469321,0.439206,1.0,0.470923,0.618957,1.0,0.483072,0.749818,1.0,0.483072,0.749818,1.0,0.510738,0.439230,1.0,0.510738,0.439230,1.0,0.510712,0.613626,1.0,0.518336,0.768968,1.0,0.518336,0.768968,1.0
0.490773,0.429697,1.0,0.493082,0.283544,1.0,0.492312,0.332261,1.0,0.493852,0.234826,1.0,0.489281,0.143544,1.0,0.496917,0.120356,1.0,0.496917,0.120356,1.0,0.481608,0.120378,1.0,0.481608,0.120378,1.0,0.475467,0.237560,1.0,0.457082,0.240294,1.0,0.424947,0.338333,1.0,0.432577,0.382103,1.0,0.433924,0.390719,1.0,0.433690,0.419025,1.0,0.442587,0.419442,1.0,0.432753,0.411949,1.0,0.446099,0.424020,1.0,0.447270,0.428182,1.0,0.445865,0.423188,1.0,0.450314,0.414863,1.0,0.449611,0.437341,1.0,0.430178,0.412781,1.0,0.450548,0.411949,1.0,0.447270,0.434843,1.0,0.429943,0.411949,1.0,0.429241,0.420274,1.0,0.426197,0.426518,1.0,0.510733,0.232158,1.0,0.527615,0.229490,1.0,0.550599,0.313920,1.0,0.572047,0.384823,1.0,0.586089,0.396178,1.0,0.571380,0.388264,1.0,0.567703,0.403404,1.0,0.570026,0.421985,1.0,0.567510,0.415447,1.0,0.568865,0.408221,1.0,0.570604,0.421985,1.0,0.567510,0.421297,1.0,0.569250,0.424394,1.0,0.570802,0.422673,1.0,0.569641,0.428523,1.0,0.570604,0.425770,1.0,0.572542,0.426458,1.0,0.569641,0.429556,1.0,0.570411,0.431276,1.0,0.470780,0.428319,1.0,0.470780,0.428319,1.0,0.470866,0.619012,1.0,0.483047,0.749873,1.0,0.483047,0.749873,1.0,0.510767,0.431074,1.0,0.510767,0.431074,1.0,0.510719,0.613599,1.0,0.518345,0.768917,1.0,0.518345,0.768917,1.0
0.491520,0.426992,1.0,0.494424,0.280807,1.0,0.493456,0.329535,1.0,0.495392,0.232079,1.0,0.490836,0.146240,1.0,0.498506,0.117755,1.0,0.498506,0.117755,1.0,0.483171,0.120294,1.0,0.483171,0.120294,1.0,0.476992,0.233470,1.0,0.458592,0.234861,1.0,0.435640,0.332953,1.0,0.420270,0.335700,1.0,0.396564,0.330371,1.0,0.395467,0.336218,1.0,0.393275,0.334658,1.0,0.398317,0.338556,1.0,0.400071,0.340894,1.0,0.398536,0.344012,1.0,0.403140,0.338166,1.0,0.402044,0.340505,1.0,0.400290,0.342843,1.0,0.399194,0.338945,1.0,0.406429,0.338945,1.0,0.402044,0.354145,1.0,0.417829,0.320628,1.0,0.416074,0.321797,1.0,0.397440,0.340894,1.0,0.513779,0.230694,1.0,0.532167,0.229310,1.0,0.556750,0.313937,1.0,0.582833,0.335741,1.0,0.602453,0.332105,1.0,0.586531,0.359358,1.0,0.587318,0.359358,1.0,0.586141,0.358310,1.0,0.594391,0.347828,1.0,0.598911,0.351671,1.0,0.588104,0.346780,1.0,0.594000,0.347129,1.0,0.594589,0.346780,1.0,0.587708,0.346431,1.0,0.591839,0.343635,1.0,0.592427,0.341888,1.0,0.579651,0.343984,1.0,0.584568,0.344334,1.0,0.595375,0.369491,1.0,0.470782,0.425684,1.0,0.470782,0.425684,1.0,0.467791,0.619061,1.0,0.480046,0.749838,1.0,0.480046,0.749838,1.0,0.512258,0.428300,1.0,0.512258,0.428300,1.0,0.510749,0.616343,1.0,0.518344,0.768917,1.0,0.518344,0.768917,1.0
0.493114,0.425641,1.0,0.494876,0.278539,1.0,0.494289,0.327573,1.0,0.495464,0.229505,1.0,0.492350,0.142235,1.0,0.501540,0.117549,1.0,0.501540,0.117549,1.0,0.484669,0.117666,1.0,0.484669,0.117666,1.0,0.477058,0.230833,1.0,0.458652,0.232161,1.0,0.437186,0.322073,1.0,0.409553,0.286554,1.0,0.405473,0.286656,1.0,0.395194,0.255124,1.0,0.387938,0.247242,1.0,0.395395,0.258707,1.0,0.395798,0.259066,1.0,0.394388,0.260141,1.0,0.394992,0.277698,1.0,0.391767,0.271249,1.0,0.389953,0.276266,1.0,0.394992,0.278773,1.0,0.394388,0.274474,1.0,0.393984,0.276982,1.0,0.390558,0.290240,1.0,0.385318,0.247242,1.0,0.390155,0.291315,1.0,0.513852,0.229385,1.0,0.532240,0.229265,1.0,0.558271,0.311077,1.0,0.591990,0.286631,1.0,0.607193,0.263393,1.0,0.598464,0.264772,1.0,0.586052,0.288219,1.0,0.587604,0.285460,1.0,0.588182,0.289943,1.0,0.587797,0.291667,1.0,0.593229,0.291667,1.0,0.597688,0.293391,1.0,0.596328,0.296149,1.0,0.597688,0.293046,1.0,0.599047,0.293736,1.0,0.599240,0.294770,1.0,0.601760,0.293736,1.0,0.599630,0.295805,1.0,0.599630,0.296149,1.0,0.470873,0.425608,1.0,0.470873,0.425608,1.0,0.461707,0.616380,1.0,0.475471,0.741752,1.0,0.475471,0.741752,1.0,0.515354,0.425673,1.0,0.515354,0.425673,1.0,0.515305,0.618950,1.0,0.518404,0.768994,1.0,0.518404,0.768994,1.0
0.493902,0.424254,1.0,0.496154,0.278122,1.0,0.495403,0.326832,1.0,0.496905,0.229411,1.0,0.494661,0.140756,1.0,0.504615,0.114844,1.0,0.504615,0.114844,1.0,0.484756,0.114966,1.0,0.484756,0.114966,1.0,0.478521,0.229460,1.0,0.460136,0.229508,1.0,0.437132,0.313762,1.0,0.408043,0.240292,1.0,0.405241,0.235456,1.0,0.392881,0.208722,1.0,0.408125,0.240949,1.0,0.409567,0.235456,1.0,0.408125,0.240949,1.0,0.390409,0.229231,1.0,0.403593,0.236921,1.0,0.398031,0.235090,1.0,0.391027,0.237654,1.0,0.404005,0.236189,1.0,0.400915,0.238019,1.0,0.394735,0.241316,1.0,0.408331,0.235456,1.0,0.407713,0.239851,1.0,0.405653,0.250837,1.0,0.514567,0.228080,1.0,0.532229,0.226748,1.0,0.564365,0.294681,1.0,0.593516,0.245745,1.0,0.614677,0.216246,1.0,0.611380,0.246204,1.0,0.609547,0.246530,1.0,0.612479,0.241319,1.0,0.608630,0.238389,1.0,0.610281,0.241645,1.0,0.607896,0.234481,1.0,0.607896,0.235458,1.0,0.608630,0.240343,1.0,0.606797,0.234156,1.0,0.607714,0.234806,1.0,0.609912,0.234156,1.0,0.590313,0.236435,1.0,0.600938,0.247181,1.0,0.601854,0.248808,1.0,0.470919,0.422946,1.0,0.470919,0.422946,1.0,0.460222,0.616383,1.0,0.472437,0.744486,1.0,0.472437,0.744486,1.0,0.516885,0.425561,1.0,0.516885,0.425561,1.0,0.516859,0.619031,1.0,0.519840,0.768993,1.0,0.519840,0.768993,1.0
0.493902,0.424254,1.0,0.496154,0.278122,1.0,0.495403,0.326832,1.0,0.496905,0.229411,1.0,0.494661,0.140756,1.0,0.504615,0.114844,1.0,0.504615,0.114844,1.0,0.484756,0.114966,1.0,0.484756,0.114966,1.0,0.478521,0.229460,1.0,0.460136,0.229508,1.0,0.437132,0.313762,1.0,0.408043,0.240292,1.0,0.405241,0.235456,1.0,0.392881,0.208722,1.0,0.408125,0.240949,1.0,0.409567,0.235456,1.0,0.408125,0.240949,1.0,0.390409,0.229231,1.0,0.403593,0.236921,1.0,0.398031,0.235090,1.0,0.391027,0.237654,1.0,0.404005,0.236189,1.0,0.400915,0.238019,1.0,0.394735,0.241316,1.0,0.408331,0.235456,1.0,0.407713,0.239851,1.0,0.405653,0.250837,1.0,0.514567,0.228080,1.0,0.532229,0.226748,1.0,0.564365,0.294681,1.0,0.593516,0.245745,1.0,0.614677,0.216246,1.0,0.611380,0.246204,1.0,0.609547,0.246530,1.0,0.612479,0.241319,1.0,0.608630,0.238389,1.0,0.610281,0.241645,1.0,0.607896,0.234481,1.0,0.607896,0.235458,1.0,0.608630,0.240343,1.0,0.606797,0.234156,1.0,0.607714,0.234806,1.0,0.609912,0.234156,1.0,0.590313,0.236435,1.0,0.600938,0.247181,1.0,0.601854,0.248808,1.0,0.470919,0.422946,1.0,0.470919,0.422946,1.0,0.460222,0.616383,1.0,0.472437,0.744486,1.0,0.472437,0.744486,1.0,0.516885,0.425561,1.0,0.516885,0.425561,1.0,0.516859,0.619031,1.0,0.519840,0.768993,1.0,0.519840,0.768993,1.0
0.494649,0.425631,1.0,0.496410,0.276491,1.0,0.495823,0.326204,1.0,0.496997,0.226778,1.0,0.498432,0.140718,1.0,0.506114,0.109514,1.0,0.506114,0.109514,1.0,0.486222,0.112233,1.0,0.486222,0.112233,1.0,0.478604,0.228056,1.0,0.460211,0.229335,1.0,0.435617,0.297606,1.0,0.411034,0.210320,1.0,0.378974,0.160827,1.0,0.409413,0.207380,1.0,0.411651,0.209767,1.0,0.409636,0.207380,1.0,0.411651,0.210165,1.0,0.411651,0.209767,1.0,0.394641,0.196239,1.0,0.394417,0.194249,1.0,0.399341,0.204992,1.0,0.409413,0.205390,1.0,0.394417,0.195443,1.0,0.401579,0.205788,1.0,0.411651,0.207380,1.0,0.411203,0.210562,1.0,0.403370,0.207777,1.0,0.515369,0.226715,1.0,0.533740,0.226653,1.0,0.570495,0.286596,1.0,0.593490,0.207694,1.0,0.592109,0.198680,1.0,0.616766,0.191797,1.0,0.606984,0.170789,1.0,0.615135,0.192522,1.0,0.610042,0.172962,1.0,0.608208,0.176584,1.0,0.610651,0.191073,1.0,0.606984,0.186726,1.0,0.609839,0.189262,1.0,0.613302,0.189624,1.0,0.606375,0.189624,1.0,0.604130,0.191435,1.0,0.592313,0.197593,1.0,0.592521,0.197956,1.0,0.602094,0.172600,1.0,0.470908,0.425596,1.0,0.470908,0.425596,1.0,0.463237,0.619004,1.0,0.470877,0.752584,1.0,0.470877,0.752584,1.0,0.518390,0.425665,1.0,0.518390,0.425665,1.0,0.516866,0.619098,1.0,0.518414,0.771614,1.0,0.518414,0.771614,1.0
0.494659,0.425584,1.0,0.497497,0.276329,1.0,0.496551,0.326081,1.0,0.498444,0.226577,1.0,0.499217,0.138056,1.0,0.506159,0.106736,1.0,0.506159,0.106736,1.0,0.486252,0.109452,1.0,0.486252,0.109452,1.0,0.480057,0.226579,1.0,0.461670,0.226581,1.0,0.435566,0.292170,1.0,0.418772,0.191181,1.0,0.419749,0.172449,1.0,0.413955,0.159143,1.0,0.408884,0.140685,1.0,0.400433,0.141114,1.0,0.407194,0.141114,1.0,0.405987,0.161719,1.0,0.402123,0.159143,1.0,0.402606,0.169444,1.0,0.402848,0.172879,1.0,0.395604,0.161719,1.0,0.400916,0.170303,1.0,0.404055,0.171162,1.0,0.416128,0.190478,1.0,0.400192,0.173308,1.0,0.403090,0.183181,1.0,0.516120,0.226551,1.0,0.533797,0.226525,1.0,0.570542,0.273042,1.0,0.587375,0.185682,1.0,0.585516,0.176426,1.0,0.600760,0.149326,1.0,0.601182,0.144433,1.0,0.605208,0.143304,1.0,0.604151,0.140669,1.0,0.602245,0.150456,1.0,0.599703,0.166264,1.0,0.601182,0.165887,1.0,0.597375,0.169275,1.0,0.590385,0.176426,1.0,0.604151,0.165887,1.0,0.597583,0.170028,1.0,0.586786,0.176426,1.0,0.588693,0.178684,1.0,0.602453,0.182448,1.0,0.470913,0.425552,1.0,0.470913,0.425552,1.0,0.469313,0.619023,1.0,0.467807,0.766229,1.0,0.467807,0.766229,1.0,0.518404,0.425617,1.0,0.518404,0.425617,1.0,0.518343,0.619186,1.0,0.518420,0.771762,1.0,0.518420,0.771762,1.0
0.494605,0.424257,1.0,0.496412,0.274009,1.0,0.495810,0.324092,1.0,0.497015,0.223927,1.0,0.498476,0.132610,1.0,0.506146,0.101330,1.0,0.506146,0.101330,1.0,0.486253,0.104018,1.0,0.486253,0.104018,1.0,0.479362,0.222590,1.0,0.461710,0.221254,1.0,0.435624,0.292036,1.0,0.429466,0.185870,1.0,0.427433,0.175633,1.0,0.430615,0.145616,1.0,0.428167,0.129955,1.0,0.413240,0.160842,1.0,0.401494,0.164322,1.0,0.402718,0.165193,1.0,0.409080,0.149096,1.0,0.395866,0.159102,1.0,0.390727,0.159102,1.0,0.405409,0.135610,1.0,0.396111,0.153881,1.0,0.392195,0.154752,1.0,0.402963,0.121254,1.0,0.395132,0.133000,1.0,0.394153,0.135175,1.0,0.515385,0.223891,1.0,0.533755,0.223855,1.0,0.568979,0.272902,1.0,0.581255,0.177631,1.0,0.578359,0.160932,1.0,0.580604,0.168104,1.0,0.579255,0.169299,1.0,0.580828,0.169299,1.0,0.596510,0.126273,1.0,0.587995,0.163323,1.0,0.596734,0.146193,1.0,0.598083,0.150973,1.0,0.600771,0.154558,1.0,0.602563,0.143005,1.0,0.598755,0.153363,1.0,0.600547,0.154558,1.0,0.578807,0.164119,1.0,0.579932,0.167706,1.0,0.604802,0.151371,1.0,0.470877,0.422920,1.0,0.470877,0.422920,1.0,0.470801,0.619135,1.0,0.461703,0.777219,1.0,0.461703,0.777219,1.0,0.518334,0.425593,1.0,0.518334,0.425593,1.0,0.518332,0.621717,1.0,0.518415,0.774385,1.0,0.518415,0.774385,1.0
0.494601,0.422855,1.0,0.496384,0.271612,1.0,0.495790,0.322027,1.0,0.496979,0.221198,1.0,0.496185,0.131256,1.0,0.506147,0.101285,1.0,0.506147,0.101285,1.0,0.486227,0.101350,1.0,0.486227,0.101350,1.0,0.479353,0.219832,1.0,0.461727,0.218466,1.0,0.438656,0.294688,1.0,0.444839,0.188485,1.0,0.443696,0.176069,1.0,0.436352,0.141253,1.0,0.435618,0.138642,1.0,0.436107,0.138642,1.0,0.434149,0.139947,1.0,0.434149,0.139947,1.0,0.434394,0.139077,1.0,0.433904,0.141253,1.0,0.436107,0.156485,1.0,0.436352,0.151263,1.0,0.435863,0.153439,1.0,0.433170,0.159967,1.0,0.440024,0.149087,1.0,0.441983,0.154309,1.0,0.431946,0.163448,1.0,0.515351,0.219856,1.0,0.533724,0.218513,1.0,0.561307,0.272982,1.0,0.567401,0.174880,1.0,0.562849,0.167449,1.0,0.577333,0.128023,1.0,0.561719,0.173483,1.0,0.578917,0.127621,1.0,0.562849,0.173886,1.0,0.567828,0.163829,1.0,0.579823,0.142506,1.0,0.576203,0.153369,1.0,0.586609,0.150955,1.0,0.578917,0.137679,1.0,0.581859,0.152966,1.0,0.581177,0.152966,1.0,0.575974,0.126817,1.0,0.562849,0.175093,1.0,0.588422,0.156989,1.0,0.470859,0.422817,1.0,0.470859,0.422817,1.0,0.470796,0.621769,1.0,0.460211,0.788088,1.0,0.460211,0.788088,1.0,0.518344,0.422894,1.0,0.518344,0.422894,1.0,0.516879,0.621856,1.0,0.518424,0.774423,1.0,0.518424,0.774423,1.0
0.493827,0.421477,1.0,0.496104,0.269204,1.0,0.495345,0.319962,1.0,0.496863,0.218446,1.0,0.494643,0.129937,1.0,0.506114,0.104028,1.0,0.506114,0.104028,1.0,0.486216,0.104066,1.0,0.486216,0.104066,1.0,0.479274,0.218474,1.0,0.461684,0.218501,1.0,0.447815,0.302959,1.0,0.464719,0.207476,1.0,0.465708,0.204529,1.0,0.485675,0.148630,1.0,0.477642,0.143733,1.0,0.484986,0.146998,1.0,0.483380,0.148222,1.0,0.478560,0.147406,1.0,0.484528,0.149038,1.0,0.477413,0.158831,1.0,0.477642,0.161279,1.0,0.480167,0.145366,1.0,0.476954,0.161279,1.0,0.476495,0.165358,1.0,0.479937,0.144957,1.0,0.479019,0.144550,1.0,0.462724,0.170663,1.0,0.513741,0.218441,1.0,0.530620,0.218435,1.0,0.553651,0.292032,1.0,0.542948,0.202148,1.0,0.550578,0.145522,1.0,0.538781,0.161251,1.0,0.538573,0.161626,1.0,0.537729,0.163873,1.0,0.538781,0.165370,1.0,0.516876,0.144773,1.0,0.547208,0.151889,1.0,0.547000,0.167244,1.0,0.545734,0.164621,1.0,0.547208,0.151889,1.0,0.546578,0.165370,1.0,0.545526,0.163498,1.0,0.540047,0.162375,1.0,0.539203,0.163498,1.0,0.539203,0.163873,1.0,0.470817,0.420162,1.0,0.470817,0.420162,1.0,0.470784,0.624519,1.0,0.460206,0.790773,1.0,0.460206,0.790773,1.0,0.516836,0.422792,1.0,0.516836,0.422792,1.0,0.516857,0.624509,1.0,0.518407,0.774419,1.0,0.518407,0.774419,1.0
0.493827,0.421477,1.0,0.496104,0.269204,1.0,0.495345,0.319962,1.0,0.496863,0.218446,1.0,0.494643,0.129937,1.0,0.506114,0.104028,1.0,0.506114,0.104028,1.0,0.486216,0.104066,1.0,0.486216,0.104066,1.0,0.479274,0.218474,1.0,0.461684,0.218501,1.0,0.447815,0.302959,1.0,0.464719,0.207476,1.0,0.465708,0.204529,1.0,0.485675,0.148630,1.0,0.477642,0.143733,1.0,0.484986,0.146998,1.0,0.483380,0.148222,1.0,0.478560,0.147406,1.0,0.484528,0.149038,1.0,0.477413,0.158831,1.0,0.477642,0.161279,1.0,0.480167,0.145366,1.0,0.476954,0.161279,1.0,0.476495,0.165358,1.0,0.479937,0.144957,1.0,0.479019,0.144550,1.0,0.462724,0.170663,1.0,0.513741,0.218441,1.0,0.530620,0.218435,1.0,0.553651,0.292032,1.0,0.542948,0.202148,1.0,0.550578,0.145522,1.0,0.538781,0.161251,1.0,0.538573,0.161626,1.0,0.537729,0.163873,1.0,0.538781,0.165370,1.0,0.516876,0.144773,1.0,0.547208,0.151889,1.0,0.547000,0.167244,1.0,0.545734,0.164621,1.0,0.547208,0.151889,1.0,0.546578,0.165370,1.0,0.545526,0.163498,1.0,0.540047,0.162375,1.0,0.539203,0.163498,1.0,0.539203,0.163873,1.0,0.470817,0.420162,1.0,0.470817,0.420162,1.0,0.470784,0.624519,1.0,0.460206,0.790773,1.0,0.460206,0.790773,1.0,0.516836,0.422792,1.0,0.516836,0.422792,1.0,0.516857,0.624509,1.0,0.518407,0.774419,1.0,0.518407,0.774419,1.0
0.493837,0.425626,1.0,0.495059,0.274298,1.0,0.494652,0.324741,1.0,0.495467,0.223856,1.0,0.493128,0.138041,1.0,0.504571,0.114944,1.0,0.504571,0.114944,1.0,0.484731,0.117528,1.0,0.484731,0.117528,1.0,0.477811,0.222499,1.0,0.460155,0.221142,1.0,0.454011,0.311048,1.0,0.486178,0.234795,1.0,0.502912,0.190207,1.0,0.507720,0.207301,1.0,0.507939,0.227115,1.0,0.509905,0.211186,1.0,0.508157,0.227115,1.0,0.503786,0.229057,1.0,0.506190,0.210021,1.0,0.506628,0.226338,1.0,0.501601,0.234885,1.0,0.501164,0.210409,1.0,0.499853,0.236051,1.0,0.500071,0.236439,1.0,0.497449,0.220510,1.0,0.496356,0.222065,1.0,0.495701,0.222065,1.0,0.513804,0.223860,1.0,0.532141,0.223864,1.0,0.545937,0.294940,1.0,0.512245,0.226761,1.0,0.509867,0.223128,1.0,0.487186,0.230156,1.0,0.490724,0.232745,1.0,0.487186,0.228676,1.0,0.488851,0.232006,1.0,0.492389,0.231635,1.0,0.493637,0.175040,1.0,0.492805,0.202413,1.0,0.491972,0.216839,1.0,0.494677,0.175780,1.0,0.493012,0.202782,1.0,0.491972,0.210920,1.0,0.501752,0.201673,1.0,0.486770,0.231635,1.0,0.498215,0.233855,1.0,0.470802,0.425605,1.0,0.470802,0.425605,1.0,0.470786,0.627311,1.0,0.460231,0.790769,1.0,0.460231,0.790769,1.0,0.516871,0.425647,1.0,0.516871,0.425647,1.0,0.516835,0.629959,1.0,0.518399,0.774521,1.0,0.518399,0.774521,1.0
0.493079,0.428386,1.0,0.494817,0.277039,1.0,0.494238,0.327488,1.0,0.495396,0.226590,1.0,0.492326,0.140815,1.0,0.503035,0.117730,1.0,0.503035,0.117730,1.0,0.484656,0.120251,1.0,0.484656,0.120251,1.0,0.477026,0.226644,1.0,0.458656,0.226699,1.0,0.453981,0.319342,1.0,0.487740,0.251330,1.0,0.507615,0.244784,1.0,0.496593,0.249960,1.0,0.491602,0.259204,1.0,0.499504,0.234431,1.0,0.504496,0.240718,1.0,0.499296,0.236650,1.0,0.498257,0.224819,1.0,0.503872,0.228886,1.0,0.499712,0.225558,1.0,0.496593,0.218904,1.0,0.504080,0.218534,1.0,0.498465,0.216685,1.0,0.494721,0.217794,1.0,0.503248,0.210400,1.0,0.498257,0.209660,1.0,0.513763,0.226568,1.0,0.532130,0.226546,1.0,0.544411,0.305667,1.0,0.510729,0.245663,1.0,0.510110,0.230354,1.0,0.500392,0.198911,1.0,0.496894,0.207204,1.0,0.495533,0.211695,1.0,0.494756,0.215842,1.0,0.500003,0.216532,1.0,0.501947,0.216878,1.0,0.496894,0.222061,1.0,0.501753,0.223789,1.0,0.507972,0.227590,1.0,0.498448,0.234845,1.0,0.499420,0.232772,1.0,0.504668,0.240028,1.0,0.498060,0.236228,1.0,0.499420,0.240374,1.0,0.469332,0.428392,1.0,0.469332,0.428392,1.0,0.469305,0.630047,1.0,0.461669,0.790735,1.0,0.461669,0.790735,1.0,0.516825,0.428381,1.0,0.516825,0.428381,1.0,0.513788,0.632732,1.0,0.518391,0.774554,1.0,0.518391,0.774554,1.0
0.492311,0.435130,1.0,0.493498,0.278812,1.0,0.493103,0.330918,1.0,0.493894,0.226706,1.0,0.490867,0.140883,1.0,0.499995,0.120294,1.0,0.499995,0.120294,1.0,0.483211,0.120321,1.0,0.483211,0.120321,1.0,0.476248,0.226740,1.0,0.458603,0.226774,1.0,0.447942,0.322098,1.0,0.481598,0.256601,1.0,0.505112,0.236794,1.0,0.506740,0.201719,1.0,0.508367,0.220160,1.0,0.508773,0.203165,1.0,0.504502,0.189424,1.0,0.500434,0.207143,1.0,0.499010,0.204611,1.0,0.497790,0.210035,1.0,0.495146,0.213290,1.0,0.498400,0.209674,1.0,0.494942,0.211120,1.0,0.490264,0.216906,1.0,0.484976,0.207866,1.0,0.483755,0.205696,1.0,0.486603,0.215821,1.0,0.512267,0.226658,1.0,0.530641,0.226610,1.0,0.546042,0.297616,1.0,0.518363,0.245619,1.0,0.507259,0.201615,1.0,0.505454,0.203949,1.0,0.500694,0.210077,1.0,0.506603,0.203949,1.0,0.507095,0.206575,1.0,0.501843,0.208034,1.0,0.509557,0.216205,1.0,0.509229,0.217372,1.0,0.507588,0.218831,1.0,0.509557,0.228460,1.0,0.508737,0.229336,1.0,0.503812,0.227294,1.0,0.510214,0.236631,1.0,0.511199,0.238965,1.0,0.511363,0.241299,1.0,0.469291,0.433788,1.0,0.469291,0.433788,1.0,0.469284,0.632719,1.0,0.461697,0.790808,1.0,0.461697,0.790808,1.0,0.515332,0.436472,1.0,0.515332,0.436472,1.0,0.512236,0.635383,1.0,0.518418,0.777237,1.0,0.518418,0.777237,1.0
0.490040,0.432423,1.0,0.491742,0.278016,1.0,0.491175,0.329485,1.0,0.492310,0.226547,1.0,0.490830,0.139444,1.0,0.498456,0.117738,1.0,0.498456,0.117738,1.0,0.483163,0.117763,1.0,0.483163,0.117763,1.0,0.474696,0.226643,1.0,0.457082,0.226738,1.0,0.446274,0.322054,1.0,0.470887,0.240332,1.0,0.477947,0.223187,1.0,0.478797,0.236790,1.0,0.470508,0.252659,1.0,0.471358,0.251904,1.0,0.480497,0.167265,1.0,0.465407,0.251148,1.0,0.473696,0.173310,1.0,0.473908,0.177467,1.0,0.474546,0.178979,1.0,0.477734,0.192581,1.0,0.471570,0.180490,1.0,0.471358,0.182001,1.0,0.473483,0.196359,1.0,0.463919,0.186157,1.0,0.463919,0.184269,1.0,0.509184,0.225182,1.0,0.526057,0.223817,1.0,0.555161,0.294816,1.0,0.532109,0.232103,1.0,0.516704,0.175633,1.0,0.518517,0.190458,1.0,0.526313,0.185624,1.0,0.526313,0.191426,1.0,0.526495,0.193037,1.0,0.527219,0.191426,1.0,0.523776,0.191748,1.0,0.523953,0.194004,1.0,0.527401,0.192393,1.0,0.523594,0.193681,1.0,0.522687,0.192715,1.0,0.528307,0.192393,1.0,0.520692,0.204318,1.0,0.522141,0.199806,1.0,0.524500,0.184657,1.0,0.466285,0.433765,1.0,0.466285,0.433765,1.0,0.469305,0.635385,1.0,0.461720,0.793539,1.0,0.461720,0.793539,1.0,0.513795,0.431081,1.0,0.513795,0.431081,1.0,0.510766,0.632733,1.0,0.519836,0.779847,1.0,0.519836,0.779847,1.0
0.487781,0.425682,1.0,0.492324,0.274378,1.0,0.490810,0.324813,1.0,0.493839,0.223944,1.0,0.490052,0.139384,1.0,0.497018,0.117513,1.0,0.497018,0.117513,1.0,0.483097,0.117549,1.0,0.483097,0.117549,1.0,0.476226,0.225251,1.0,0.458614,0.226559,1.0,0.440245,0.316581,1.0,0.455515,0.226549,1.0,0.454733,0.181123,1.0,0.454949,0.198755,1.0,0.455595,0.217536,1.0,0.451068,0.200288,1.0,0.442659,0.219453,1.0,0.443091,0.222903,1.0,0.449774,0.217536,1.0,0.449343,0.225586,1.0,0.447834,0.234785,1.0,0.449774,0.219069,1.0,0.449343,0.225203,1.0,0.445893,0.222519,1.0,0.452793,0.220603,1.0,0.456242,0.222903,1.0,0.452577,0.225969,1.0,0.509958,0.222560,1.0,0.526078,0.221176,1.0,0.556760,0.294687,1.0,0.546005,0.210394,1.0,0.541661,0.184690,1.0,0.543641,0.209000,1.0,0.550974,0.206181,1.0,0.550776,0.205477,1.0,0.552161,0.206181,1.0,0.552359,0.204772,1.0,0.552161,0.204772,1.0,0.554344,0.204420,1.0,0.550182,0.204068,1.0,0.547010,0.207239,1.0,0.545031,0.217104,1.0,0.551370,0.204068,1.0,0.552161,0.204772,1.0,0.546021,0.195260,1.0,0.551172,0.204068,1.0,0.464772,0.425700,1.0,0.464772,0.425700,1.0,0.469319,0.635422,1.0,0.464723,0.793380,1.0,0.464723,0.793380,1.0,0.510790,0.425664,1.0,0.510790,0.425664,1.0,0.512260,0.632723,1.0,0.518427,0.777219,1.0,0.518427,0.777219,1.0
0.487781,0.425682,1.0,0.492324,0.274378,1.0,0.490810,0.324813,1.0,0.493839,0.223944,1.0,0.490052,0.139384,1.0,0.497018,0.117513,1.0,0.497018,0.117513,1.0,0.483097,0.117549,1.0,0.483097,0.117549,1.0,0.476226,0.225251,1.0,0.458614,0.226559,1.0,0.440245,0.316581,1.0,0.455515,0.226549,1.0,0.454733,0.181123,1.0,0.454949,0.198755,1.0,0.455595,0.217536,1.0,0.451068,0.200288,1.0,0.442659,0.219453,1.0,0.443091,0.222903,1.0,0.449774,0.217536,1.0,0.449343,0.225586,1.0,0.447834,0.234785,1.0,0.449774,0.219069,1.0,0.449343,0.225203,1.0,0.445893,0.222519,1.0,0.452793,0.220603,1.0,0.456242,0.222903,1.0,0.452577,0.225969,1.0,0.509958,0.222560,1.0,0.526078,0.221176,1.0,0.556760,0.294687,1.0,0.546005,0.210394,1.0,0.541661,0.184690,1.0,0.543641,0.209000,1.0,0.550974,0.206181,1.0,0.550776,0.205477,1.0,0.552161,0.206181,1.0,0.552359,0.204772,1.0,0.552161,0.204772,1.0,0.554344,0.204420,1.0,0.550182,0.204068,1.0,0.547010,0.207239,1.0,0.545031,0.217104,1.0,0.551370,0.204068,1.0,0.552161,0.204772,1.0,0.546021,0.195260,1.0,0.551172,0.204068,1.0,0.464772,0.425700,1.0,0.464772,0.425700,1.0,0.469319,0.635422,1.0,0.464723,0.793380,1.0,0.464723,0.793380,1.0,0.510790,0.425664,1.0,0.510790,0.425664,1.0,0.512260,0.632723,1.0,0.518427,0.777219,1.0,0.518427,0.777219,1.0
0.487007,0.428337,1.0,0.491010,0.275035,1.0,0.489675,0.326136,1.0,0.492344,0.223934,1.0,0.489992,0.136701,1.0,0.496977,0.109483,1.0,0.496977,0.109483,1.0,0.481619,0.112211,1.0,0.481619,0.112211,1.0,0.473938,0.225222,1.0,0.455532,0.226509,1.0,0.435619,0.311035,1.0,0.437133,0.207482,1.0,0.438583,0.181331,1.0,0.437395,0.175843,1.0,0.448558,0.161487,1.0,0.431458,0.148397,1.0,0.425045,0.137842,1.0,0.426232,0.145019,1.0,0.430745,0.153886,1.0,0.429320,0.152197,1.0,0.426232,0.158109,1.0,0.430745,0.158954,1.0,0.429795,0.158531,1.0,0.428608,0.161065,1.0,0.431220,0.161487,1.0,0.429320,0.161909,1.0,0.425282,0.164443,1.0,0.510740,0.222559,1.0,0.529135,0.221183,1.0,0.558318,0.278489,1.0,0.558323,0.191228,1.0,0.570531,0.157452,1.0,0.561130,0.156030,1.0,0.559927,0.158163,1.0,0.556328,0.189464,1.0,0.555526,0.190175,1.0,0.555526,0.191597,1.0,0.556125,0.190886,1.0,0.555125,0.193020,1.0,0.556526,0.191954,1.0,0.556328,0.191242,1.0,0.555927,0.194799,1.0,0.561328,0.189107,1.0,0.555927,0.191597,1.0,0.554724,0.191242,1.0,0.562328,0.189107,1.0,0.463249,0.428344,1.0,0.463249,0.428344,1.0,0.469318,0.635417,1.0,0.466258,0.793425,1.0,0.466258,0.793425,1.0,0.510765,0.428331,1.0,0.510765,0.428331,1.0,0.513826,0.635445,1.0,0.519893,0.777177,1.0,0.519893,0.777177,1.0
0.487007,0.428345,1.0,0.489856,0.275033,1.0,0.488906,0.326137,1.0,0.490805,0.223930,1.0,0.489980,0.131277,1.0,0.496930,0.106756,1.0,0.496930,0.106756,1.0,0.481558,0.106735,1.0,0.481558,0.106735,1.0,0.472418,0.223922,1.0,0.454031,0.223914,1.0,0.434096,0.297504,1.0,0.424895,0.196693,1.0,0.425840,0.182157,1.0,0.415771,0.156764,1.0,0.407809,0.121795,1.0,0.415537,0.152184,1.0,0.409917,0.136781,1.0,0.408980,0.124709,1.0,0.416005,0.155098,1.0,0.410620,0.148855,1.0,0.409917,0.132203,1.0,0.417644,0.157180,1.0,0.413664,0.153017,1.0,0.411556,0.134284,1.0,0.416473,0.156764,1.0,0.416005,0.153017,1.0,0.418581,0.138447,1.0,0.509194,0.222559,1.0,0.527583,0.221188,1.0,0.559771,0.275827,1.0,0.568979,0.183020,1.0,0.569641,0.165455,1.0,0.574609,0.147401,1.0,0.578068,0.134341,1.0,0.569208,0.175826,1.0,0.566828,0.181204,1.0,0.572234,0.166223,1.0,0.588219,0.148169,1.0,0.592328,0.135109,1.0,0.594271,0.132420,1.0,0.590167,0.147401,1.0,0.568125,0.181588,1.0,0.575474,0.174290,1.0,0.566396,0.175442,1.0,0.567260,0.182356,1.0,0.571151,0.183893,1.0,0.463248,0.428324,1.0,0.463248,0.428324,1.0,0.469332,0.635400,1.0,0.466242,0.793543,1.0,0.466242,0.793543,1.0,0.510767,0.428366,1.0,0.510767,0.428366,1.0,0.516824,0.638057,1.0,0.519901,0.777189,1.0,0.519901,0.777189,1.0
0.486957,0.428343,1.0,0.489851,0.275039,1.0,0.488887,0.326140,1.0,0.490816,0.223938,1.0,0.489274,0.128576,1.0,0.496880,0.101363,1.0,0.496880,0.101363,1.0,0.478560,0.104060,1.0,0.478560,0.104060,1.0,0.472404,0.223927,1.0,0.453991,0.223917,1.0,0.434031,0.294806,1.0,0.420294,0.191252,1.0,0.418201,0.183099,1.0,0.414541,0.161849,1.0,0.406003,0.153609,1.0,0.406491,0.151442,1.0,0.399417,0.135830,1.0,0.396978,0.123686,1.0,0.407711,0.151875,1.0,0.400881,0.135830,1.0,0.400393,0.121084,1.0,0.410882,0.154477,1.0,0.404784,0.137564,1.0,0.402832,0.125855,1.0,0.416249,0.155778,1.0,0.412834,0.141901,1.0,0.410638,0.135395,1.0,0.509218,0.222570,1.0,0.527620,0.221202,1.0,0.558208,0.278436,1.0,0.572089,0.180365,1.0,0.575276,0.168612,1.0,0.572031,0.181390,1.0,0.570870,0.180978,1.0,0.584089,0.145941,1.0,0.571797,0.180154,1.0,0.604026,0.129453,1.0,0.587099,0.140169,1.0,0.596609,0.136460,1.0,0.604026,0.131102,1.0,0.592203,0.142231,1.0,0.596839,0.136048,1.0,0.605417,0.129041,1.0,0.591740,0.133575,1.0,0.597766,0.131926,1.0,0.605187,0.126568,1.0,0.463207,0.428325,1.0,0.463207,0.428325,1.0,0.469368,0.638171,1.0,0.467783,0.796168,1.0,0.467783,0.796168,1.0,0.510707,0.428360,1.0,0.510707,0.428360,1.0,0.516858,0.638103,1.0,0.519930,0.777255,1.0,0.519930,0.777255,1.0
0.486946,0.428368,1.0,0.488701,0.275036,1.0,0.488116,0.326146,1.0,0.489286,0.223925,1.0,0.488493,0.132620,1.0,0.495425,0.101333,1.0,0.495425,0.101333,1.0,0.475488,0.104085,1.0,0.475488,0.104085,1.0,0.470882,0.223919,1.0,0.452477,0.223913,1.0,0.434112,0.297484,1.0,0.421742,0.194006,1.0,0.419842,0.190044,1.0,0.417659,0.196080,1.0,0.404077,0.161153,1.0,0.406502,0.160290,1.0,0.399226,0.140886,1.0,0.396315,0.127087,1.0,0.407230,0.158134,1.0,0.400923,0.140455,1.0,0.399226,0.123638,1.0,0.410626,0.158134,1.0,0.404804,0.140023,1.0,0.402621,0.127087,1.0,0.415234,0.156841,1.0,0.410868,0.141318,1.0,0.408685,0.135711,1.0,0.508445,0.222544,1.0,0.527604,0.221163,1.0,0.549083,0.291982,1.0,0.568953,0.191186,1.0,0.572573,0.173596,1.0,0.578448,0.158358,1.0,0.581630,0.146169,1.0,0.589224,0.152264,1.0,0.594120,0.144863,1.0,0.600734,0.138768,1.0,0.589224,0.157488,1.0,0.594609,0.147040,1.0,0.602448,0.139203,1.0,0.591182,0.153569,1.0,0.595344,0.146605,1.0,0.603672,0.138332,1.0,0.590448,0.153134,1.0,0.594365,0.143121,1.0,0.603672,0.135720,1.0,0.463185,0.428361,1.0,0.463185,0.428361,1.0,0.469367,0.640752,1.0,0.469277,0.796152,1.0,0.469277,0.796152,1.0,0.510707,0.428374,1.0,0.510707,0.428374,1.0,0.516864,0.638146,1.0,0.519943,0.777210,1.0,0.519943,0.777210,1.0
0.485477,0.431070,1.0,0.488301,0.275757,1.0,0.487360,0.327528,1.0,0.489243,0.223985,1.0,0.488442,0.133985,1.0,0.495381,0.106700,1.0,0.495381,0.106700,1.0,0.475472,0.109428,1.0,0.475472,0.109428,1.0,0.471620,0.225250,1.0,0.453997,0.226514,1.0,0.435695,0.311179,1.0,0.427950,0.207699,1.0,0.426830,0.185466,1.0,0.423000,0.171423,1.0,0.418213,0.151850,1.0,0.414863,0.152701,1.0,0.412947,0.147169,1.0,0.409118,0.139936,1.0,0.416298,0.159935,1.0,0.412708,0.156106,1.0,0.407682,0.144191,1.0,0.418453,0.167169,1.0,0.414623,0.162062,1.0,0.412708,0.156106,1.0,0.422282,0.169296,1.0,0.416298,0.164616,1.0,0.410793,0.173977,1.0,0.506892,0.223918,1.0,0.524542,0.223851,1.0,0.544385,0.302955,1.0,0.556661,0.207715,1.0,0.556458,0.194207,1.0,0.551526,0.206156,1.0,0.553094,0.206554,1.0,0.554214,0.193411,1.0,0.552870,0.206554,1.0,0.556234,0.206953,1.0,0.564969,0.178675,1.0,0.572359,0.186641,1.0,0.572135,0.205757,1.0,0.565193,0.175489,1.0,0.566312,0.168320,1.0,0.571464,0.200580,1.0,0.565193,0.171108,1.0,0.568104,0.161948,1.0,0.570792,0.156372,1.0,0.461706,0.431084,1.0,0.461706,0.431084,1.0,0.469358,0.640867,1.0,0.469313,0.796175,1.0,0.469313,0.796175,1.0,0.509248,0.431056,1.0,0.509248,0.431056,1.0,0.516881,0.638144,1.0,0.519950,0.777231,1.0,0.519950,0.777231,1.0
0.485477,0.431070,1.0,0.488301,0.275757,1.0,0.487360,0.327528,1.0,0.489243,0.223985,1.0,0.488442,0.133985,1.0,0.495381,0.106700,1.0,0.495381,0.106700,1.0,0.475472,0.109428,1.0,0.475472,0.109428,1.0,0.471620,0.225250,1.0,0.453997,0.226514,1.0,0.435695,0.311179,1.0,0.427950,0.207699,1.0,0.426830,0.185466,1.0,0.423000,0.171423,1.0,0.418213,0.151850,1.0,0.414863,0.152701,1.0,0.412947,0.147169,1.0,0.409118,0.139936,1.0,0.416298,0.159935,1.0,0.412708,0.156106,1.0,0.407682,0.144191,1.0,0.418453,0.167169,1.0,0.414623,0.162062,1.0,0.412708,0.156106,1.0,0.422282,0.169296,1.0,0.416298,0.164616,1.0,0.410793,0.173977,1.0,0.506892,0.223918,1.0,0.524542,0.223851,1.0,0.544385,0.302955,1.0,0.556661,0.207715,1.0,0.556458,0.194207,1.0,0.551526,0.206156,1.0,0.553094,0.206554,1.0,0.554214,0.193411,1.0,0.552870,0.206554,1.0,0.556234,0.206953,1.0,0.564969,0.178675,1.0,0.572359,0.186641,1.0,0.572135,0.205757,1.0,0.565193,0.175489,1.0,0.566312,0.168320,1.0,0.571464,0.200580,1.0,0.565193,0.171108,1.0,0.568104,0.161948,1.0,0.570792,0.156372,1.0,0.461706,0.431084,1.0,0.461706,0.431084,1.0,0.469358,0.640867,1.0,0.469313,0.796175,1.0,0.469313,0.796175,1.0,0.509248,0.431056,1.0,0.509248,0.431056,1.0,0.516881,0.638144,1.0,0.519950,0.777231,1.0,0.519950,0.777231,1.0
0.485441,0.428355,1.0,0.486035,0.277066,1.0,0.485837,0.327496,1.0,0.486233,0.226637,1.0,0.486955,0.135331,1.0,0.495320,0.109486,1.0,0.495320,0.109486,1.0,0.473955,0.112244,1.0,0.473955,0.112244,1.0,0.470880,0.226666,1.0,0.455527,0.226695,1.0,0.441771,0.330195,1.0,0.447857,0.229286,1.0,0.441256,0.182748,1.0,0.449866,0.207155,1.0,0.465921,0.198055,1.0,0.442885,0.210465,1.0,0.442885,0.217497,1.0,0.441489,0.210878,1.0,0.441721,0.215015,1.0,0.442652,0.217910,1.0,0.437300,0.219152,1.0,0.441489,0.215015,1.0,0.440325,0.219565,1.0,0.439394,0.219565,1.0,0.439627,0.217497,1.0,0.447073,0.226184,1.0,0.442885,0.236112,1.0,0.503110,0.226603,1.0,0.519987,0.226569,1.0,0.532224,0.321999,1.0,0.532214,0.232167,1.0,0.525208,0.230717,1.0,0.525620,0.232548,1.0,0.527677,0.230351,1.0,0.537771,0.202889,1.0,0.534682,0.207649,1.0,0.535505,0.212043,1.0,0.543948,0.208381,1.0,0.540448,0.210944,1.0,0.533443,0.219000,1.0,0.545599,0.209113,1.0,0.541682,0.211677,1.0,0.542094,0.212775,1.0,0.546422,0.212775,1.0,0.526854,0.232181,1.0,0.547865,0.215338,1.0,0.461652,0.428377,1.0,0.461652,0.428377,1.0,0.469352,0.640982,1.0,0.469336,0.796213,1.0,0.469336,0.796213,1.0,0.509230,0.428332,1.0,0.509230,0.428332,1.0,0.516869,0.640781,1.0,0.519949,0.777251,1.0,0.519949,0.777251,1.0
0.484679,0.435137,1.0,0.485847,0.280766,1.0,0.485458,0.332223,1.0,0.486236,0.229309,1.0,0.486166,0.136728,1.0,0.493862,0.114879,1.0,0.493862,0.114879,1.0,0.473926,0.117522,1.0,0.473926,0.117522,1.0,0.467818,0.229345,1.0,0.449401,0.229381,1.0,0.443268,0.338339,1.0,0.472419,0.272976,1.0,0.493789,0.240560,1.0,0.493563,0.242569,1.0,0.482717,0.245381,1.0,0.493789,0.242569,1.0,0.479328,0.261850,1.0,0.476842,0.266670,1.0,0.494693,0.262654,1.0,0.495596,0.263456,1.0,0.495822,0.266670,1.0,0.500793,0.262252,1.0,0.484524,0.275508,1.0,0.498534,0.265868,1.0,0.502375,0.261448,1.0,0.501697,0.262654,1.0,0.473904,0.290773,1.0,0.505389,0.228039,1.0,0.524542,0.226769,1.0,0.521526,0.330248,1.0,0.498443,0.272895,1.0,0.495958,0.231922,1.0,0.493820,0.258531,1.0,0.494889,0.261952,1.0,0.503656,0.276396,1.0,0.476928,0.261571,1.0,0.474577,0.272215,1.0,0.493606,0.261571,1.0,0.500876,0.276017,1.0,0.476928,0.270694,1.0,0.493606,0.264232,1.0,0.499166,0.276396,1.0,0.492323,0.280197,1.0,0.493606,0.264613,1.0,0.482487,0.246367,1.0,0.493820,0.283619,1.0,0.460174,0.436498,1.0,0.460174,0.436498,1.0,0.469334,0.643655,1.0,0.470790,0.798954,1.0,0.470790,0.798954,1.0,0.509184,0.433775,1.0,0.509184,0.433775,1.0,0.518398,0.643539,1.0,0.520002,0.779893,1.0,0.520002,0.779893,1.0
0.484683,0.441931,1.0,0.484717,0.282620,1.0,0.484706,0.335724,1.0,0.484728,0.229516,1.0,0.483135,0.140754,1.0,0.493811,0.117731,1.0,0.493811,0.117731,1.0,0.472480,0.120319,1.0,0.472480,0.120319,1.0,0.466291,0.230802,1.0,0.447854,0.232089,1.0,0.438677,0.351958,1.0,0.470848,0.292132,1.0,0.492448,0.289254,1.0,0.487456,0.293248,1.0,0.482463,0.239993,1.0,0.486208,0.272833,1.0,0.478968,0.254194,1.0,0.480466,0.243543,1.0,0.489453,0.267952,1.0,0.480466,0.259963,1.0,0.478219,0.263514,1.0,0.491949,0.262626,1.0,0.480966,0.258631,1.0,0.479717,0.252862,1.0,0.492199,0.259076,1.0,0.487955,0.259076,1.0,0.479218,0.245318,1.0,0.503880,0.229447,1.0,0.523031,0.229378,1.0,0.522990,0.338497,1.0,0.495459,0.291931,1.0,0.497857,0.282169,1.0,0.498083,0.267758,1.0,0.495155,0.248944,1.0,0.499884,0.263355,1.0,0.497857,0.245742,1.0,0.492453,0.237735,1.0,0.498083,0.271761,1.0,0.484347,0.252546,1.0,0.479619,0.247743,1.0,0.494255,0.277766,1.0,0.481870,0.264556,1.0,0.477817,0.259352,1.0,0.488851,0.282169,1.0,0.481195,0.275364,1.0,0.478042,0.272962,1.0,0.460154,0.441915,1.0,0.460154,0.441915,1.0,0.469328,0.649069,1.0,0.470830,0.798983,1.0,0.470830,0.798983,1.0,0.509212,0.441948,1.0,0.509212,0.441948,1.0,0.519964,0.643636,1.0,0.521443,0.785309,1.0,0.521443,0.785309,1.0
0.483175,0.440555,1.0,0.484244,0.282256,1.0,0.483888,0.335022,1.0,0.484600,0.229490,1.0,0.480836,0.142153,1.0,0.489281,0.120360,1.0,0.489281,0.120360,1.0,0.472368,0.120431,1.0,0.472368,0.120431,1.0,0.465490,0.230796,1.0,0.446380,0.232103,1.0,0.433998,0.349313,1.0,0.461698,0.275684,1.0,0.464933,0.243512,1.0,0.466410,0.242637,1.0,0.465672,0.275449,1.0,0.470594,0.257512,1.0,0.465672,0.273699,1.0,0.467641,0.252262,1.0,0.466410,0.256637,1.0,0.465918,0.256637,1.0,0.465426,0.273262,1.0,0.466164,0.257074,1.0,0.461242,0.270637,1.0,0.457059,0.282887,1.0,0.466410,0.259699,1.0,0.464687,0.274137,1.0,0.457797,0.283324,1.0,0.503024,0.229439,1.0,0.521448,0.229389,1.0,0.530604,0.341217,1.0,0.506093,0.281129,1.0,0.502902,0.219844,1.0,0.498471,0.276224,1.0,0.498238,0.281613,1.0,0.502668,0.259642,1.0,0.499170,0.281198,1.0,0.500803,0.292392,1.0,0.503368,0.249692,1.0,0.508032,0.242644,1.0,0.510364,0.255495,1.0,0.501969,0.230207,1.0,0.505467,0.244303,1.0,0.501502,0.289075,1.0,0.502902,0.229379,1.0,0.498704,0.279540,1.0,0.500803,0.291562,1.0,0.458667,0.441936,1.0,0.458667,0.441936,1.0,0.467831,0.649124,1.0,0.470853,0.799040,1.0,0.470853,0.799040,1.0,0.507684,0.439174,1.0,0.507684,0.439174,1.0,0.521536,0.640919,1.0,0.521401,0.793415,1.0,0.521401,0.793415,1.0
0.483180,0.439225,1.0,0.483105,0.281821,1.0,0.483130,0.334289,1.0,0.483080,0.229353,1.0,0.480060,0.142080,1.0,0.487732,0.120388,1.0,0.487732,0.120388,1.0,0.470897,0.120395,1.0,0.470897,0.120395,1.0,0.464722,0.229330,1.0,0.446365,0.229307,1.0,0.423427,0.338545,1.0,0.444758,0.251302,1.0,0.454445,0.218661,1.0,0.444580,0.207968,1.0,0.448670,0.246893,1.0,0.450114,0.248176,1.0,0.447948,0.247748,1.0,0.446986,0.246893,1.0,0.453242,0.203690,1.0,0.443136,0.243898,1.0,0.444820,0.244326,1.0,0.447227,0.247748,1.0,0.443136,0.243898,1.0,0.443377,0.243470,1.0,0.447708,0.246465,1.0,0.445542,0.246465,1.0,0.446505,0.247320,1.0,0.499211,0.229387,1.0,0.515342,0.229421,1.0,0.532120,0.338386,1.0,0.523042,0.245686,1.0,0.519112,0.209706,1.0,0.522375,0.197688,1.0,0.524240,0.187742,1.0,0.525172,0.205562,1.0,0.535667,0.192715,1.0,0.536365,0.180281,1.0,0.525172,0.215923,1.0,0.530068,0.214680,1.0,0.532167,0.213437,1.0,0.522844,0.226284,1.0,0.527271,0.223383,1.0,0.529839,0.220068,1.0,0.520045,0.237474,1.0,0.519346,0.236231,1.0,0.522609,0.234573,1.0,0.458677,0.441983,1.0,0.458677,0.441983,1.0,0.469301,0.649073,1.0,0.470864,0.801658,1.0,0.470864,0.801658,1.0,0.507682,0.436468,1.0,0.507682,0.436468,1.0,0.521474,0.640832,1.0,0.523031,0.812610,1.0,0.523031,0.812610,1.0
0.483180,0.439225,1.0,0.483105,0.281821,1.0,0.483130,0.334289,1.0,0.483080,0.229353,1.0,0.480060,0.142080,1.0,0.487732,0.120388,1.0,0.487732,0.120388,1.0,0.470897,0.120395,1.0,0.470897,0.120395,1.0,0.464722,0.229330,1.0,0.446365,0.229307,1.0,0.423427,0.338545,1.0,0.444758,0.251302,1.0,0.454445,0.218661,1.0,0.444580,0.207968,1.0,0.448670,0.246893,1.0,0.450114,0.248176,1.0,0.447948,0.247748,1.0,0.446986,0.246893,1.0,0.453242,0.203690,1.0,0.443136,0.243898,1.0,0.444820,0.244326,1.0,0.447227,0.247748,1.0,0.443136,0.243898,1.0,0.443377,0.243470,1.0,0.447708,0.246465,1.0,0.445542,0.246465,1.0,0.446505,0.247320,1.0,0.499211,0.229387,1.0,0.515342,0.229421,1.0,0.532120,0.338386,1.0,0.523042,0.245686,1.0,0.519112,0.209706,1.0,0.522375,0.197688,1.0,0.524240,0.187742,1.0,0.525172,0.205562,1.0,0.535667,0.192715,1.0,0.536365,0.180281,1.0,0.525172,0.215923,1.0,0.530068,0.214680,1.0,0.532167,0.213437,1.0,0.522844,0.226284,1.0,0.527271,0.223383,1.0,0.529839,0.220068,1.0,0.520045,0.237474,1.0,0.519346,0.236231,1.0,0.522609,0.234573,1.0,0.458677,0.441983,1.0,0.458677,0.441983,1.0,0.469301,0.649073,1.0,0.470864,0.801658,1.0,0.470864,0.801658,1.0,0.507682,0.436468,1.0,0.507682,0.436468,1.0,0.521474,0.640832,1.0,0.523031,0.812610,1.0,0.523031,0.812610,1.0
0.483157,0.439247,1.0,0.483079,0.281881,1.0,0.483105,0.334337,1.0,0.483053,0.229426,1.0,0.479321,0.142113,1.0,0.486240,0.120468,1.0,0.486240,0.120468,1.0,0.470847,0.120518,1.0,0.470847,0.120518,1.0,0.464676,0.229449,1.0,0.446298,0.229472,1.0,0.415686,0.335517,1.0,0.427949,0.232068,1.0,0.431504,0.227226,1.0,0.421173,0.189184,1.0,0.440850,0.160325,1.0,0.427077,0.178253,1.0,0.430028,0.170819,1.0,0.443802,0.166009,1.0,0.426830,0.184812,1.0,0.438391,0.175192,1.0,0.444785,0.167321,1.0,0.424125,0.184812,1.0,0.438145,0.175629,1.0,0.438636,0.176941,1.0,0.421173,0.190058,1.0,0.429290,0.168195,1.0,0.419697,0.169070,1.0,0.500735,0.229389,1.0,0.518417,0.229353,1.0,0.539854,0.319306,1.0,0.536797,0.207698,1.0,0.545016,0.198651,1.0,0.555260,0.179977,1.0,0.549370,0.169045,1.0,0.551932,0.179066,1.0,0.544755,0.164946,1.0,0.546807,0.168134,1.0,0.541938,0.178610,1.0,0.543219,0.165402,1.0,0.545271,0.170412,1.0,0.537328,0.180432,1.0,0.540656,0.168134,1.0,0.541427,0.175422,1.0,0.532974,0.183165,1.0,0.535276,0.172233,1.0,0.537073,0.175422,1.0,0.458655,0.441978,1.0,0.458655,0.441978,1.0,0.469322,0.649139,1.0,0.470864,0.801637,1.0,0.470864,0.801637,1.0,0.507659,0.436517,1.0,0.507659,0.436517,1.0,0.519845,0.638119,1.0,0.532104,0.823458,1.0,0.532104,0.823458,1.0
0.483152,0.435165,1.0,0.481994,0.280921,1.0,0.482380,0.332336,1.0,0.481608,0.229506,1.0,0.479316,0.142064,1.0,0.486198,0.128504,1.0,0.486198,0.128504,1.0,0.470847,0.128533,1.0,0.470847,0.128533,1.0,0.460923,0.229514,1.0,0.440237,0.229521,1.0,0.409550,0.322099,1.0,0.420288,0.223919,1.0,0.422226,0.220873,1.0,0.405256,0.170728,1.0,0.406861,0.167874,1.0,0.406861,0.189889,1.0,0.404568,0.162574,1.0,0.404109,0.156051,1.0,0.406632,0.189481,1.0,0.406173,0.166651,1.0,0.405944,0.167058,1.0,0.408925,0.189889,1.0,0.405027,0.167466,1.0,0.412823,0.176028,1.0,0.408008,0.189889,1.0,0.416264,0.173989,1.0,0.410072,0.179289,1.0,0.500770,0.229460,1.0,0.519931,0.229413,1.0,0.552141,0.316466,1.0,0.545948,0.207469,1.0,0.535870,0.197399,1.0,0.535115,0.188022,1.0,0.535115,0.173732,1.0,0.540896,0.170160,1.0,0.536875,0.166142,1.0,0.536625,0.167928,1.0,0.545417,0.174179,1.0,0.541396,0.162569,1.0,0.538635,0.169268,1.0,0.549937,0.176858,1.0,0.543656,0.162569,1.0,0.541146,0.169268,1.0,0.551193,0.175519,1.0,0.549432,0.164802,1.0,0.544661,0.168374,1.0,0.458655,0.439251,1.0,0.458655,0.439251,1.0,0.470781,0.643709,1.0,0.470868,0.801651,1.0,0.470868,0.801651,1.0,0.507649,0.431080,1.0,0.507649,0.431080,1.0,0.518356,0.630022,1.0,0.532130,0.815359,1.0,0.532130,0.815359,1.0
0.483133,0.436510,1.0,0.482004,0.281273,1.0,0.482380,0.333019,1.0,0.481627,0.229528,1.0,0.480059,0.142197,1.0,0.486206,0.139399,1.0,0.486206,0.139399,1.0,0.470886,0.139430,1.0,0.470886,0.139430,1.0,0.460928,0.230797,1.0,0.440228,0.232067,1.0,0.400349,0.330179,1.0,0.412647,0.237513,1.0,0.417704,0.227804,1.0,0.407463,0.200717,1.0,0.417454,0.189171,1.0,0.407712,0.197608,1.0,0.404715,0.167413,1.0,0.402218,0.155868,1.0,0.409461,0.190948,1.0,0.406714,0.172742,1.0,0.419203,0.199384,1.0,0.407463,0.193168,1.0,0.412458,0.176738,1.0,0.418204,0.194056,1.0,0.405964,0.198053,1.0,0.419453,0.190504,1.0,0.419453,0.194944,1.0,0.500774,0.229460,1.0,0.519920,0.229392,1.0,0.556786,0.316670,1.0,0.544516,0.229298,1.0,0.534609,0.208474,1.0,0.530781,0.194860,1.0,0.531005,0.183249,1.0,0.537536,0.182448,1.0,0.534385,0.170036,1.0,0.533255,0.178844,1.0,0.540240,0.183649,1.0,0.536182,0.172038,1.0,0.534833,0.182849,1.0,0.543167,0.186853,1.0,0.539339,0.173239,1.0,0.537760,0.185651,1.0,0.547219,0.184050,1.0,0.542943,0.176042,1.0,0.539786,0.184851,1.0,0.458648,0.441925,1.0,0.458648,0.441925,1.0,0.470847,0.643707,1.0,0.470883,0.799019,1.0,0.470883,0.799019,1.0,0.507619,0.431094,1.0,0.507619,0.431094,1.0,0.519886,0.619176,1.0,0.532104,0.801681,1.0,0.532104,0.801681,1.0
0.483167,0.437849,1.0,0.483092,0.283529,1.0,0.483117,0.334969,1.0,0.483067,0.232089,1.0,0.480095,0.144986,1.0,0.486238,0.144861,1.0,0.486238,0.144861,1.0,0.470867,0.144949,1.0,0.470867,0.144949,1.0,0.461632,0.233456,1.0,0.440196,0.234824,1.0,0.398816,0.335549,1.0,0.412627,0.275750,1.0,0.420016,0.265625,1.0,0.423362,0.261964,1.0,0.405603,0.272031,1.0,0.413581,0.277064,1.0,0.419501,0.279352,1.0,0.418729,0.274776,1.0,0.414354,0.274319,1.0,0.415898,0.290333,1.0,0.415898,0.292621,1.0,0.414611,0.273404,1.0,0.417957,0.254186,1.0,0.418215,0.287131,1.0,0.418729,0.227647,1.0,0.405345,0.272031,1.0,0.405088,0.271116,1.0,0.502237,0.230743,1.0,0.521406,0.229396,1.0,0.556786,0.324766,1.0,0.545964,0.272983,1.0,0.540505,0.261343,1.0,0.540271,0.257571,1.0,0.536026,0.240807,1.0,0.542630,0.226558,1.0,0.536260,0.239550,1.0,0.534141,0.239131,1.0,0.543573,0.228234,1.0,0.545458,0.234940,1.0,0.546161,0.246256,1.0,0.550406,0.237873,1.0,0.545458,0.239131,1.0,0.541922,0.250446,1.0,0.540740,0.257990,1.0,0.536500,0.240807,1.0,0.541922,0.257152,1.0,0.458669,0.441926,1.0,0.458669,0.441926,1.0,0.470901,0.643600,1.0,0.470900,0.798968,1.0,0.470900,0.798968,1.0,0.507666,0.433771,1.0,0.507666,0.433771,1.0,0.519912,0.619023,1.0,0.527589,0.785373,1.0,0.527589,0.785373,1.0
0.483889,0.437853,1.0,0.483269,0.281549,1.0,0.483476,0.333650,1.0,0.483062,0.229447,1.0,0.479308,0.157112,1.0,0.486220,0.161116,1.0,0.486220,0.161116,1.0,0.470907,0.161155,1.0,0.470907,0.161155,1.0,0.463175,0.230786,1.0,0.443287,0.232124,1.0,0.397353,0.335677,1.0,0.420244,0.313747,1.0,0.426709,0.276031,1.0,0.418545,0.318606,1.0,0.422083,0.336021,1.0,0.417457,0.311348,1.0,0.418545,0.322476,1.0,0.421811,0.343279,1.0,0.422355,0.303607,1.0,0.424260,0.318121,1.0,0.418001,0.344246,1.0,0.422355,0.301189,1.0,0.424805,0.319089,1.0,0.433513,0.335054,1.0,0.437595,0.305059,1.0,0.437322,0.310381,1.0,0.421267,0.339892,1.0,0.501482,0.228102,1.0,0.519902,0.226756,1.0,0.544495,0.308372,1.0,0.542953,0.319398,1.0,0.537286,0.299940,1.0,0.533844,0.313527,1.0,0.535375,0.329831,1.0,0.544927,0.313187,1.0,0.543781,0.345455,1.0,0.543208,0.359381,1.0,0.541870,0.325415,1.0,0.544354,0.342058,1.0,0.544547,0.357003,1.0,0.539958,0.313866,1.0,0.543589,0.332207,1.0,0.541490,0.348172,1.0,0.539385,0.314206,1.0,0.544547,0.329831,1.0,0.543401,0.358701,1.0,0.460099,0.441940,1.0,0.460099,0.441940,1.0,0.470921,0.646334,1.0,0.470902,0.798989,1.0,0.470902,0.798989,1.0,0.507680,0.433767,1.0,0.507680,0.433767,1.0,0.518420,0.621733,1.0,0.522990,0.793473,1.0,0.522990,0.793473,1.0
0.483889,0.437853,1.0,0.483269,0.281549,1.0,0.483476,0.333650,1.0,0.483062,0.229447,1.0,0.479308,0.157112,1.0,0.486220,0.161116,1.0,0.486220,0.161116,1.0,0.470907,0.161155,1.0,0.470907,0.161155,1.0,0.463175,0.230786,1.0,0.443287,0.232124,1.0,0.397353,0.335677,1.0,0.420244,0.313747,1.0,0.426709,0.276031,1.0,0.418545,0.318606,1.0,0.422083,0.336021,1.0,0.417457,0.311348,1.0,0.418545,0.322476,1.0,0.421811,0.343279,1.0,0.422355,0.303607,1.0,0.424260,0.318121,1.0,0.418001,0.344246,1.0,0.422355,0.301189,1.0,0.424805,0.319089,1.0,0.433513,0.335054,1.0,0.437595,0.305059,1.0,0.437322,0.310381,1.0,0.421267,0.339892,1.0,0.501482,0.228102,1.0,0.519902,0.226756,1.0,0.544495,0.308372,1.0,0.542953,0.319398,1.0,0.537286,0.299940,1.0,0.533844,0.313527,1.0,0.535375,0.329831,1.0,0.544927,0.313187,1.0,0.543781,0.345455,1.0,0.543208,0.359381,1.0,0.541870,0.325415,1.0,0.544354,0.342058,1.0,0.544547,0.357003,1.0,0.539958,0.313866,1.0,0.543589,0.332207,1.0,0.541490,0.348172,1.0,0.539385,0.314206,1.0,0.544547,0.329831,1.0,0.543401,0.358701,1.0,0.460099,0.441940,1.0,0.460099,0.441940,1.0,0.470921,0.646334,1.0,0.470902,0.798989,1.0,0.470902,0.798989,1.0,0.507680,0.433767,1.0,0.507680,0.433767,1.0,0.518420,0.621733,1.0,0.522990,0.793473,1.0,0.522990,0.793473,1.0
0.483937,0.441948,1.0,0.483323,0.284635,1.0,0.483528,0.337072,1.0,0.483119,0.232197,1.0,0.480030,0.162648,1.0,0.486211,0.166819,1.0,0.486211,0.166819,1.0,0.472345,0.169452,1.0,0.472345,0.169452,1.0,0.463199,0.236258,1.0,0.443279,0.240319,1.0,0.398855,0.341224,1.0,0.421743,0.362965,1.0,0.421364,0.369199,1.0,0.425859,0.367789,1.0,0.440931,0.390352,1.0,0.431147,0.403983,1.0,0.434585,0.419026,1.0,0.436171,0.429368,1.0,0.438551,0.404924,1.0,0.438286,0.420906,1.0,0.444368,0.431718,1.0,0.434849,0.402573,1.0,0.436700,0.416206,1.0,0.443839,0.420906,1.0,0.431147,0.404454,1.0,0.435643,0.414325,1.0,0.436436,0.427957,1.0,0.501533,0.230805,1.0,0.519948,0.229413,1.0,0.549062,0.332915,1.0,0.547573,0.354771,1.0,0.545172,0.346277,1.0,0.544219,0.364531,1.0,0.539203,0.384059,1.0,0.548276,0.363257,1.0,0.546125,0.379814,1.0,0.543021,0.397219,1.0,0.556635,0.359437,1.0,0.555203,0.381512,1.0,0.559500,0.387031,1.0,0.559740,0.356890,1.0,0.558547,0.376842,1.0,0.559021,0.386606,1.0,0.561172,0.357314,1.0,0.559500,0.376418,1.0,0.558781,0.385332,1.0,0.460149,0.444697,1.0,0.460149,0.444697,1.0,0.470906,0.654554,1.0,0.470892,0.799033,1.0,0.470892,0.799033,1.0,0.507726,0.439198,1.0,0.507726,0.439198,1.0,0.516847,0.629955,1.0,0.521396,0.774546,1.0,0.521396,0.774546,1.0
0.484625,0.446123,1.0,0.483523,0.297753,1.0,0.483891,0.347210,1.0,0.483156,0.248296,1.0,0.479343,0.165356,1.0,0.486186,0.180274,1.0,0.486186,0.180274,1.0,0.470927,0.180369,1.0,0.470927,0.180369,1.0,0.463231,0.248429,1.0,0.443306,0.248562,1.0,0.401932,0.357474,1.0,0.421828,0.411943,1.0,0.431106,0.423169,1.0,0.441140,0.431846,1.0,0.444123,0.439560,1.0,0.444394,0.441006,1.0,0.439513,0.466077,1.0,0.439784,0.477647,1.0,0.442767,0.446792,1.0,0.439784,0.466559,1.0,0.440055,0.478130,1.0,0.438970,0.449203,1.0,0.439242,0.464631,1.0,0.440055,0.478130,1.0,0.433818,0.450167,1.0,0.438157,0.463184,1.0,0.439784,0.472344,1.0,0.502294,0.242937,1.0,0.521432,0.237577,1.0,0.552109,0.338400,1.0,0.546021,0.403830,1.0,0.543068,0.420796,1.0,0.540469,0.440139,1.0,0.537156,0.449810,1.0,0.537865,0.443503,1.0,0.537630,0.447707,1.0,0.531479,0.457380,1.0,0.531479,0.446867,1.0,0.532188,0.451071,1.0,0.532188,0.456958,1.0,0.530062,0.448129,1.0,0.531953,0.449390,1.0,0.530062,0.446867,1.0,0.537865,0.440559,1.0,0.537391,0.450651,1.0,0.530771,0.461164,1.0,0.460106,0.447496,1.0,0.460106,0.447496,1.0,0.470826,0.665379,1.0,0.470880,0.804398,1.0,0.470880,0.804398,1.0,0.509144,0.444750,1.0,0.509144,0.444750,1.0,0.515334,0.643729,1.0,0.519911,0.779892,1.0,0.519911,0.779892,1.0
0.484669,0.466439,1.0,0.484642,0.307113,1.0,0.484651,0.360222,1.0,0.484633,0.254004,1.0,0.480109,0.178915,1.0,0.486186,0.185807,1.0,0.486186,0.185807,1.0,0.470901,0.185930,1.0,0.470901,0.185930,1.0,0.465462,0.260734,1.0,0.446291,0.267464,1.0,0.406491,0.379238,1.0,0.421853,0.447415,1.0,0.430197,0.463605,1.0,0.440297,0.479133,1.0,0.441390,0.477193,1.0,0.443300,0.479618,1.0,0.444392,0.483016,1.0,0.441116,0.483501,1.0,0.440843,0.488354,1.0,0.441116,0.495148,1.0,0.438933,0.497575,1.0,0.433473,0.487383,1.0,0.439206,0.498060,1.0,0.438933,0.501456,1.0,0.430197,0.486413,1.0,0.438933,0.502428,1.0,0.440297,0.505824,1.0,0.503074,0.252557,1.0,0.521516,0.251110,1.0,0.550594,0.352039,1.0,0.546057,0.439201,1.0,0.544328,0.449244,1.0,0.541286,0.452572,1.0,0.533797,0.459229,1.0,0.534500,0.478781,1.0,0.531224,0.496253,1.0,0.530286,0.503325,1.0,0.533328,0.476284,1.0,0.531693,0.490429,1.0,0.529818,0.499581,1.0,0.533094,0.475037,1.0,0.532161,0.490013,1.0,0.530521,0.495837,1.0,0.535672,0.478781,1.0,0.532161,0.492093,1.0,0.528651,0.479196,1.0,0.460160,0.466450,1.0,0.460160,0.466450,1.0,0.470806,0.681703,1.0,0.470869,0.807179,1.0,0.470869,0.807179,1.0,0.509178,0.466429,1.0,0.509178,0.466429,1.0,0.515307,0.665477,1.0,0.519873,0.793391,1.0,0.519873,0.793391,1.0
0.484724,0.485539,1.0,0.484694,0.328148,1.0,0.484704,0.380612,1.0,0.484684,0.275684,1.0,0.480093,0.195301,1.0,0.487734,0.191200,1.0,0.487734,0.191200,1.0,0.472373,0.196663,1.0,0.472373,0.196663,1.0,0.465499,0.282460,1.0,0.446314,0.289236,1.0,0.409472,0.395669,1.0,0.421806,0.480141,1.0,0.429229,0.499306,1.0,0.432581,0.518102,1.0,0.437739,0.530481,1.0,0.436965,0.523145,1.0,0.442639,0.535523,1.0,0.439028,0.531856,1.0,0.438770,0.529563,1.0,0.440833,0.531397,1.0,0.437223,0.525895,1.0,0.436965,0.525895,1.0,0.439286,0.528646,1.0,0.439028,0.524979,1.0,0.435160,0.524062,1.0,0.439028,0.534606,1.0,0.439544,0.535065,1.0,0.503868,0.272973,1.0,0.523052,0.270261,1.0,0.553630,0.373757,1.0,0.549031,0.466358,1.0,0.546307,0.474615,1.0,0.542693,0.481477,1.0,0.535693,0.489196,1.0,0.538109,0.509354,1.0,0.529661,0.506352,1.0,0.530630,0.502492,1.0,0.537385,0.515787,1.0,0.534245,0.518360,1.0,0.533281,0.508067,1.0,0.536901,0.521362,1.0,0.533042,0.521791,1.0,0.529661,0.517073,1.0,0.534729,0.512356,1.0,0.529422,0.508496,1.0,0.529422,0.508496,1.0,0.460220,0.485581,1.0,0.460220,0.485581,1.0,0.470843,0.687174,1.0,0.470874,0.812567,1.0,0.470874,0.812567,1.0,0.509228,0.485498,1.0,0.509228,0.485498,1.0,0.510758,0.687119,1.0,0.519938,0.796289,1.0,0.519938,0.796289,1.0
0.486199,0.492441,1.0,0.485109,0.344178,1.0,0.485472,0.393599,1.0,0.484746,0.294757,1.0,0.480861,0.206203,1.0,0.487774,0.202034,1.0,0.487774,0.202034,1.0,0.472355,0.204737,1.0,0.472355,0.204737,1.0,0.465549,0.300210,1.0,0.446353,0.305662,1.0,0.409510,0.406519,1.0,0.415712,0.501945,1.0,0.421481,0.517554,1.0,0.425947,0.545789,1.0,0.430663,0.559465,1.0,0.428181,0.548877,1.0,0.430663,0.554612,1.0,0.433640,0.559465,1.0,0.425451,0.545789,1.0,0.432896,0.551082,1.0,0.433392,0.559023,1.0,0.424458,0.547994,1.0,0.432647,0.549318,1.0,0.434385,0.560788,1.0,0.423714,0.546670,1.0,0.427684,0.554170,1.0,0.434385,0.562112,1.0,0.505407,0.292030,1.0,0.526068,0.289303,1.0,0.556641,0.384730,1.0,0.556667,0.472009,1.0,0.550328,0.489531,1.0,0.547156,0.499603,1.0,0.544891,0.510883,1.0,0.551005,0.517732,1.0,0.546703,0.528207,1.0,0.541036,0.528207,1.0,0.550552,0.520553,1.0,0.548286,0.534250,1.0,0.545115,0.543516,1.0,0.549422,0.521358,1.0,0.546927,0.533847,1.0,0.544891,0.543919,1.0,0.547609,0.520553,1.0,0.544891,0.528207,1.0,0.541260,0.528610,1.0,0.461691,0.493789,1.0,0.461691,0.493789,1.0,0.470935,0.695444,1.0,0.470924,0.812596,1.0,0.470924,0.812596,1.0,0.510707,0.491093,1.0,0.510707,0.491093,1.0,0.510790,0.700838,1.0,0.519942,0.799023,1.0,0.519942,0.799023,1.0
0.486199,0.492441,1.0,0.485109,0.344178,1.0,0.485472,0.393599,1.0,0.484746,0.294757,1.0,0.480861,0.206203,1.0,0.487774,0.202034,1.0,0.487774,0.202034,1.0,0.472355,0.204737,1.0,0.472355,0.204737,1.0,0.465549,0.300210,1.0,0.446353,0.305662,1.0,0.409510,0.406519,1.0,0.415712,0.501945,1.0,0.421481,0.517554,1.0,0.425947,0.545789,1.0,0.430663,0.559465,1.0,0.428181,0.548877,1.0,0.430663,0.554612,1.0,0.433640,0.559465,1.0,0.425451,0.545789,1.0,0.432896,0.551082,1.0,0.433392,0.559023,1.0,0.424458,0.547994,1.0,0.432647,0.549318,1.0,0.434385,0.560788,1.0,0.423714,0.546670,1.0,0.427684,0.554170,1.0,0.434385,0.562112,1.0,0.505407,0.292030,1.0,0.526068,0.289303,1.0,0.556641,0.384730,1.0,0.556667,0.472009,1.0,0.550328,0.489531,1.0,0.547156,0.499603,1.0,0.544891,0.510883,1.0,0.551005,0.517732,1.0,0.546703,0.528207,1.0,0.541036,0.528207,1.0,0.550552,0.520553,1.0,0.548286,0.534250,1.0,0.545115,0.543516,1.0,0.549422,0.521358,1.0,0.546927,0.533847,1.0,0.544891,0.543919,1.0,0.547609,0.520553,1.0,0.544891,0.528207,1.0,0.541260,0.528610,1.0,0.461691,0.493789,1.0,0.461691,0.493789,1.0,0.470935,0.695444,1.0,0.470924,0.812596,1.0,0.470924,0.812596,1.0,0.510707,0.491093,1.0,0.510707,0.491093,1.0,0.510790,0.700838,1.0,0.519942,0.799023,1.0,0.519942,0.799023,1.0
0.485486,0.507333,1.0,0.486025,0.354091,1.0,0.485845,0.405172,1.0,0.486205,0.303010,1.0,0.480880,0.210244,1.0,0.487711,0.202028,1.0,0.487711,0.202028,1.0,0.470902,0.204766,1.0,0.470902,0.204766,1.0,0.466293,0.308401,1.0,0.446382,0.313792,1.0,0.403404,0.403944,1.0,0.408009,0.496516,1.0,0.408309,0.507990,1.0,0.414161,0.525765,1.0,0.415381,0.531834,1.0,0.418064,0.546140,1.0,0.417819,0.543539,1.0,0.410504,0.530967,1.0,0.414406,0.547007,1.0,0.408065,0.535735,1.0,0.409528,0.534869,1.0,0.410992,0.545706,1.0,0.406846,0.545706,1.0,0.406115,0.547874,1.0,0.408065,0.545706,1.0,0.404651,0.548742,1.0,0.403188,0.549175,1.0,0.507662,0.298906,1.0,0.529120,0.294803,1.0,0.558260,0.390143,1.0,0.556703,0.471875,1.0,0.555740,0.472176,1.0,0.555516,0.481730,1.0,0.552380,0.492875,1.0,0.557083,0.503225,1.0,0.554844,0.519147,1.0,0.552380,0.528303,1.0,0.555516,0.507604,1.0,0.553276,0.522332,1.0,0.549922,0.532283,1.0,0.553500,0.508400,1.0,0.551932,0.524720,1.0,0.549474,0.532283,1.0,0.550365,0.510390,1.0,0.548802,0.525517,1.0,0.544995,0.502827,1.0,0.461703,0.507360,1.0,0.461703,0.507360,1.0,0.472435,0.700796,1.0,0.472365,0.812568,1.0,0.472365,0.812568,1.0,0.509269,0.507306,1.0,0.509269,0.507306,1.0,0.510778,0.700888,1.0,0.519942,0.801671,1.0,0.519942,0.801671,1.0
0.486971,0.505956,1.0,0.486408,0.349586,1.0,0.486596,0.401709,1.0,0.486220,0.297463,1.0,0.480066,0.203439,1.0,0.484693,0.185927,1.0,0.484693,0.185927,1.0,0.469369,0.191274,1.0,0.469369,0.191274,1.0,0.466295,0.302962,1.0,0.446369,0.308460,1.0,0.389663,0.387449,1.0,0.397228,0.450206,1.0,0.400782,0.463398,1.0,0.405274,0.476554,1.0,0.406860,0.487359,1.0,0.398403,0.484070,1.0,0.406331,0.495346,1.0,0.406596,0.494877,1.0,0.396024,0.487830,1.0,0.399460,0.499575,1.0,0.400782,0.504743,1.0,0.393382,0.492057,1.0,0.396289,0.502394,1.0,0.400517,0.503333,1.0,0.392324,0.496286,1.0,0.393646,0.505682,1.0,0.395760,0.506622,1.0,0.508415,0.294773,1.0,0.530609,0.292083,1.0,0.568901,0.371053,1.0,0.556687,0.409308,1.0,0.548786,0.407781,1.0,0.558682,0.407399,1.0,0.559115,0.422698,1.0,0.556964,0.424993,1.0,0.555240,0.422698,1.0,0.557391,0.432643,1.0,0.555240,0.433025,1.0,0.556318,0.442205,1.0,0.553521,0.447177,1.0,0.553734,0.433790,1.0,0.554380,0.448324,1.0,0.553948,0.447942,1.0,0.543406,0.453296,1.0,0.553302,0.452914,1.0,0.553734,0.451766,1.0,0.463192,0.507308,1.0,0.463192,0.507308,1.0,0.473935,0.692739,1.0,0.472397,0.812501,1.0,0.472397,0.812501,1.0,0.510749,0.504603,1.0,0.510749,0.504603,1.0,0.510774,0.692716,1.0,0.519973,0.801717,1.0,0.519973,0.801717,1.0
0.486989,0.489650,1.0,0.485309,0.331262,1.0,0.485869,0.384058,1.0,0.484749,0.278466,1.0,0.477791,0.187136,1.0,0.481606,0.172125,1.0,0.481606,0.172125,1.0,0.463191,0.180248,1.0,0.463191,0.180248,1.0,0.465575,0.285219,1.0,0.446401,0.291971,1.0,0.380406,0.338329,1.0,0.388089,0.379328,1.0,0.399475,0.389618,1.0,0.402338,0.416922,1.0,0.405722,0.413682,1.0,0.403119,0.420161,1.0,0.405722,0.418310,1.0,0.405983,0.415533,1.0,0.395830,0.430806,1.0,0.390624,0.431268,1.0,0.391666,0.436358,1.0,0.391926,0.434970,1.0,0.390104,0.434970,1.0,0.389843,0.434970,1.0,0.387500,0.431731,1.0,0.385678,0.433119,1.0,0.389062,0.434507,1.0,0.505414,0.275673,1.0,0.526078,0.272880,1.0,0.581198,0.316680,1.0,0.552104,0.332992,1.0,0.550698,0.308056,1.0,0.526776,0.308844,1.0,0.525448,0.303331,1.0,0.534969,0.317900,1.0,0.527661,0.319869,1.0,0.533865,0.316325,1.0,0.530984,0.326956,1.0,0.527885,0.327744,1.0,0.531203,0.336800,1.0,0.527438,0.338769,1.0,0.525891,0.335618,1.0,0.530542,0.337587,1.0,0.527438,0.345069,1.0,0.524562,0.346250,1.0,0.525667,0.350581,1.0,0.463202,0.491004,1.0,0.463202,0.491004,1.0,0.473994,0.687200,1.0,0.472415,0.809821,1.0,0.472415,0.809821,1.0,0.510776,0.488296,1.0,0.510776,0.488296,1.0,0.513769,0.687284,1.0,0.519980,0.799052,1.0,0.519980,0.799052,1.0
0.487729,0.469234,1.0,0.485448,0.307728,1.0,0.486208,0.361563,1.0,0.484687,0.253893,1.0,0.465564,0.150382,1.0,0.472463,0.144969,1.0,0.472463,0.144969,1.0,0.458666,0.155794,1.0,0.458666,0.155794,1.0,0.466315,0.255296,1.0,0.447943,0.256700,1.0,0.375824,0.270256,1.0,0.385087,0.292079,1.0,0.393199,0.292658,1.0,0.400915,0.312522,1.0,0.404905,0.328604,1.0,0.399052,0.330968,1.0,0.399318,0.339008,1.0,0.398786,0.338062,1.0,0.391603,0.328604,1.0,0.392933,0.339955,1.0,0.391869,0.335225,1.0,0.384952,0.325293,1.0,0.387080,0.339008,1.0,0.386814,0.334752,1.0,0.379099,0.323401,1.0,0.380695,0.336170,1.0,0.382026,0.334279,1.0,0.502307,0.252512,1.0,0.519928,0.251131,1.0,0.585839,0.248361,1.0,0.542911,0.248477,1.0,0.535276,0.240776,1.0,0.505041,0.239916,1.0,0.501897,0.242496,1.0,0.504799,0.235186,1.0,0.502623,0.236046,1.0,0.502139,0.243356,1.0,0.507944,0.245076,1.0,0.496334,0.253245,1.0,0.499236,0.253245,1.0,0.510363,0.254966,1.0,0.496092,0.258405,1.0,0.499962,0.260555,1.0,0.510363,0.270015,1.0,0.500688,0.274744,1.0,0.500930,0.273455,1.0,0.463193,0.469295,1.0,0.463193,0.469295,1.0,0.473954,0.668157,1.0,0.472391,0.799026,1.0,0.472391,0.799026,1.0,0.512266,0.469172,1.0,0.512266,0.469172,1.0,0.519833,0.670922,1.0,0.519987,0.793561,1.0,0.519987,0.793561,1.0
0.489274,0.447371,1.0,0.488130,0.273697,1.0,0.488512,0.331588,1.0,0.487749,0.215806,1.0,0.461651,0.125792,1.0,0.467787,0.123045,1.0,0.467787,0.123045,1.0,0.455514,0.128538,1.0,0.455514,0.128538,1.0,0.470113,0.221264,1.0,0.452477,0.226722,1.0,0.411121,0.218493,1.0,0.392684,0.207572,1.0,0.379424,0.200440,1.0,0.393317,0.213467,1.0,0.392248,0.215638,1.0,0.393469,0.209396,1.0,0.381867,0.226494,1.0,0.382020,0.224594,1.0,0.392401,0.211568,1.0,0.384463,0.223780,1.0,0.382478,0.224594,1.0,0.386753,0.211295,1.0,0.381104,0.226222,1.0,0.381104,0.228122,1.0,0.380493,0.227037,1.0,0.380952,0.227037,1.0,0.380952,0.228122,1.0,0.505382,0.211688,1.0,0.523016,0.207570,1.0,0.582776,0.166715,1.0,0.533724,0.164119,1.0,0.527870,0.164515,1.0,0.516360,0.174954,1.0,0.510958,0.181218,1.0,0.512836,0.174954,1.0,0.504146,0.192075,1.0,0.498039,0.200427,1.0,0.512602,0.182053,1.0,0.503676,0.197921,1.0,0.497569,0.211284,1.0,0.514716,0.191240,1.0,0.507904,0.204603,1.0,0.503911,0.219218,1.0,0.520118,0.197921,1.0,0.516125,0.204603,1.0,0.514481,0.211702,1.0,0.464750,0.447408,1.0,0.464750,0.447408,1.0,0.472411,0.651769,1.0,0.470924,0.793502,1.0,0.470924,0.793502,1.0,0.513799,0.447333,1.0,0.513799,0.447333,1.0,0.519979,0.657273,1.0,0.521437,0.790754,1.0,0.521437,0.790754,1.0
0.489274,0.447371,1.0,0.488130,0.273697,1.0,0.488512,0.331588,1.0,0.487749,0.215806,1.0,0.461651,0.125792,1.0,0.467787,0.123045,1.0,0.467787,0.123045,1.0,0.455514,0.128538,1.0,0.455514,0.128538,1.0,0.470113,0.221264,1.0,0.452477,0.226722,1.0,0.411121,0.218493,1.0,0.392684,0.207572,1.0,0.379424,0.200440,1.0,0.393317,0.213467,1.0,0.392248,0.215638,1.0,0.393469,0.209396,1.0,0.381867,0.226494,1.0,0.382020,0.224594,1.0,0.392401,0.211568,1.0,0.384463,0.223780,1.0,0.382478,0.224594,1.0,0.386753,0.211295,1.0,0.381104,0.226222,1.0,0.381104,0.228122,1.0,0.380493,0.227037,1.0,0.380952,0.227037,1.0,0.380952,0.228122,1.0,0.505382,0.211688,1.0,0.523016,0.207570,1.0,0.582776,0.166715,1.0,0.533724,0.164119,1.0,0.527870,0.164515,1.0,0.516360,0.174954,1.0,0.510958,0.181218,1.0,0.512836,0.174954,1.0,0.504146,0.192075,1.0,0.498039,0.200427,1.0,0.512602,0.182053,1.0,0.503676,0.197921,1.0,0.497569,0.211284,1.0,0.514716,0.191240,1.0,0.507904,0.204603,1.0,0.503911,0.219218,1.0,0.520118,0.197921,1.0,0.516125,0.204603,1.0,0.514481,0.211702,1.0,0.464750,0.447408,1.0,0.464750,0.447408,1.0,0.472411,0.651769,1.0,0.470924,0.793502,1.0,0.470924,0.793502,1.0,0.513799,0.447333,1.0,0.513799,0.447333,1.0,0.519979,0.657273,1.0,0.521437,0.790754,1.0,0.521437,0.790754,1.0
0.490038,0.425650,1.0,0.488327,0.253956,1.0,0.488898,0.311187,1.0,0.487757,0.196724,1.0,0.454755,0.116190,1.0,0.460113,0.114851,1.0,0.460113,0.114851,1.0,0.449396,0.117530,1.0,0.449396,0.117530,1.0,0.469350,0.200747,1.0,0.450942,0.204769,1.0,0.406468,0.177595,1.0,0.386535,0.144914,1.0,0.384960,0.101006,1.0,0.374264,0.139650,1.0,0.374092,0.105913,1.0,0.374092,0.106526,1.0,0.375989,0.124929,1.0,0.375989,0.123088,1.0,0.380302,0.139650,1.0,0.373746,0.123088,1.0,0.376334,0.123702,1.0,0.379785,0.140877,1.0,0.366673,0.119101,1.0,0.367708,0.122781,1.0,0.377715,0.142410,1.0,0.366156,0.124929,1.0,0.365466,0.125542,1.0,0.507668,0.191305,1.0,0.527578,0.185885,1.0,0.570557,0.109499,1.0,0.532224,0.093044,1.0,0.514890,0.096333,1.0,0.511545,0.114565,1.0,0.516896,0.159747,1.0,0.511991,0.113772,1.0,0.512660,0.139534,1.0,0.504634,0.152614,1.0,0.510654,0.117339,1.0,0.509539,0.140327,1.0,0.509985,0.159747,1.0,0.511991,0.119718,1.0,0.511768,0.152614,1.0,0.510431,0.159747,1.0,0.514221,0.142308,1.0,0.515335,0.140723,1.0,0.516227,0.154199,1.0,0.464757,0.425681,1.0,0.464757,0.425681,1.0,0.470928,0.638165,1.0,0.469369,0.779894,1.0,0.469369,0.779894,1.0,0.515319,0.425619,1.0,0.515319,0.425619,1.0,0.519974,0.640867,1.0,0.521474,0.779871,1.0,0.521474,0.779871,1.0
0.490044,0.416047,1.0,0.487198,0.241341,1.0,0.488146,0.299576,1.0,0.486249,0.183106,1.0,0.453193,0.105380,1.0,0.458529,0.101319,1.0,0.458529,0.101319,1.0,0.447857,0.109440,1.0,0.447857,0.109440,1.0,0.467846,0.184503,1.0,0.449444,0.185901,1.0,0.397313,0.123069,1.0,0.378911,0.052208,1.0,0.373069,0.037450,1.0,0.372607,0.032931,1.0,0.383004,0.016912,1.0,0.373763,0.045665,1.0,0.376997,0.043200,1.0,0.382773,0.036628,1.0,0.381618,0.047718,1.0,0.381618,0.042789,1.0,0.380232,0.032931,1.0,0.377691,0.055112,1.0,0.373069,0.069488,1.0,0.376535,0.070309,1.0,0.393170,0.022663,1.0,0.390629,0.023895,1.0,0.386932,0.020609,1.0,0.505387,0.178995,1.0,0.524526,0.174885,1.0,0.561339,0.068599,1.0,0.523016,0.033164,1.0,0.510881,0.037955,1.0,0.516032,0.024676,1.0,0.519381,0.015060,1.0,0.519381,0.026965,1.0,0.520154,0.026050,1.0,0.525818,0.029255,1.0,0.521958,0.026965,1.0,0.522214,0.029255,1.0,0.521698,0.024218,1.0,0.521443,0.041160,1.0,0.521698,0.023302,1.0,0.521698,0.024218,1.0,0.519896,0.026507,1.0,0.521443,0.023302,1.0,0.521443,0.023760,1.0,0.464739,0.414676,1.0,0.464739,0.414676,1.0,0.470919,0.621844,1.0,0.463244,0.771745,1.0,0.463244,0.771745,1.0,0.515350,0.417418,1.0,0.515350,0.417418,1.0,0.519991,0.629952,1.0,0.521406,0.758115,1.0,0.521406,0.758115,1.0
0.490056,0.406553,1.0,0.487194,0.232822,1.0,0.488148,0.290733,1.0,0.486241,0.174912,1.0,0.452458,0.104053,1.0,0.457098,0.101338,1.0,0.457098,0.101338,1.0,0.447817,0.106769,1.0,0.447817,0.106769,1.0,0.467836,0.178947,1.0,0.449431,0.182981,1.0,0.398849,0.095848,1.0,0.385040,0.005877,1.0,0.384359,0.024418,1.0,0.384617,0.021662,1.0,0.384617,0.021662,1.0,0.389785,0.021662,1.0,0.386943,-0.038052,1.0,0.388235,-0.034378,1.0,0.381517,0.020284,1.0,0.387718,-0.034378,1.0,0.388493,-0.032081,1.0,0.381258,0.020744,1.0,0.388752,-0.032081,1.0,0.389527,-0.030244,1.0,0.394953,0.013394,1.0,0.397278,0.016610,1.0,0.389268,-0.032540,1.0,0.504644,0.169477,1.0,0.523047,0.164043,1.0,0.555146,0.035981,1.0,0.526057,0.007221,1.0,0.531214,0.037847,1.0,0.520509,0.015731,1.0,0.518773,0.016245,1.0,0.518773,0.015217,1.0,0.519352,0.009559,1.0,0.527453,0.031675,1.0,0.523401,0.020874,1.0,0.523979,0.024475,1.0,0.524271,0.026018,1.0,0.524557,0.020360,1.0,0.503729,0.039904,1.0,0.503729,0.042476,1.0,0.524849,0.019846,1.0,0.524271,0.021389,1.0,0.524271,0.023446,1.0,0.464771,0.406532,1.0,0.464771,0.406532,1.0,0.472371,0.616368,1.0,0.460204,0.752683,1.0,0.460204,0.752683,1.0,0.515341,0.406574,1.0,0.515341,0.406574,1.0,0.519905,0.621795,1.0,0.519961,0.752614,1.0,0.519961,0.752614,1.0
0.491576,0.413322,1.0,0.487568,0.232479,1.0,0.488904,0.292760,1.0,0.486232,0.172198,1.0,0.451706,0.110875,1.0,0.457096,0.106784,1.0,0.457096,0.106784,1.0,0.446316,0.114967,1.0,0.446316,0.114967,1.0,0.467828,0.177618,1.0,0.449423,0.183038,1.0,0.408032,0.093018,1.0,0.398766,0.005879,1.0,0.395709,0.018923,1.0,0.397868,0.016790,1.0,0.398348,0.015937,1.0,0.399547,0.015511,1.0,0.397389,-0.001977,1.0,0.404586,-0.032261,1.0,0.398108,0.002715,1.0,0.404826,-0.031408,1.0,0.405066,-0.030555,1.0,0.400267,0.015084,1.0,0.406025,-0.029275,1.0,0.406025,-0.028849,1.0,0.407705,-0.010934,1.0,0.405785,-0.031408,1.0,0.406025,-0.030128,1.0,0.504613,0.168061,1.0,0.522995,0.163923,1.0,0.547531,0.033207,1.0,0.530641,0.007226,1.0,0.553219,0.025951,1.0,0.524495,0.019379,1.0,0.524214,0.020390,1.0,0.526771,-0.007414,1.0,0.527625,-0.006908,1.0,0.528760,-0.009941,1.0,0.527906,-0.010447,1.0,0.528479,-0.011458,1.0,0.528760,-0.010952,1.0,0.528193,-0.010447,1.0,0.528479,-0.011458,1.0,0.528479,-0.011458,1.0,0.528479,-0.009436,1.0,0.528760,-0.004381,1.0,0.529047,-0.010952,1.0,0.466294,0.414686,1.0,0.466294,0.414686,1.0,0.473966,0.613585,1.0,0.460159,0.755440,1.0,0.460159,0.755440,1.0,0.516858,0.411958,1.0,0.516858,0.411958,1.0,0.518358,0.621811,1.0,0.519943,0.758068,1.0,0.519943,0.758068,1.0
0.492317,0.422835,1.0,0.490026,0.236871,1.0,0.490790,0.298859,1.0,0.489262,0.174883,1.0,0.451692,0.118945,1.0,0.457032,0.117566,1.0,0.457032,0.117566,1.0,0.446352,0.120325,1.0,0.446352,0.120325,1.0,0.469364,0.178978,1.0,0.449466,0.183073,1.0,0.411032,0.090426,1.0,0.411106,0.005883,1.0,0.407567,0.019370,1.0,0.408280,0.021904,1.0,0.408992,0.021904,1.0,0.411843,0.017681,1.0,0.411605,0.002056,1.0,0.418732,-0.032151,1.0,0.412318,0.006701,1.0,0.419207,-0.031729,1.0,0.420157,-0.030040,1.0,0.412080,0.007545,1.0,0.421107,-0.029195,1.0,0.421582,-0.027928,1.0,0.421820,0.012613,1.0,0.424908,0.021059,1.0,0.425145,0.022326,1.0,0.508418,0.169401,1.0,0.527573,0.163919,1.0,0.547510,0.035997,1.0,0.530677,0.007222,1.0,0.543750,0.026943,1.0,0.525396,0.021100,1.0,0.525125,0.021100,1.0,0.526495,0.017691,1.0,0.539917,0.010874,1.0,0.540188,0.009900,1.0,0.531151,0.008439,1.0,0.538818,0.009900,1.0,0.539094,0.008439,1.0,0.531422,0.007465,1.0,0.536625,0.007465,1.0,0.534437,0.007952,1.0,0.532245,0.006978,1.0,0.531151,0.004056,1.0,0.531422,0.007465,1.0,0.466282,0.422866,1.0,0.466282,0.422866,1.0,0.476998,0.621906,1.0,0.461680,0.793447,1.0,0.461680,0.793447,1.0,0.518353,0.422805,1.0,0.518353,0.422805,1.0,0.509246,0.624556,1.0,0.519950,0.793414,1.0,0.519950,0.793414,1.0
0.492317,0.422835,1.0,0.490026,0.236871,1.0,0.490790,0.298859,1.0,0.489262,0.174883,1.0,0.451692,0.118945,1.0,0.457032,0.117566,1.0,0.457032,0.117566,1.0,0.446352,0.120325,1.0,0.446352,0.120325,1.0,0.469364,0.178978,1.0,0.449466,0.183073,1.0,0.411032,0.090426,1.0,0.411106,0.005883,1.0,0.407567,0.019370,1.0,0.408280,0.021904,1.0,0.408992,0.021904,1.0,0.411843,0.017681,1.0,0.411605,0.002056,1.0,0.418732,-0.032151,1.0,0.412318,0.006701,1.0,0.419207,-0.031729,1.0,0.420157,-0.030040,1.0,0.412080,0.007545,1.0,0.421107,-0.029195,1.0,0.421582,-0.027928,1.0,0.421820,0.012613,1.0,0.424908,0.021059,1.0,0.425145,0.022326,1.0,0.508418,0.169401,1.0,0.527573,0.163919,1.0,0.547510,0.035997,1.0,0.530677,0.007222,1.0,0.543750,0.026943,1.0,0.525396,0.021100,1.0,0.525125,0.021100,1.0,0.526495,0.017691,1.0,0.539917,0.010874,1.0,0.540188,0.009900,1.0,0.531151,0.008439,1.0,0.538818,0.009900,1.0,0.539094,0.008439,1.0,0.531422,0.007465,1.0,0.536625,0.007465,1.0,0.534437,0.007952,1.0,0.532245,0.006978,1.0,0.531151,0.004056,1.0,0.531422,0.007465,1.0,0.466282,0.422866,1.0,0.466282,0.422866,1.0,0.476998,0.621906,1.0,0.461680,0.793447,1.0,0.461680,0.793447,1.0,0.518353,0.422805,1.0,0.518353,0.422805,1.0,0.509246,0.624556,1.0,0.519950,0.793414,1.0,0.519950,0.793414,1.0
0.490033,0.424275,1.0,0.487195,0.245369,1.0,0.488141,0.305004,1.0,0.486249,0.185733,1.0,0.451671,0.132585,1.0,0.457061,0.128517,1.0,0.457061,0.128517,1.0,0.446280,0.136653,1.0,0.446280,0.136653,1.0,0.467851,0.185812,1.0,0.449452,0.185890,1.0,0.412670,0.095709,1.0,0.426398,0.007186,1.0,0.422424,0.015977,1.0,0.423114,0.018020,1.0,0.427251,0.011482,1.0,0.427941,0.009438,1.0,0.426332,0.004943,1.0,0.435296,-0.030608,1.0,0.427941,0.007804,1.0,0.436216,-0.029791,1.0,0.436445,-0.028974,1.0,0.427251,0.008621,1.0,0.436905,-0.028565,1.0,0.437135,-0.027748,1.0,0.439434,-0.008542,1.0,0.440123,0.009438,1.0,0.440583,0.020063,1.0,0.504638,0.184370,1.0,0.523026,0.183007,1.0,0.547505,0.052321,1.0,0.521500,0.007219,1.0,0.519737,0.019622,1.0,0.518600,0.020632,1.0,0.514052,0.018611,1.0,0.514336,0.017601,1.0,0.512915,0.014063,1.0,0.512347,0.014063,1.0,0.528547,0.014569,1.0,0.516042,0.026191,1.0,0.520305,0.045392,1.0,0.528547,0.014569,1.0,0.520590,0.045897,1.0,0.519737,0.046403,1.0,0.517747,0.019116,1.0,0.518031,0.018611,1.0,0.520875,0.049940,1.0,0.464749,0.425629,1.0,0.464749,0.425629,1.0,0.480048,0.632672,1.0,0.469358,0.793479,1.0,0.469358,0.793479,1.0,0.515316,0.422921,1.0,0.515316,0.422921,1.0,0.509146,0.635430,1.0,0.519880,0.788086,1.0,0.519880,0.788086,1.0
0.490033,0.436510,1.0,0.490592,0.254617,1.0,0.490406,0.315248,1.0,0.490779,0.193986,1.0,0.451717,0.140862,1.0,0.457089,0.139492,1.0,0.457089,0.139492,1.0,0.446346,0.142232,1.0,0.446346,0.142232,1.0,0.473155,0.198073,1.0,0.455532,0.202159,1.0,0.421758,0.112131,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.508426,0.189919,1.0,0.526073,0.185853,1.0,0.547583,0.071211,1.0,0.516863,0.007198,1.0,0.515702,0.020654,1.0,0.510964,0.019767,1.0,0.509717,0.019767,1.0,0.509966,0.019767,1.0,0.509966,-0.002399,1.0,0.498495,-0.037423,1.0,0.510216,-0.006389,1.0,0.510465,-0.004616,1.0,0.510465,-0.004616,1.0,0.509717,-0.005503,1.0,0.509717,-0.005059,1.0,0.509966,-0.005059,1.0,0.509218,-0.003286,1.0,0.501737,0.021984,1.0,0.509218,-0.003286,1.0,0.463240,0.436499,1.0,0.463240,0.436499,1.0,0.481583,0.635475,1.0,0.470916,0.796283,1.0,0.470916,0.796283,1.0,0.516826,0.436520,1.0,0.516826,0.436520,1.0,0.509143,0.640934,1.0,0.516848,0.796249,1.0,0.516848,0.796249,1.0
0.491553,0.444687,1.0,0.490986,0.264789,1.0,0.491175,0.324755,1.0,0.490797,0.204823,1.0,0.450969,0.151703,1.0,0.457096,0.147599,1.0,0.457096,0.147599,1.0,0.444842,0.155806,1.0,0.444842,0.155806,1.0,0.473153,0.206159,1.0,0.455508,0.207494,1.0,0.421843,0.114906,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.508438,0.202132,1.0,0.526078,0.199441,1.0,0.550578,0.076702,1.0,0.509267,0.007202,1.0,0.507729,0.021533,1.0,0.501279,0.007677,1.0,0.501010,0.006244,1.0,0.500742,0.008633,1.0,0.503160,0.005766,1.0,0.503429,0.004811,1.0,0.501548,0.005289,1.0,0.503429,0.004811,1.0,0.503698,0.002900,1.0,0.501548,0.005289,1.0,0.505042,0.002900,1.0,0.504504,0.003855,1.0,0.507192,0.006722,1.0,0.505310,0.002422,1.0,0.504773,0.001944,1.0,0.466270,0.444747,1.0,0.466270,0.444747,1.0,0.481617,0.638144,1.0,0.470928,0.796349,1.0,0.470928,0.796349,1.0,0.516836,0.444626,1.0,0.516836,0.444626,1.0,0.507714,0.643557,1.0,0.518343,0.793547,1.0,0.518343,0.793547,1.0
0.489285,0.446037,1.0,0.491553,0.267207,1.0,0.490797,0.326817,1.0,0.492309,0.207597,1.0,0.452407,0.155831,1.0,0.458528,0.153088,1.0,0.458528,0.153088,1.0,0.446286,0.158574,1.0,0.446286,0.158574,1.0,0.475426,0.208966,1.0,0.458543,0.210335,1.0,0.421883,0.120278,1.0,0.446294,0.024942,1.0,0.456510,0.017818,1.0,0.465397,0.019526,1.0,0.466357,0.013548,1.0,0.467318,0.007998,1.0,0.468279,0.004582,1.0,0.467798,0.005436,1.0,0.467318,0.007571,1.0,0.468039,0.006717,1.0,0.468039,0.004582,1.0,0.466837,0.008852,1.0,0.468279,0.007571,1.0,0.466357,0.006290,1.0,0.464917,0.015683,1.0,0.467558,0.017818,1.0,0.466597,0.005863,1.0,0.508433,0.206234,1.0,0.524557,0.204870,1.0,0.553646,0.079496,1.0,0.510736,0.007203,1.0,0.506371,0.019665,1.0,0.484822,0.007227,1.0,0.484543,0.004739,1.0,0.483143,0.001257,1.0,0.503573,0.007227,1.0,0.497136,0.001257,1.0,0.486781,0.003247,1.0,0.492379,0.003247,1.0,0.491259,0.003247,1.0,0.487061,0.003247,1.0,0.493218,0.003247,1.0,0.503573,0.004242,1.0,0.503853,0.004739,1.0,0.506092,0.002749,1.0,0.502453,0.004739,1.0,0.464756,0.447363,1.0,0.464756,0.447363,1.0,0.480067,0.640890,1.0,0.470916,0.799031,1.0,0.470916,0.799031,1.0,0.513814,0.444711,1.0,0.513814,0.444711,1.0,0.507677,0.643664,1.0,0.518346,0.793560,1.0,0.518346,0.793560,1.0
0.487754,0.447402,1.0,0.490051,0.269555,1.0,0.489285,0.328838,1.0,0.490817,0.210273,1.0,0.452423,0.157113,1.0,0.458569,0.153111,1.0,0.458569,0.153111,1.0,0.446277,0.161116,1.0,0.446277,0.161116,1.0,0.474686,0.210345,1.0,0.458556,0.210417,1.0,0.423316,0.120462,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.507682,0.208931,1.0,0.524547,0.207590,1.0,0.555156,0.079479,1.0,0.518379,0.007200,1.0,0.511413,0.021133,1.0,0.505381,0.004794,1.0,0.505094,0.004283,1.0,0.504520,0.004794,1.0,0.508828,0.005304,1.0,0.507392,0.004283,1.0,0.503945,0.005815,1.0,0.503658,0.005815,1.0,0.503945,0.005304,1.0,0.502509,0.006326,1.0,0.501935,0.006836,1.0,0.491882,0.007347,1.0,0.502222,0.025218,1.0,0.497914,0.009900,1.0,0.493605,0.006836,1.0,0.463226,0.447445,1.0,0.463226,0.447445,1.0,0.477010,0.640947,1.0,0.470924,0.801666,1.0,0.470924,0.801666,1.0,0.512282,0.447359,1.0,0.512282,0.447359,1.0,0.507664,0.643663,1.0,0.518417,0.796223,1.0,0.518417,0.796223,1.0
0.487754,0.447402,1.0,0.490051,0.269555,1.0,0.489285,0.328838,1.0,0.490817,0.210273,1.0,0.452423,0.157113,1.0,0.458569,0.153111,1.0,0.458569,0.153111,1.0,0.446277,0.161116,1.0,0.446277,0.161116,1.0,0.474686,0.210345,1.0,0.458556,0.210417,1.0,0.423316,0.120462,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.507682,0.208931,1.0,0.524547,0.207590,1.0,0.555156,0.079479,1.0,0.518379,0.007200,1.0,0.511413,0.021133,1.0,0.505381,0.004794,1.0,0.505094,0.004283,1.0,0.504520,0.004794,1.0,0.508828,0.005304,1.0,0.507392,0.004283,1.0,0.503945,0.005815,1.0,0.503658,0.005815,1.0,0.503945,0.005304,1.0,0.502509,0.006326,1.0,0.501935,0.006836,1.0,0.491882,0.007347,1.0,0.502222,0.025218,1.0,0.497914,0.009900,1.0,0.493605,0.006836,1.0,0.463226,0.447445,1.0,0.463226,0.447445,1.0,0.477010,0.640947,1.0,0.470924,0.801666,1.0,0.470924,0.801666,1.0,0.512282,0.447359,1.0,0.512282,0.447359,1.0,0.507664,0.643663,1.0,0.518417,0.796223,1.0,0.518417,0.796223,1.0
0.488514,0.443244,1.0,0.491386,0.266452,1.0,0.490429,0.325383,1.0,0.492343,0.207521,1.0,0.452472,0.153073,1.0,0.458594,0.147680,1.0,0.458594,0.147680,1.0,0.446349,0.158467,1.0,0.446349,0.158467,1.0,0.475481,0.207574,1.0,0.458619,0.207627,1.0,0.421855,0.123111,1.0,0.434024,0.022200,1.0,0.434964,0.008671,1.0,0.439223,0.004464,1.0,0.448451,0.004043,1.0,0.436383,0.008250,1.0,0.442062,0.001099,1.0,0.432834,0.009933,1.0,0.435200,0.007829,1.0,0.438749,0.004043,1.0,0.434727,0.004043,1.0,0.435200,0.006988,1.0,0.438276,0.004043,1.0,0.432124,0.009512,1.0,0.438040,0.004043,1.0,0.438513,0.004043,1.0,0.431414,0.010353,1.0,0.509190,0.206199,1.0,0.526036,0.204877,1.0,0.558208,0.079598,1.0,0.530656,0.007191,1.0,0.525260,0.029270,1.0,0.531229,0.021692,1.0,0.515312,0.020682,1.0,0.516450,0.010072,1.0,0.517586,0.008557,1.0,0.517586,0.009567,1.0,0.516165,0.010578,1.0,0.518723,0.006536,1.0,0.518155,0.010072,1.0,0.516450,0.011083,1.0,0.519007,0.006536,1.0,0.518155,0.010072,1.0,0.517870,0.012599,1.0,0.517302,0.010578,1.0,0.517586,0.010578,1.0,0.464735,0.444575,1.0,0.464735,0.444575,1.0,0.475490,0.640858,1.0,0.470822,0.801730,1.0,0.470822,0.801730,1.0,0.512292,0.441914,1.0,0.512292,0.441914,1.0,0.507660,0.643705,1.0,0.519944,0.801680,1.0,0.519944,0.801680,1.0
0.488524,0.435137,1.0,0.492492,0.260405,1.0,0.491170,0.318649,1.0,0.493815,0.202161,1.0,0.452489,0.140908,1.0,0.458572,0.139493,1.0,0.458572,0.139493,1.0,0.446407,0.142324,1.0,0.446407,0.142324,1.0,0.476198,0.203489,1.0,0.458582,0.204817,1.0,0.412656,0.133995,1.0,0.420291,0.027591,1.0,0.418137,0.029205,1.0,0.417399,0.011716,1.0,0.431418,0.005595,1.0,0.418137,0.007781,1.0,0.419858,0.013902,1.0,0.432156,0.004720,1.0,0.418875,0.009093,1.0,0.428466,0.008218,1.0,0.431418,0.004720,1.0,0.419612,0.010404,1.0,0.419612,0.012153,1.0,0.432402,0.036201,1.0,0.419612,0.012153,1.0,0.419121,0.012153,1.0,0.433139,0.038387,1.0,0.510707,0.200775,1.0,0.527599,0.199390,1.0,0.567448,0.079560,1.0,0.544484,0.007194,1.0,0.548682,0.019060,1.0,0.544661,0.014974,1.0,0.544089,0.014464,1.0,0.546672,0.017017,1.0,0.547245,0.006804,1.0,0.540927,-0.036603,1.0,0.545234,0.010378,1.0,0.540927,-0.036092,1.0,0.540354,-0.035071,1.0,0.545234,0.011400,1.0,0.540063,-0.034560,1.0,0.538052,-0.033028,1.0,0.536328,0.016506,1.0,0.530297,0.010889,1.0,0.528865,0.009868,1.0,0.463247,0.433812,1.0,0.463247,0.433812,1.0,0.472404,0.640888,1.0,0.466251,0.796295,1.0,0.466251,0.796295,1.0,0.513802,0.436461,1.0,0.513802,0.436461,1.0,0.509152,0.643646,1.0,0.521526,0.804418,1.0,0.521526,0.804418,1.0
0.487766,0.425603,1.0,0.492358,0.253876,1.0,0.490828,0.311118,1.0,0.493889,0.196633,1.0,0.454030,0.125828,1.0,0.460123,0.123102,1.0,0.460123,0.123102,1.0,0.447937,0.128554,1.0,0.447937,0.128554,1.0,0.476261,0.200678,1.0,0.458633,0.204723,1.0,0.408035,0.158480,1.0,0.401922,0.046746,1.0,0.404539,0.030465,1.0,0.406855,0.021771,1.0,0.420754,0.021771,1.0,0.421011,0.017195,1.0,0.419210,0.018568,1.0,0.412775,0.024974,1.0,0.408914,0.022686,1.0,0.405310,0.031838,1.0,0.417151,0.007128,1.0,0.422814,0.007586,1.0,0.404796,0.035498,1.0,0.415349,0.008043,1.0,0.407113,0.026347,1.0,0.417151,0.004383,1.0,0.413032,0.026804,1.0,0.511512,0.191256,1.0,0.529135,0.185878,1.0,0.581297,0.095796,1.0,0.565906,0.005874,1.0,0.569630,0.020308,1.0,0.568297,0.020782,1.0,0.563760,0.013194,1.0,0.563760,0.013194,1.0,0.566427,0.004657,1.0,0.561094,-0.035657,1.0,0.565896,0.011771,1.0,0.561094,-0.034235,1.0,0.560026,-0.032812,1.0,0.566161,0.012245,1.0,0.559224,-0.032812,1.0,0.556021,-0.030915,1.0,0.567760,0.013668,1.0,0.549089,0.009874,1.0,0.548818,0.010348,1.0,0.463245,0.425618,1.0,0.463245,0.425618,1.0,0.467827,0.638195,1.0,0.455534,0.809830,1.0,0.455534,0.809830,1.0,0.512286,0.425589,1.0,0.512286,0.425589,1.0,0.518368,0.643608,1.0,0.532229,0.796303,1.0,0.532229,0.796303,1.0
0.487718,0.427005,1.0,0.490033,0.254244,1.0,0.489261,0.311831,1.0,0.490805,0.196657,1.0,0.458605,0.117518,1.0,0.464750,0.117504,1.0,0.464750,0.117504,1.0,0.452460,0.117531,1.0,0.452460,0.117531,1.0,0.473169,0.199383,1.0,0.455534,0.202109,1.0,0.398878,0.193933,1.0,0.394196,0.087693,1.0,0.392162,0.089121,1.0,0.391429,0.073483,1.0,0.399247,0.043077,1.0,0.405845,0.064796,1.0,0.407310,0.056108,1.0,0.407066,0.043077,1.0,0.395338,0.065665,1.0,0.398515,0.058715,1.0,0.401447,0.047855,1.0,0.395338,0.068705,1.0,0.397782,0.064361,1.0,0.398270,0.064361,1.0,0.391429,0.076958,1.0,0.393139,0.067402,1.0,0.393384,0.067402,1.0,0.508431,0.192577,1.0,0.526057,0.188496,1.0,0.595031,0.125818,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.463191,0.428391,1.0,0.463191,0.428391,1.0,0.458611,0.640834,1.0,0.437183,0.798967,1.0,0.437183,0.798967,1.0,0.512246,0.425619,1.0,0.512246,0.425619,1.0,0.521479,0.643669,1.0,0.546000,0.793546,1.0,0.546000,0.793546,1.0
0.489255,0.426977,1.0,0.489279,0.260435,1.0,0.489271,0.315949,1.0,0.489287,0.204920,1.0,0.465495,0.113511,1.0,0.472416,0.112168,1.0,0.472416,0.112168,1.0,0.458574,0.114854,1.0,0.458574,0.114854,1.0,0.473174,0.207668,1.0,0.457061,0.210415,1.0,0.403431,0.248431,1.0,0.386494,0.155788,1.0,0.386934,0.152217,1.0,0.396762,0.124819,1.0,0.383361,0.108936,1.0,0.386265,0.146260,1.0,0.384701,0.119656,1.0,0.384701,0.110127,1.0,0.386711,0.145863,1.0,0.384478,0.126407,1.0,0.385148,0.110921,1.0,0.386488,0.146260,1.0,0.383808,0.127201,1.0,0.385148,0.143878,1.0,0.385371,0.146657,1.0,0.383584,0.123231,1.0,0.385594,0.108936,1.0,0.506144,0.199434,1.0,0.523000,0.193948,1.0,0.602729,0.183007,1.0,0.595042,0.055111,1.0,0.598401,0.057993,1.0,0.597219,0.044362,1.0,0.595453,0.034400,1.0,0.595745,0.029682,1.0,0.590734,0.011332,1.0,0.583948,0.003992,1.0,0.593385,0.030730,1.0,0.587193,0.010283,1.0,0.579526,0.004516,1.0,0.591323,0.031779,1.0,0.584542,0.017623,1.0,0.579526,0.007138,1.0,0.588964,0.035449,1.0,0.585427,0.022342,1.0,0.583656,0.010808,1.0,0.464729,0.428362,1.0,0.464729,0.428362,1.0,0.447950,0.643523,1.0,0.423304,0.804365,1.0,0.423304,0.804365,1.0,0.513780,0.425593,1.0,0.513780,0.425593,1.0,0.532203,0.649056,1.0,0.559833,0.790806,1.0,0.559833,0.790806,1.0
0.489255,0.426977,1.0,0.489279,0.260435,1.0,0.489271,0.315949,1.0,0.489287,0.204920,1.0,0.465495,0.113511,1.0,0.472416,0.112168,1.0,0.472416,0.112168,1.0,0.458574,0.114854,1.0,0.458574,0.114854,1.0,0.473174,0.207668,1.0,0.457061,0.210415,1.0,0.403431,0.248431,1.0,0.386494,0.155788,1.0,0.386934,0.152217,1.0,0.396762,0.124819,1.0,0.383361,0.108936,1.0,0.386265,0.146260,1.0,0.384701,0.119656,1.0,0.384701,0.110127,1.0,0.386711,0.145863,1.0,0.384478,0.126407,1.0,0.385148,0.110921,1.0,0.386488,0.146260,1.0,0.383808,0.127201,1.0,0.385148,0.143878,1.0,0.385371,0.146657,1.0,0.383584,0.123231,1.0,0.385594,0.108936,1.0,0.506144,0.199434,1.0,0.523000,0.193948,1.0,0.602729,0.183007,1.0,0.595042,0.055111,1.0,0.598401,0.057993,1.0,0.597219,0.044362,1.0,0.595453,0.034400,1.0,0.595745,0.029682,1.0,0.590734,0.011332,1.0,0.583948,0.003992,1.0,0.593385,0.030730,1.0,0.587193,0.010283,1.0,0.579526,0.004516,1.0,0.591323,0.031779,1.0,0.584542,0.017623,1.0,0.579526,0.007138,1.0,0.588964,0.035449,1.0,0.585427,0.022342,1.0,0.583656,0.010808,1.0,0.464729,0.428362,1.0,0.464729,0.428362,1.0,0.447950,0.643523,1.0,0.423304,0.804365,1.0,0.423304,0.804365,1.0,0.513780,0.425593,1.0,0.513780,0.425593,1.0,0.532203,0.649056,1.0,0.559833,0.790806,1.0,0.559833,0.790806,1.0
0.490032,0.444660,1.0,0.487192,0.281127,1.0,0.488139,0.335638,1.0,0.486245,0.226616,1.0,0.477728,0.135358,1.0,0.481607,0.120331,1.0,0.481607,0.120331,1.0,0.461718,0.120372,1.0,0.461718,0.120372,1.0,0.469355,0.229362,1.0,0.452466,0.232109,1.0,0.417192,0.313771,1.0,0.385051,0.226648,1.0,0.356289,0.213186,1.0,0.357483,0.166470,1.0,0.359872,0.186006,1.0,0.371339,0.194075,1.0,0.361783,0.210638,1.0,0.361544,0.209788,1.0,0.361305,0.195774,1.0,0.361544,0.210638,1.0,0.361783,0.210638,1.0,0.361305,0.195774,1.0,0.361066,0.211062,1.0,0.361783,0.211487,1.0,0.359872,0.189404,1.0,0.360589,0.189404,1.0,0.367516,0.205542,1.0,0.504615,0.219803,1.0,0.522984,0.212990,1.0,0.596547,0.248546,1.0,0.607307,0.139311,1.0,0.609458,0.129615,1.0,0.611693,0.113705,1.0,0.608896,0.095806,1.0,0.607781,0.109727,1.0,0.607500,0.090336,1.0,0.603307,0.078404,1.0,0.601906,0.109727,1.0,0.601906,0.086856,1.0,0.600510,0.074923,1.0,0.597432,0.108732,1.0,0.599109,0.087353,1.0,0.596313,0.076912,1.0,0.594078,0.105252,1.0,0.592677,0.088845,1.0,0.592396,0.080890,1.0,0.464726,0.447346,1.0,0.464726,0.447346,1.0,0.446268,0.654494,1.0,0.409539,0.798968,1.0,0.409539,0.798968,1.0,0.515338,0.441974,1.0,0.515338,0.441974,1.0,0.541365,0.662620,1.0,0.579729,0.782649,1.0,0.579729,0.782649,1.0
0.487011,0.462325,1.0,0.488690,0.301939,1.0,0.488131,0.355401,1.0,0.489250,0.248478,1.0,0.479303,0.157109,1.0,0.484757,0.139562,1.0,0.484757,0.139562,1.0,0.470828,0.139569,1.0,0.470828,0.139569,1.0,0.473143,0.251188,1.0,0.457036,0.253897,1.0,0.434086,0.360272,1.0,0.389663,0.294791,1.0,0.361126,0.279037,1.0,0.361126,0.260219,1.0,0.361361,0.260219,1.0,0.390763,0.258128,1.0,0.359244,0.286564,1.0,0.357597,0.287400,1.0,0.358773,0.285309,1.0,0.359008,0.287400,1.0,0.358303,0.287819,1.0,0.357127,0.285727,1.0,0.360890,0.298272,1.0,0.363243,0.289909,1.0,0.356892,0.286564,1.0,0.360890,0.300363,1.0,0.362537,0.301199,1.0,0.506122,0.243043,1.0,0.522995,0.237607,1.0,0.581281,0.316556,1.0,0.607307,0.215794,1.0,0.611599,0.209305,1.0,0.615630,0.184456,1.0,0.611865,0.161518,1.0,0.613208,0.187800,1.0,0.609448,0.168685,1.0,0.608911,0.157694,1.0,0.607833,0.188756,1.0,0.605682,0.174897,1.0,0.604073,0.161518,1.0,0.604880,0.193056,1.0,0.602187,0.180632,1.0,0.601651,0.168685,1.0,0.603531,0.196402,1.0,0.600844,0.184456,1.0,0.600042,0.179198,1.0,0.463232,0.466381,1.0,0.463232,0.466381,1.0,0.438705,0.670918,1.0,0.395718,0.809893,1.0,0.395718,0.809893,1.0,0.510790,0.458269,1.0,0.510790,0.458269,1.0,0.545917,0.681697,1.0,0.593531,0.793464,1.0,0.593531,0.793464,1.0
0.487013,0.489705,1.0,0.486447,0.331221,1.0,0.486636,0.384049,1.0,0.486258,0.278393,1.0,0.481602,0.184389,1.0,0.490774,0.166782,1.0,0.490774,0.166782,1.0,0.472392,0.166768,1.0,0.472392,0.166768,1.0,0.470147,0.285152,1.0,0.454037,0.291912,1.0,0.447874,0.411940,1.0,0.400416,0.362923,1.0,0.390724,0.351611,1.0,0.391470,0.332156,1.0,0.391719,0.333041,1.0,0.392962,0.333041,1.0,0.391470,0.331272,1.0,0.397936,0.362665,1.0,0.394454,0.348516,1.0,0.381770,0.346747,1.0,0.380527,0.348074,1.0,0.381273,0.344537,1.0,0.381273,0.346747,1.0,0.380527,0.346747,1.0,0.403408,0.360012,1.0,0.380527,0.346306,1.0,0.378040,0.358685,1.0,0.503863,0.274370,1.0,0.521469,0.270347,1.0,0.565922,0.379303,1.0,0.599667,0.294659,1.0,0.607188,0.283020,1.0,0.612188,0.276108,1.0,0.610245,0.247470,1.0,0.609688,0.237594,1.0,0.609688,0.245989,1.0,0.608854,0.233151,1.0,0.603021,0.252407,1.0,0.604969,0.245494,1.0,0.606354,0.236113,1.0,0.601354,0.281540,1.0,0.604135,0.249445,1.0,0.603021,0.246482,1.0,0.600245,0.282527,1.0,0.603302,0.252901,1.0,0.603021,0.251914,1.0,0.463238,0.491091,1.0,0.463238,0.491091,1.0,0.435669,0.698161,1.0,0.385088,0.817989,1.0,0.385088,0.817989,1.0,0.510789,0.488319,1.0,0.510789,0.488319,1.0,0.545969,0.706318,1.0,0.605781,0.796325,1.0,0.605781,0.796325,1.0
0.487739,0.514183,1.0,0.490052,0.363960,1.0,0.489281,0.414034,1.0,0.490822,0.313886,1.0,0.483894,0.215750,1.0,0.493832,0.204748,1.0,0.493832,0.204748,1.0,0.473930,0.204768,1.0,0.473930,0.204768,1.0,0.474679,0.315276,1.0,0.458535,0.316666,1.0,0.460219,0.441960,1.0,0.411024,0.420177,1.0,0.402807,0.421265,1.0,0.399186,0.388620,1.0,0.396082,0.386781,1.0,0.396600,0.388620,1.0,0.394014,0.389081,1.0,0.383928,0.393219,1.0,0.389876,0.396896,1.0,0.391945,0.401034,1.0,0.389876,0.409310,1.0,0.390652,0.396896,1.0,0.391945,0.405632,1.0,0.390652,0.413908,1.0,0.396082,0.382184,1.0,0.398410,0.419425,1.0,0.391945,0.418966,1.0,0.506924,0.312482,1.0,0.523026,0.311078,1.0,0.549068,0.422903,1.0,0.593448,0.354756,1.0,0.597354,0.347364,1.0,0.606099,0.336264,1.0,0.606099,0.316283,1.0,0.597854,0.318504,1.0,0.600354,0.311844,1.0,0.605349,0.299411,1.0,0.594859,0.323831,1.0,0.600854,0.312731,1.0,0.599604,0.313175,1.0,0.593109,0.330047,1.0,0.595859,0.322944,1.0,0.597354,0.317616,1.0,0.591859,0.334044,1.0,0.606349,0.330492,1.0,0.603349,0.322944,1.0,0.464730,0.515584,1.0,0.464730,0.515584,1.0,0.435625,0.722681,1.0,0.383516,0.826197,1.0,0.383516,0.826197,1.0,0.510749,0.512782,1.0,0.510749,0.512782,1.0,0.545995,0.725365,1.0,0.611927,0.815194,1.0,0.611927,0.815194,1.0
0.488505,0.537372,1.0,0.491373,0.386005,1.0,0.490417,0.436460,1.0,0.492330,0.335549,1.0,0.485461,0.238928,1.0,0.495336,0.226499,1.0,0.495336,0.226499,1.0,0.475456,0.226507,1.0,0.475456,0.226507,1.0,0.475442,0.335665,1.0,0.458555,0.335781,1.0,0.460181,0.460963,1.0,0.411048,0.444517,1.0,0.402069,0.436333,1.0,0.393801,0.425309,1.0,0.385533,0.417960,1.0,0.397160,0.407394,1.0,0.387858,0.407854,1.0,0.382949,0.407854,1.0,0.396643,0.411069,1.0,0.387600,0.409232,1.0,0.381399,0.411069,1.0,0.396127,0.418419,1.0,0.387858,0.413826,1.0,0.381657,0.414744,1.0,0.394059,0.426228,1.0,0.388892,0.420716,1.0,0.383466,0.420256,1.0,0.509188,0.332893,1.0,0.526047,0.330237,1.0,0.544391,0.447306,1.0,0.585844,0.379327,1.0,0.591750,0.380076,1.0,0.602781,0.366702,1.0,0.602531,0.349315,1.0,0.588990,0.360015,1.0,0.592250,0.343519,1.0,0.598521,0.336386,1.0,0.587234,0.359569,1.0,0.592500,0.343073,1.0,0.599021,0.337278,1.0,0.588740,0.360015,1.0,0.594005,0.344857,1.0,0.600276,0.351098,1.0,0.604036,0.365810,1.0,0.602781,0.354219,1.0,0.599271,0.352881,1.0,0.464719,0.537416,1.0,0.464719,0.537416,1.0,0.437193,0.730956,1.0,0.385040,0.828936,1.0,0.385040,0.828936,1.0,0.512291,0.537328,1.0,0.512291,0.537328,1.0,0.547516,0.733583,1.0,0.613448,0.817934,1.0,0.613448,0.817934,1.0
0.488505,0.537372,1.0,0.491373,0.386005,1.0,0.490417,0.436460,1.0,0.492330,0.335549,1.0,0.485461,0.238928,1.0,0.495336,0.226499,1.0,0.495336,0.226499,1.0,0.475456,0.226507,1.0,0.475456,0.226507,1.0,0.475442,0.335665,1.0,0.458555,0.335781,1.0,0.460181,0.460963,1.0,0.411048,0.444517,1.0,0.402069,0.436333,1.0,0.393801,0.425309,1.0,0.385533,0.417960,1.0,0.397160,0.407394,1.0,0.387858,0.407854,1.0,0.382949,0.407854,1.0,0.396643,0.411069,1.0,0.387600,0.409232,1.0,0.381399,0.411069,1.0,0.396127,0.418419,1.0,0.387858,0.413826,1.0,0.381657,0.414744,1.0,0.394059,0.426228,1.0,0.388892,0.420716,1.0,0.383466,0.420256,1.0,0.509188,0.332893,1.0,0.526047,0.330237,1.0,0.544391,0.447306,1.0,0.585844,0.379327,1.0,0.591750,0.380076,1.0,0.602781,0.366702,1.0,0.602531,0.349315,1.0,0.588990,0.360015,1.0,0.592250,0.343519,1.0,0.598521,0.336386,1.0,0.587234,0.359569,1.0,0.592500,0.343073,1.0,0.599021,0.337278,1.0,0.588740,0.360015,1.0,0.594005,0.344857,1.0,0.600276,0.351098,1.0,0.604036,0.365810,1.0,0.602781,0.354219,1.0,0.599271,0.352881,1.0,0.464719,0.537416,1.0,0.464719,0.537416,1.0,0.437193,0.730956,1.0,0.385040,0.828936,1.0,0.385040,0.828936,1.0,0.512291,0.537328,1.0,0.512291,0.537328,1.0,0.547516,0.733583,1.0,0.613448,0.817934,1.0,0.613448,0.817934,1.0
0.490796,0.533225,1.0,0.490800,0.385004,1.0,0.490799,0.434411,1.0,0.490802,0.335596,1.0,0.486954,0.240267,1.0,0.495359,0.226562,1.0,0.495359,0.226562,1.0,0.475491,0.226579,1.0,0.475491,0.226579,1.0,0.473943,0.336967,1.0,0.457084,0.338338,1.0,0.457089,0.458306,1.0,0.404974,0.428358,1.0,0.400154,0.432999,1.0,0.394708,0.403513,1.0,0.385548,0.397792,1.0,0.395451,0.399112,1.0,0.384558,0.395591,1.0,0.376884,0.402193,1.0,0.391737,0.411875,1.0,0.384558,0.405273,1.0,0.378617,0.406154,1.0,0.390994,0.413635,1.0,0.385548,0.414075,1.0,0.384558,0.418476,1.0,0.396441,0.399112,1.0,0.388519,0.423318,1.0,0.388767,0.423757,1.0,0.507653,0.334228,1.0,0.524505,0.332859,1.0,0.544495,0.447305,1.0,0.582854,0.379309,1.0,0.585865,0.358190,1.0,0.599219,0.364783,1.0,0.594521,0.334451,1.0,0.584875,0.365223,1.0,0.586609,0.341045,1.0,0.592542,0.330494,1.0,0.587844,0.368740,1.0,0.586609,0.341924,1.0,0.590813,0.334011,1.0,0.590318,0.372257,1.0,0.600948,0.359508,1.0,0.592542,0.348079,1.0,0.591802,0.373576,1.0,0.601937,0.361267,1.0,0.598479,0.362586,1.0,0.466281,0.534590,1.0,0.466281,0.534590,1.0,0.438659,0.733502,1.0,0.385089,0.828890,1.0,0.385089,0.828890,1.0,0.515310,0.531860,1.0,0.515310,0.531860,1.0,0.550578,0.730965,1.0,0.613443,0.817940,1.0,0.613443,0.817940,1.0
0.493058,0.522319,1.0,0.490225,0.368065,1.0,0.491169,0.419483,1.0,0.489280,0.316647,1.0,0.486961,0.225255,1.0,0.495348,0.207624,1.0,0.495348,0.207624,1.0,0.475486,0.207704,1.0,0.475486,0.207704,1.0,0.473161,0.320709,1.0,0.457043,0.324771,1.0,0.449392,0.439230,1.0,0.400394,0.403744,1.0,0.392787,0.389919,1.0,0.395404,0.406833,1.0,0.396593,0.406410,1.0,0.384938,0.361589,1.0,0.394928,0.368777,1.0,0.384463,0.366240,1.0,0.385176,0.379348,1.0,0.389457,0.379771,1.0,0.390884,0.393302,1.0,0.384701,0.376811,1.0,0.389219,0.379348,1.0,0.390171,0.392879,1.0,0.377327,0.366663,1.0,0.394928,0.366663,1.0,0.374473,0.376811,1.0,0.506164,0.315242,1.0,0.523047,0.313836,1.0,0.546010,0.425577,1.0,0.585839,0.357397,1.0,0.596286,0.345372,1.0,0.600214,0.315260,1.0,0.594813,0.313514,1.0,0.601438,0.340135,1.0,0.586464,0.315696,1.0,0.590391,0.305222,1.0,0.594073,0.353228,1.0,0.586219,0.318751,1.0,0.589901,0.327043,1.0,0.584995,0.357156,1.0,0.584010,0.339263,1.0,0.586219,0.337081,1.0,0.581312,0.356282,1.0,0.581312,0.354973,1.0,0.583276,0.350609,1.0,0.467777,0.523690,1.0,0.467777,0.523690,1.0,0.437152,0.717255,1.0,0.385054,0.826167,1.0,0.385054,0.826167,1.0,0.518340,0.520947,1.0,0.518340,0.520947,1.0,0.558193,0.708919,1.0,0.616479,0.812623,1.0,0.616479,0.812623,1.0
0.493855,0.492361,1.0,0.490409,0.342104,1.0,0.491558,0.392190,1.0,0.489260,0.292019,1.0,0.486177,0.196697,1.0,0.495378,0.183023,1.0,0.495378,0.183023,1.0,0.476983,0.182985,1.0,0.476983,0.182985,1.0,0.472393,0.293404,1.0,0.455526,0.294790,1.0,0.447838,0.406607,1.0,0.398826,0.373806,1.0,0.391717,0.361742,1.0,0.392879,0.374552,1.0,0.395204,0.376619,1.0,0.397993,0.369594,1.0,0.384511,0.330747,1.0,0.381721,0.329507,1.0,0.385906,0.345211,1.0,0.387068,0.344384,1.0,0.388695,0.361328,1.0,0.387301,0.346864,1.0,0.386603,0.344798,1.0,0.388230,0.360915,1.0,0.387068,0.348931,1.0,0.394971,0.334880,1.0,0.378467,0.338186,1.0,0.506146,0.289336,1.0,0.523031,0.286654,1.0,0.547536,0.400951,1.0,0.587359,0.319388,1.0,0.596969,0.312216,1.0,0.601005,0.286639,1.0,0.596214,0.282152,1.0,0.601766,0.308177,1.0,0.586370,0.281703,1.0,0.590656,0.272280,1.0,0.594443,0.319395,1.0,0.586115,0.284844,1.0,0.593437,0.283498,1.0,0.585609,0.323882,1.0,0.585359,0.304587,1.0,0.586875,0.307729,1.0,0.583339,0.320293,1.0,0.581823,0.322536,1.0,0.583844,0.316254,1.0,0.469316,0.493761,1.0,0.469316,0.493761,1.0,0.438681,0.690022,1.0,0.386633,0.818100,1.0,0.386633,0.818100,1.0,0.518394,0.490961,1.0,0.518394,0.490961,1.0,0.562833,0.676305,1.0,0.616464,0.809872,1.0,0.616464,0.809872,1.0
0.495327,0.469224,1.0,0.490797,0.315939,1.0,0.492307,0.367034,1.0,0.489287,0.264844,1.0,0.485461,0.166730,1.0,0.495409,0.155837,1.0,0.495409,0.155837,1.0,0.475514,0.155797,1.0,0.475514,0.155797,1.0,0.472415,0.267546,1.0,0.455543,0.270247,1.0,0.447838,0.381984,1.0,0.397329,0.341129,1.0,0.392508,0.342514,1.0,0.393669,0.348708,1.0,0.394598,0.347469,1.0,0.392508,0.318561,1.0,0.383913,0.304107,1.0,0.384377,0.302456,1.0,0.389953,0.321452,1.0,0.382983,0.310715,1.0,0.387397,0.330951,1.0,0.385074,0.325169,1.0,0.382751,0.316496,1.0,0.378105,0.318148,1.0,0.379267,0.331777,1.0,0.373692,0.327647,1.0,0.376247,0.320213,1.0,0.506172,0.259413,1.0,0.523057,0.253981,1.0,0.547557,0.371091,1.0,0.584349,0.292155,1.0,0.587208,0.271606,1.0,0.601391,0.272065,1.0,0.595203,0.252814,1.0,0.599589,0.275273,1.0,0.583344,0.253272,1.0,0.586437,0.245021,1.0,0.592625,0.287649,1.0,0.583344,0.260147,1.0,0.589531,0.250981,1.0,0.585146,0.283524,1.0,0.582828,0.264731,1.0,0.589271,0.260606,1.0,0.584891,0.278024,1.0,0.583344,0.277107,1.0,0.589271,0.267023,1.0,0.470785,0.471939,1.0,0.470785,0.471939,1.0,0.446364,0.670886,1.0,0.398847,0.815241,1.0,0.398847,0.815241,1.0,0.519869,0.466509,1.0,0.519869,0.466509,1.0,0.558323,0.649134,1.0,0.605781,0.796223,1.0,0.605781,0.796223,1.0
0.495342,0.448754,1.0,0.493057,0.296486,1.0,0.493819,0.347242,1.0,0.492296,0.245731,1.0,0.487007,0.147696,1.0,0.495463,0.136614,1.0,0.495463,0.136614,1.0,0.477023,0.136637,1.0,0.477023,0.136637,1.0,0.474664,0.247130,1.0,0.457031,0.248530,1.0,0.447849,0.362894,1.0,0.398773,0.319280,1.0,0.396404,0.320568,1.0,0.394020,0.302344,1.0,0.394497,0.292596,1.0,0.394974,0.295140,1.0,0.393782,0.288782,1.0,0.385915,0.281578,1.0,0.391160,0.298954,1.0,0.382101,0.288782,1.0,0.382816,0.289631,1.0,0.390683,0.305734,1.0,0.385200,0.298530,1.0,0.385200,0.306158,1.0,0.389014,0.307854,1.0,0.383293,0.305310,1.0,0.385200,0.309125,1.0,0.509940,0.240303,1.0,0.527583,0.234875,1.0,0.549068,0.354739,1.0,0.582865,0.272860,1.0,0.595578,0.265684,1.0,0.599474,0.243994,1.0,0.594542,0.229687,1.0,0.581818,0.255993,1.0,0.580521,0.234764,1.0,0.583120,0.222765,1.0,0.580781,0.259223,1.0,0.581302,0.235225,1.0,0.586750,0.227380,1.0,0.581042,0.259223,1.0,0.582859,0.243070,1.0,0.588568,0.236148,1.0,0.581818,0.258300,1.0,0.586750,0.247224,1.0,0.588568,0.242148,1.0,0.470808,0.450179,1.0,0.470808,0.450179,1.0,0.458584,0.662767,1.0,0.421732,0.799019,1.0,0.421732,0.799019,1.0,0.519876,0.447329,1.0,0.519876,0.447329,1.0,0.556646,0.640924,1.0,0.591922,0.790682,1.0,0.591922,0.790682,1.0
0.495342,0.448754,1.0,0.493057,0.296486,1.0,0.493819,0.347242,1.0,0.492296,0.245731,1.0,0.487007,0.147696,1.0,0.495463,0.136614,1.0,0.495463,0.136614,1.0,0.477023,0.136637,1.0,0.477023,0.136637,1.0,0.474664,0.247130,1.0,0.457031,0.248530,1.0,0.447849,0.362894,1.0,0.398773,0.319280,1.0,0.396404,0.320568,1.0,0.394020,0.302344,1.0,0.394497,0.292596,1.0,0.394974,0.295140,1.0,0.393782,0.288782,1.0,0.385915,0.281578,1.0,0.391160,0.298954,1.0,0.382101,0.288782,1.0,0.382816,0.289631,1.0,0.390683,0.305734,1.0,0.385200,0.298530,1.0,0.385200,0.306158,1.0,0.389014,0.307854,1.0,0.383293,0.305310,1.0,0.385200,0.309125,1.0,0.509940,0.240303,1.0,0.527583,0.234875,1.0,0.549068,0.354739,1.0,0.582865,0.272860,1.0,0.595578,0.265684,1.0,0.599474,0.243994,1.0,0.594542,0.229687,1.0,0.581818,0.255993,1.0,0.580521,0.234764,1.0,0.583120,0.222765,1.0,0.580781,0.259223,1.0,0.581302,0.235225,1.0,0.586750,0.227380,1.0,0.581042,0.259223,1.0,0.582859,0.243070,1.0,0.588568,0.236148,1.0,0.581818,0.258300,1.0,0.586750,0.247224,1.0,0.588568,0.242148,1.0,0.470808,0.450179,1.0,0.470808,0.450179,1.0,0.458584,0.662767,1.0,0.421732,0.799019,1.0,0.421732,0.799019,1.0,0.519876,0.447329,1.0,0.519876,0.447329,1.0,0.556646,0.640924,1.0,0.591922,0.790682,1.0,0.591922,0.790682,1.0
0.495381,0.437819,1.0,0.494221,0.281492,1.0,0.494608,0.333601,1.0,0.493834,0.229382,1.0,0.488488,0.139441,1.0,0.496915,0.120371,1.0,0.496915,0.120371,1.0,0.480061,0.120313,1.0,0.480061,0.120313,1.0,0.476182,0.232120,1.0,0.458530,0.234858,1.0,0.449403,0.357375,1.0,0.400362,0.308461,1.0,0.396165,0.308642,1.0,0.395400,0.308188,1.0,0.394380,0.288693,1.0,0.397440,0.288240,1.0,0.396675,0.275092,1.0,0.389280,0.268744,1.0,0.397185,0.288240,1.0,0.392850,0.276452,1.0,0.387239,0.270558,1.0,0.396420,0.289146,1.0,0.391065,0.280079,1.0,0.386219,0.273278,1.0,0.395400,0.290053,1.0,0.384689,0.296854,1.0,0.386219,0.293680,1.0,0.511492,0.227990,1.0,0.529151,0.226598,1.0,0.549083,0.338539,1.0,0.582724,0.264742,1.0,0.579776,0.246849,1.0,0.578323,0.223158,1.0,0.580745,0.214113,1.0,0.584620,0.208082,1.0,0.586557,0.205498,1.0,0.585104,0.210668,1.0,0.588979,0.208514,1.0,0.589469,0.208082,1.0,0.588010,0.217559,1.0,0.590922,0.221005,1.0,0.595036,0.214975,1.0,0.591406,0.224451,1.0,0.596979,0.232205,1.0,0.597703,0.225312,1.0,0.595766,0.230481,1.0,0.470864,0.441877,1.0,0.470864,0.441877,1.0,0.470838,0.654524,1.0,0.446399,0.798971,1.0,0.446399,0.798971,1.0,0.519898,0.433762,1.0,0.519898,0.433762,1.0,0.544510,0.640751,1.0,0.568958,0.777201,1.0,0.568958,0.777201,1.0
0.495426,0.436478,1.0,0.495364,0.279179,1.0,0.495385,0.331612,1.0,0.495344,0.226746,1.0,0.489270,0.138061,1.0,0.496967,0.117769,1.0,0.496967,0.117769,1.0,0.481595,0.117708,1.0,0.481595,0.117708,1.0,0.476985,0.229406,1.0,0.458625,0.232067,1.0,0.453992,0.354750,1.0,0.407969,0.305713,1.0,0.401408,0.307122,1.0,0.401661,0.305318,1.0,0.402169,0.287726,1.0,0.403184,0.284118,1.0,0.401408,0.270585,1.0,0.395572,0.265623,1.0,0.402169,0.285019,1.0,0.397856,0.271487,1.0,0.392020,0.266526,1.0,0.400393,0.287275,1.0,0.395572,0.276900,1.0,0.390752,0.273743,1.0,0.396841,0.290432,1.0,0.393796,0.284569,1.0,0.389990,0.280960,1.0,0.513013,0.225344,1.0,0.530682,0.223942,1.0,0.547583,0.338535,1.0,0.581198,0.262057,1.0,0.577380,0.242904,1.0,0.576646,0.221174,1.0,0.579578,0.210744,1.0,0.583250,0.205094,1.0,0.585693,0.202921,1.0,0.584224,0.209875,1.0,0.587646,0.209006,1.0,0.589359,0.206398,1.0,0.587401,0.216829,1.0,0.589604,0.217263,1.0,0.594734,0.213786,1.0,0.590583,0.223781,1.0,0.595714,0.233343,1.0,0.597182,0.223781,1.0,0.594734,0.228562,1.0,0.470946,0.439208,1.0,0.470946,0.439208,1.0,0.478560,0.651759,1.0,0.481549,0.809895,1.0,0.481549,0.809895,1.0,0.519906,0.433747,1.0,0.519906,0.433747,1.0,0.533755,0.640924,1.0,0.544474,0.777129,1.0,0.544474,0.777129,1.0
0.496959,0.446053,1.0,0.495767,0.283647,1.0,0.496164,0.337782,1.0,0.495369,0.229511,1.0,0.490039,0.140788,1.0,0.497027,0.123180,1.0,0.497027,0.123180,1.0,0.481631,0.123111,1.0,0.481631,0.123111,1.0,0.477000,0.236249,1.0,0.458631,0.242986,1.0,0.458534,0.357475,1.0,0.411022,0.313807,1.0,0.409518,0.304437,1.0,0.407865,0.290157,1.0,0.408809,0.285537,1.0,0.407865,0.282177,1.0,0.404084,0.274618,1.0,0.398415,0.270837,1.0,0.405502,0.282177,1.0,0.395107,0.278397,1.0,0.392508,0.286797,1.0,0.403612,0.287637,1.0,0.395107,0.285118,1.0,0.394162,0.291418,1.0,0.401486,0.291837,1.0,0.395343,0.290997,1.0,0.394634,0.294778,1.0,0.513752,0.228079,1.0,0.532135,0.226647,1.0,0.546062,0.346561,1.0,0.578198,0.270113,1.0,0.574906,0.246681,1.0,0.574401,0.226469,1.0,0.577682,0.215688,1.0,0.581724,0.212094,1.0,0.584000,0.207603,1.0,0.581979,0.213443,1.0,0.585771,0.218383,1.0,0.587536,0.210747,1.0,0.585266,0.221528,1.0,0.588042,0.231858,1.0,0.593094,0.219731,1.0,0.588297,0.228715,1.0,0.593854,0.238147,1.0,0.594865,0.229164,1.0,0.592339,0.235003,1.0,0.472449,0.447404,1.0,0.472449,0.447404,1.0,0.486219,0.654501,1.0,0.519897,0.815298,1.0,0.519897,0.815298,1.0,0.521469,0.444703,1.0,0.521469,0.444703,1.0,0.522995,0.643727,1.0,0.509141,0.796254,1.0,0.509141,0.796254,1.0
0.498488,0.459667,1.0,0.497292,0.301157,1.0,0.497691,0.353994,1.0,0.496894,0.248320,1.0,0.490768,0.155785,1.0,0.498477,0.142061,1.0,0.498477,0.142061,1.0,0.483102,0.139565,1.0,0.483102,0.139565,1.0,0.478510,0.249729,1.0,0.460127,0.251138,1.0,0.460158,0.368369,1.0,0.411127,0.322015,1.0,0.410912,0.319189,1.0,0.407042,0.299406,1.0,0.399542,0.291666,1.0,0.409944,0.286075,1.0,0.401236,0.283494,1.0,0.396640,0.280914,1.0,0.409219,0.289945,1.0,0.397365,0.290806,1.0,0.395430,0.297686,1.0,0.407042,0.295966,1.0,0.397607,0.297686,1.0,0.396156,0.304568,1.0,0.404139,0.301127,1.0,0.398574,0.304568,1.0,0.397849,0.308007,1.0,0.515278,0.244279,1.0,0.533661,0.240237,1.0,0.545979,0.360186,1.0,0.573620,0.275697,1.0,0.569151,0.255868,1.0,0.569906,0.237081,1.0,0.573932,0.227687,1.0,0.577708,0.222767,1.0,0.578464,0.217846,1.0,0.577708,0.224109,1.0,0.581734,0.228134,1.0,0.583240,0.220531,1.0,0.580724,0.231713,1.0,0.585255,0.242001,1.0,0.589531,0.229924,1.0,0.583995,0.238870,1.0,0.590536,0.249158,1.0,0.591292,0.239318,1.0,0.587771,0.243790,1.0,0.475456,0.461051,1.0,0.475456,0.461051,1.0,0.498485,0.646379,1.0,0.532120,0.837019,1.0,0.532120,0.837019,1.0,0.521521,0.458282,1.0,0.521521,0.458282,1.0,0.512263,0.654498,1.0,0.495366,0.785361,1.0,0.495366,0.785361,1.0
0.500030,0.469236,1.0,0.497662,0.309803,1.0,0.498451,0.362947,1.0,0.496872,0.256658,1.0,0.490814,0.166799,1.0,0.498482,0.161271,1.0,0.498482,0.161271,1.0,0.483116,0.161266,1.0,0.483116,0.161266,1.0,0.478503,0.263423,1.0,0.460133,0.270187,1.0,0.458607,0.379313,1.0,0.412620,0.338398,1.0,0.410960,0.330102,1.0,0.407131,0.316086,1.0,0.401950,0.306476,1.0,0.409608,0.300069,1.0,0.399922,0.297666,1.0,0.395192,0.302471,1.0,0.409383,0.301670,1.0,0.398571,0.305675,1.0,0.396994,0.313283,1.0,0.408707,0.308078,1.0,0.399472,0.310481,1.0,0.398346,0.316887,1.0,0.406905,0.315285,1.0,0.400373,0.316487,1.0,0.399922,0.320492,1.0,0.514556,0.253918,1.0,0.532240,0.251178,1.0,0.545958,0.373773,1.0,0.570573,0.291918,1.0,0.567344,0.269492,1.0,0.567344,0.249315,1.0,0.569922,0.240603,1.0,0.573792,0.234642,1.0,0.575083,0.230973,1.0,0.573536,0.236934,1.0,0.579208,0.237393,1.0,0.579469,0.232807,1.0,0.577406,0.244730,1.0,0.582047,0.255276,1.0,0.585917,0.240603,1.0,0.581531,0.251608,1.0,0.587719,0.259403,1.0,0.588240,0.253442,1.0,0.585656,0.255276,1.0,0.477033,0.469269,1.0,0.477033,0.469269,1.0,0.499977,0.654491,1.0,0.532130,0.837153,1.0,0.532130,0.837153,1.0,0.523026,0.469203,1.0,0.523026,0.469203,1.0,0.512281,0.662644,1.0,0.492313,0.793526,1.0,0.492313,0.793526,1.0
0.500030,0.469236,1.0,0.497662,0.309803,1.0,0.498451,0.362947,1.0,0.496872,0.256658,1.0,0.490814,0.166799,1.0,0.498482,0.161271,1.0,0.498482,0.161271,1.0,0.483116,0.161266,1.0,0.483116,0.161266,1.0,0.478503,0.263423,1.0,0.460133,0.270187,1.0,0.458607,0.379313,1.0,0.412620,0.338398,1.0,0.410960,0.330102,1.0,0.407131,0.316086,1.0,0.401950,0.306476,1.0,0.409608,0.300069,1.0,0.399922,0.297666,1.0,0.395192,0.302471,1.0,0.409383,0.301670,1.0,0.398571,0.305675,1.0,0.396994,0.313283,1.0,0.408707,0.308078,1.0,0.399472,0.310481,1.0,0.398346,0.316887,1.0,0.406905,0.315285,1.0,0.400373,0.316487,1.0,0.399922,0.320492,1.0,0.514556,0.253918,1.0,0.532240,0.251178,1.0,0.545958,0.373773,1.0,0.570573,0.291918,1.0,0.567344,0.269492,1.0,0.567344,0.249315,1.0,0.569922,0.240603,1.0,0.573792,0.234642,1.0,0.575083,0.230973,1.0,0.573536,0.236934,1.0,0.579208,0.237393,1.0,0.579469,0.232807,1.0,0.577406,0.244730,1.0,0.582047,0.255276,1.0,0.585917,0.240603,1.0,0.581531,0.251608,1.0,0.587719,0.259403,1.0,0.588240,0.253442,1.0,0.585656,0.255276,1.0,0.477033,0.469269,1.0,0.477033,0.469269,1.0,0.499977,0.654491,1.0,0.532130,0.837153,1.0,0.532130,0.837153,1.0,0.523026,0.469203,1.0,0.523026,0.469203,1.0,0.512281,0.662644,1.0,0.492313,0.793526,1.0,0.492313,0.793526,1.0
0.500022,0.467829,1.0,0.497698,0.309486,1.0,0.498473,0.362267,1.0,0.496924,0.256705,1.0,0.490842,0.170800,1.0,0.500011,0.164082,1.0,0.500011,0.164082,1.0,0.483161,0.164100,1.0,0.483161,0.164100,1.0,0.478563,0.263448,1.0,0.460202,0.270191,1.0,0.458647,0.379292,1.0,0.412628,0.349321,1.0,0.410278,0.349441,1.0,0.408702,0.326219,1.0,0.401270,0.319813,1.0,0.410728,0.315009,1.0,0.398793,0.315409,1.0,0.394964,0.317011,1.0,0.409602,0.315409,1.0,0.397892,0.321415,1.0,0.396766,0.327820,1.0,0.408702,0.321415,1.0,0.398117,0.323817,1.0,0.396541,0.329021,1.0,0.407125,0.325018,1.0,0.400594,0.325419,1.0,0.392937,0.321815,1.0,0.515306,0.253939,1.0,0.533688,0.251174,1.0,0.545932,0.368363,1.0,0.570599,0.291976,1.0,0.567672,0.271142,1.0,0.567427,0.251902,1.0,0.570380,0.244031,1.0,0.574068,0.237035,1.0,0.575052,0.234849,1.0,0.574313,0.241408,1.0,0.579234,0.238347,1.0,0.579724,0.236598,1.0,0.577755,0.249279,1.0,0.583661,0.244031,1.0,0.585625,0.243594,1.0,0.581693,0.254088,1.0,0.587594,0.261959,1.0,0.587594,0.252340,1.0,0.585380,0.257586,1.0,0.477023,0.469183,1.0,0.477023,0.469183,1.0,0.498442,0.662610,1.0,0.527594,0.837000,1.0,0.527594,0.837000,1.0,0.523021,0.466474,1.0,0.523021,0.466474,1.0,0.521437,0.662753,1.0,0.500017,0.782636,1.0,0.500017,0.782636,1.0
0.500024,0.455558,1.0,0.497722,0.300236,1.0,0.498489,0.352010,1.0,0.496954,0.248462,1.0,0.491555,0.159973,1.0,0.501527,0.161313,1.0,0.501527,0.161313,1.0,0.483194,0.161292,1.0,0.483194,0.161292,1.0,0.479303,0.251169,1.0,0.461652,0.253877,1.0,0.460121,0.363005,1.0,0.411056,0.352005,1.0,0.405001,0.353981,1.0,0.401171,0.331156,1.0,0.401847,0.330355,1.0,0.402973,0.329153,1.0,0.399820,0.314737,1.0,0.389683,0.323947,1.0,0.402523,0.327552,1.0,0.395765,0.319943,1.0,0.390359,0.321144,1.0,0.399369,0.325549,1.0,0.390584,0.323547,1.0,0.390359,0.331556,1.0,0.399820,0.327952,1.0,0.388332,0.321544,1.0,0.386980,0.327151,1.0,0.515329,0.245707,1.0,0.533703,0.242953,1.0,0.547516,0.360203,1.0,0.576656,0.289274,1.0,0.569469,0.265868,1.0,0.569964,0.246531,1.0,0.573667,0.235984,1.0,0.579604,0.232030,1.0,0.581828,0.228074,1.0,0.579354,0.235984,1.0,0.584052,0.234227,1.0,0.587266,0.233347,1.0,0.583307,0.243894,1.0,0.586276,0.253123,1.0,0.590724,0.239060,1.0,0.587016,0.249607,1.0,0.591469,0.257079,1.0,0.592703,0.247850,1.0,0.590724,0.254442,1.0,0.477023,0.458294,1.0,0.477023,0.458294,1.0,0.493831,0.659919,1.0,0.509183,0.815366,1.0,0.509183,0.815366,1.0,0.523026,0.452821,1.0,0.523026,0.452821,1.0,0.530672,0.660017,1.0,0.523021,0.774446,1.0,0.523021,0.774446,1.0
0.499226,0.446101,1.0,0.497526,0.297752,1.0,0.498093,0.347201,1.0,0.496959,0.248302,1.0,0.493090,0.161229,1.0,0.504581,0.161212,1.0,0.504581,0.161212,1.0,0.484718,0.161197,1.0,0.484718,0.161197,1.0,0.478579,0.249741,1.0,0.460198,0.251180,1.0,0.455562,0.360078,1.0,0.404931,0.338435,1.0,0.401293,0.345316,1.0,0.396560,0.339306,1.0,0.389123,0.311262,1.0,0.398363,0.321679,1.0,0.394307,0.306454,1.0,0.383715,0.314067,1.0,0.397687,0.322480,1.0,0.392504,0.307256,1.0,0.383941,0.314868,1.0,0.397462,0.324082,1.0,0.392729,0.307256,1.0,0.383715,0.318473,1.0,0.394983,0.319675,1.0,0.394307,0.310060,1.0,0.382137,0.323281,1.0,0.515339,0.241592,1.0,0.533719,0.234881,1.0,0.556719,0.357407,1.0,0.584333,0.278403,1.0,0.581453,0.264178,1.0,0.576656,0.246171,1.0,0.577193,0.231956,1.0,0.585984,0.224375,1.0,0.585984,0.224375,1.0,0.583854,0.234325,1.0,0.590516,0.227692,1.0,0.590787,0.230534,1.0,0.587583,0.242381,1.0,0.594781,0.233378,1.0,0.594781,0.235273,1.0,0.590516,0.247119,1.0,0.597448,0.241433,1.0,0.597714,0.242855,1.0,0.595583,0.249962,1.0,0.475458,0.447464,1.0,0.475458,0.447464,1.0,0.486184,0.641004,1.0,0.483208,0.798931,1.0,0.483208,0.798931,1.0,0.522995,0.444738,1.0,0.522995,0.444738,1.0,0.535234,0.651783,1.0,0.550563,0.766266,1.0,0.550563,0.766266,1.0
0.497721,0.447390,1.0,0.497193,0.298227,1.0,0.497369,0.347948,1.0,0.497017,0.248506,1.0,0.496170,0.164032,1.0,0.507585,0.164001,1.0,0.507585,0.164001,1.0,0.487732,0.164009,1.0,0.487732,0.164009,1.0,0.479333,0.249900,1.0,0.461649,0.251293,1.0,0.446393,0.354761,1.0,0.398860,0.324795,1.0,0.398404,0.324324,1.0,0.391782,0.312553,1.0,0.378760,0.307452,1.0,0.393107,0.307844,1.0,0.390458,0.290971,1.0,0.384057,0.294110,1.0,0.390017,0.312553,1.0,0.388913,0.297642,1.0,0.379643,0.309021,1.0,0.389354,0.316869,1.0,0.384719,0.317654,1.0,0.378760,0.309806,1.0,0.388692,0.323147,1.0,0.387147,0.322755,1.0,0.376994,0.325894,1.0,0.516131,0.247095,1.0,0.535245,0.245683,1.0,0.565911,0.357373,1.0,0.593500,0.275679,1.0,0.587729,0.263766,1.0,0.582089,0.246895,1.0,0.581318,0.234585,1.0,0.589781,0.225011,1.0,0.590807,0.223643,1.0,0.589266,0.231850,1.0,0.595167,0.225923,1.0,0.596193,0.226834,1.0,0.593885,0.238689,1.0,0.599526,0.230938,1.0,0.600297,0.230938,1.0,0.597474,0.243705,1.0,0.603630,0.238689,1.0,0.603885,0.239144,1.0,0.602089,0.246440,1.0,0.473932,0.447447,1.0,0.473932,0.447447,1.0,0.483190,0.643707,1.0,0.458552,0.801688,1.0,0.458552,0.801688,1.0,0.521510,0.447333,1.0,0.521510,0.447333,1.0,0.542937,0.646442,1.0,0.581198,0.771682,1.0,0.581198,0.771682,1.0
0.497707,0.450169,1.0,0.497192,0.301031,1.0,0.497364,0.350744,1.0,0.497021,0.251319,1.0,0.496195,0.168065,1.0,0.507629,0.172121,1.0,0.507629,0.172121,1.0,0.489264,0.169429,1.0,0.489264,0.169429,1.0,0.479335,0.255357,1.0,0.461650,0.259396,1.0,0.437168,0.346556,1.0,0.392702,0.311142,1.0,0.384661,0.289448,1.0,0.385265,0.300527,1.0,0.377223,0.288733,1.0,0.389486,0.297669,1.0,0.391496,0.304101,1.0,0.376017,0.289091,1.0,0.388079,0.301956,1.0,0.386672,0.297669,1.0,0.383656,0.303744,1.0,0.383455,0.301242,1.0,0.375012,0.294809,1.0,0.373404,0.286231,1.0,0.380440,0.304101,1.0,0.374007,0.297311,1.0,0.374409,0.288733,1.0,0.516125,0.249893,1.0,0.535229,0.248468,1.0,0.570490,0.349341,1.0,0.599620,0.272878,1.0,0.594281,0.255923,1.0,0.586932,0.242853,1.0,0.585458,0.231525,1.0,0.594526,0.220633,1.0,0.595510,0.217583,1.0,0.595016,0.224990,1.0,0.600411,0.219762,1.0,0.601146,0.220633,1.0,0.600167,0.231961,1.0,0.604823,0.224555,1.0,0.605557,0.224555,1.0,0.602859,0.235881,1.0,0.608740,0.231090,1.0,0.608495,0.231525,1.0,0.606781,0.238496,1.0,0.473956,0.450186,1.0,0.473956,0.450186,1.0,0.480071,0.654520,1.0,0.435604,0.820848,1.0,0.435604,0.820848,1.0,0.521458,0.450152,1.0,0.521458,0.450152,1.0,0.545958,0.646360,1.0,0.598104,0.790831,1.0,0.598104,0.790831,1.0
0.497707,0.450169,1.0,0.497192,0.301031,1.0,0.497364,0.350744,1.0,0.497021,0.251319,1.0,0.496195,0.168065,1.0,0.507629,0.172121,1.0,0.507629,0.172121,1.0,0.489264,0.169429,1.0,0.489264,0.169429,1.0,0.479335,0.255357,1.0,0.461650,0.259396,1.0,0.437168,0.346556,1.0,0.392702,0.311142,1.0,0.384661,0.289448,1.0,0.385265,0.300527,1.0,0.377223,0.288733,1.0,0.389486,0.297669,1.0,0.391496,0.304101,1.0,0.376017,0.289091,1.0,0.388079,0.301956,1.0,0.386672,0.297669,1.0,0.383656,0.303744,1.0,0.383455,0.301242,1.0,0.375012,0.294809,1.0,0.373404,0.286231,1.0,0.380440,0.304101,1.0,0.374007,0.297311,1.0,0.374409,0.288733,1.0,0.516125,0.249893,1.0,0.535229,0.248468,1.0,0.570490,0.349341,1.0,0.599620,0.272878,1.0,0.594281,0.255923,1.0,0.586932,0.242853,1.0,0.585458,0.231525,1.0,0.594526,0.220633,1.0,0.595510,0.217583,1.0,0.595016,0.224990,1.0,0.600411,0.219762,1.0,0.601146,0.220633,1.0,0.600167,0.231961,1.0,0.604823,0.224555,1.0,0.605557,0.224555,1.0,0.602859,0.235881,1.0,0.608740,0.231090,1.0,0.608495,0.231525,1.0,0.606781,0.238496,1.0,0.473956,0.450186,1.0,0.473956,0.450186,1.0,0.480071,0.654520,1.0,0.435604,0.820848,1.0,0.435604,0.820848,1.0,0.521458,0.450152,1.0,0.521458,0.450152,1.0,0.545958,0.646360,1.0,0.598104,0.790831,1.0,0.598104,0.790831,1.0
0.499227,0.458283,1.0,0.497533,0.309117,1.0,0.498098,0.358839,1.0,0.496969,0.259394,1.0,0.496160,0.180317,1.0,0.507621,0.180255,1.0,0.507621,0.180255,1.0,0.489261,0.180231,1.0,0.489261,0.180231,1.0,0.478543,0.264765,1.0,0.460118,0.270136,1.0,0.434023,0.341121,1.0,0.386538,0.302953,1.0,0.379365,0.283560,1.0,0.378091,0.288469,1.0,0.367894,0.282049,1.0,0.383401,0.288092,1.0,0.366620,0.276385,1.0,0.369594,0.271854,1.0,0.370019,0.283182,1.0,0.366620,0.276762,1.0,0.370019,0.271854,1.0,0.369806,0.283182,1.0,0.367045,0.280161,1.0,0.370019,0.273742,1.0,0.364708,0.294889,1.0,0.360672,0.288469,1.0,0.369594,0.282049,1.0,0.516104,0.255311,1.0,0.535240,0.251227,1.0,0.576646,0.343867,1.0,0.604203,0.267459,1.0,0.596693,0.249625,1.0,0.589125,0.237470,1.0,0.586927,0.226184,1.0,0.595719,0.214898,1.0,0.596203,0.211860,1.0,0.596693,0.216634,1.0,0.600844,0.213162,1.0,0.602307,0.212728,1.0,0.602552,0.223580,1.0,0.605484,0.217937,1.0,0.606703,0.215767,1.0,0.604995,0.227920,1.0,0.610120,0.223145,1.0,0.610365,0.222712,1.0,0.608901,0.230091,1.0,0.475464,0.461009,1.0,0.475464,0.461009,1.0,0.475478,0.659958,1.0,0.435647,0.828955,1.0,0.435647,0.828955,1.0,0.522990,0.455557,1.0,0.522990,0.455557,1.0,0.555130,0.643587,1.0,0.598120,0.785291,1.0,0.598120,0.785291,1.0
0.502301,0.455593,1.0,0.498242,0.304343,1.0,0.499595,0.354760,1.0,0.496889,0.253927,1.0,0.495394,0.166798,1.0,0.507663,0.174836,1.0,0.507663,0.174836,1.0,0.490795,0.169391,1.0,0.490795,0.169391,1.0,0.477737,0.259381,1.0,0.458586,0.264835,1.0,0.434041,0.338459,1.0,0.385023,0.316525,1.0,0.369466,0.280717,1.0,0.372968,0.280717,1.0,0.365139,0.286577,1.0,0.363079,0.298665,1.0,0.376265,0.303426,1.0,0.373586,0.308188,1.0,0.367818,0.326135,1.0,0.366581,0.316612,1.0,0.374822,0.314781,1.0,0.367611,0.331996,1.0,0.376059,0.325769,1.0,0.375029,0.322839,1.0,0.371114,0.342252,1.0,0.375647,0.340054,1.0,0.376471,0.337124,1.0,0.515314,0.251211,1.0,0.533740,0.248495,1.0,0.572057,0.338481,1.0,0.598130,0.264766,1.0,0.593224,0.248306,1.0,0.585542,0.235472,1.0,0.583208,0.223879,1.0,0.592760,0.211872,1.0,0.592990,0.206490,1.0,0.593922,0.213529,1.0,0.598349,0.209388,1.0,0.598812,0.208560,1.0,0.599047,0.219325,1.0,0.602073,0.213943,1.0,0.603938,0.211872,1.0,0.602307,0.223051,1.0,0.607198,0.219739,1.0,0.607661,0.218911,1.0,0.606500,0.225535,1.0,0.480055,0.461019,1.0,0.480055,0.461019,1.0,0.483118,0.654565,1.0,0.447852,0.818156,1.0,0.447852,0.818156,1.0,0.524547,0.450166,1.0,0.524547,0.450166,1.0,0.550615,0.640751,1.0,0.593427,0.785300,1.0,0.593427,0.785300,1.0
0.503817,0.447383,1.0,0.497556,0.298188,1.0,0.499643,0.347920,1.0,0.495469,0.248456,1.0,0.495384,0.165333,1.0,0.507670,0.166667,1.0,0.507670,0.166667,1.0,0.490816,0.164104,1.0,0.490816,0.164104,1.0,0.477020,0.249878,1.0,0.458570,0.251300,1.0,0.435658,0.338547,1.0,0.386554,0.343822,1.0,0.361526,0.329165,1.0,0.371552,0.327739,1.0,0.370951,0.330234,1.0,0.370951,0.329521,1.0,0.369547,0.331660,1.0,0.371953,0.334869,1.0,0.365536,0.342711,1.0,0.361526,0.345919,1.0,0.375964,0.346276,1.0,0.363331,0.344494,1.0,0.361125,0.345919,1.0,0.369146,0.351980,1.0,0.361125,0.345919,1.0,0.358919,0.345206,1.0,0.361326,0.357683,1.0,0.514581,0.244387,1.0,0.533693,0.240317,1.0,0.567443,0.341219,1.0,0.582734,0.270188,1.0,0.590688,0.252346,1.0,0.592870,0.230382,1.0,0.583177,0.221769,1.0,0.588995,0.254500,1.0,0.577365,0.214448,1.0,0.581000,0.224784,1.0,0.587057,0.254500,1.0,0.578578,0.217463,1.0,0.578578,0.225645,1.0,0.587057,0.254500,1.0,0.578333,0.219185,1.0,0.579302,0.227799,1.0,0.577125,0.217463,1.0,0.581969,0.223923,1.0,0.581484,0.227368,1.0,0.481566,0.450130,1.0,0.481566,0.450130,1.0,0.495379,0.646295,1.0,0.470783,0.815327,1.0,0.470783,0.815327,1.0,0.526068,0.444637,1.0,0.526068,0.444637,1.0,0.545964,0.638203,1.0,0.572104,0.774562,1.0,0.572104,0.774562,1.0
0.504625,0.451479,1.0,0.498833,0.299230,1.0,0.500764,0.349980,1.0,0.496903,0.248481,1.0,0.495390,0.165327,1.0,0.507632,0.166761,1.0,0.507632,0.166761,1.0,0.489287,0.166677,1.0,0.489287,0.166677,1.0,0.477776,0.251200,1.0,0.458649,0.253920,1.0,0.446345,0.354764,1.0,0.397335,0.392931,1.0,0.380943,0.394283,1.0,0.379417,0.388080,1.0,0.380071,0.388855,1.0,0.380071,0.391181,1.0,0.378544,0.392344,1.0,0.380507,0.394670,1.0,0.374837,0.413281,1.0,0.378544,0.414057,1.0,0.390322,0.410180,1.0,0.374619,0.413281,1.0,0.379635,0.415995,1.0,0.370257,0.417934,1.0,0.379417,0.432281,1.0,0.380507,0.434606,1.0,0.382252,0.434994,1.0,0.515287,0.244388,1.0,0.533672,0.240296,1.0,0.555156,0.357423,1.0,0.558219,0.272989,1.0,0.555922,0.232019,1.0,0.551599,0.223884,1.0,0.547281,0.230211,1.0,0.567359,0.237442,1.0,0.550328,0.235634,1.0,0.542193,0.241509,1.0,0.566599,0.251000,1.0,0.558719,0.265010,1.0,0.548042,0.260039,1.0,0.564057,0.264106,1.0,0.557958,0.268626,1.0,0.549057,0.263203,1.0,0.561516,0.269078,1.0,0.552620,0.276309,1.0,0.548552,0.274953,1.0,0.481631,0.455581,1.0,0.481631,0.455581,1.0,0.500024,0.654563,1.0,0.499986,0.809857,1.0,0.499986,0.809857,1.0,0.527620,0.447377,1.0,0.527620,0.447377,1.0,0.539865,0.643652,1.0,0.547552,0.774476,1.0,0.547552,0.774476,1.0
0.506921,0.462359,1.0,0.499404,0.308059,1.0,0.501909,0.359493,1.0,0.496898,0.256626,1.0,0.494662,0.170811,1.0,0.507624,0.177594,1.0,0.507624,0.177594,1.0,0.487779,0.172176,1.0,0.487779,0.172176,1.0,0.477786,0.262078,1.0,0.458674,0.267530,1.0,0.455541,0.373856,1.0,0.421740,0.441929,1.0,0.410145,0.459706,1.0,0.405971,0.478063,1.0,0.397842,0.476892,1.0,0.399819,0.475329,1.0,0.397183,0.476501,1.0,0.397183,0.477281,1.0,0.399380,0.473767,1.0,0.397403,0.475329,1.0,0.397403,0.475719,1.0,0.400478,0.474548,1.0,0.397183,0.476110,1.0,0.397622,0.475719,1.0,0.403774,0.477672,1.0,0.395865,0.479625,1.0,0.397622,0.475719,1.0,0.515303,0.253924,1.0,0.533708,0.251221,1.0,0.535318,0.368387,1.0,0.523016,0.292044,1.0,0.521375,0.281469,1.0,0.529599,0.254381,1.0,0.522589,0.282758,1.0,0.530328,0.250942,1.0,0.519927,0.231594,1.0,0.517508,0.254381,1.0,0.532500,0.251802,1.0,0.515573,0.247072,1.0,0.515090,0.254811,1.0,0.531536,0.251802,1.0,0.512429,0.248362,1.0,0.514364,0.254811,1.0,0.530807,0.254811,1.0,0.525729,0.241053,1.0,0.518476,0.253521,1.0,0.483206,0.466408,1.0,0.483206,0.466408,1.0,0.509143,0.659961,1.0,0.536766,0.815277,1.0,0.536766,0.815277,1.0,0.530635,0.458310,1.0,0.530635,0.458310,1.0,0.532198,0.649043,1.0,0.521453,0.777144,1.0,0.521453,0.777144,1.0
0.506921,0.462359,1.0,0.499404,0.308059,1.0,0.501909,0.359493,1.0,0.496898,0.256626,1.0,0.494662,0.170811,1.0,0.507624,0.177594,1.0,0.507624,0.177594,1.0,0.487779,0.172176,1.0,0.487779,0.172176,1.0,0.477786,0.262078,1.0,0.458674,0.267530,1.0,0.455541,0.373856,1.0,0.421740,0.441929,1.0,0.410145,0.459706,1.0,0.405971,0.478063,1.0,0.397842,0.476892,1.0,0.399819,0.475329,1.0,0.397183,0.476501,1.0,0.397183,0.477281,1.0,0.399380,0.473767,1.0,0.397403,0.475329,1.0,0.397403,0.475719,1.0,0.400478,0.474548,1.0,0.397183,0.476110,1.0,0.397622,0.475719,1.0,0.403774,0.477672,1.0,0.395865,0.479625,1.0,0.397622,0.475719,1.0,0.515303,0.253924,1.0,0.533708,0.251221,1.0,0.535318,0.368387,1.0,0.523016,0.292044,1.0,0.521375,0.281469,1.0,0.529599,0.254381,1.0,0.522589,0.282758,1.0,0.530328,0.250942,1.0,0.519927,0.231594,1.0,0.517508,0.254381,1.0,0.532500,0.251802,1.0,0.515573,0.247072,1.0,0.515090,0.254811,1.0,0.531536,0.251802,1.0,0.512429,0.248362,1.0,0.514364,0.254811,1.0,0.530807,0.254811,1.0,0.525729,0.241053,1.0,0.518476,0.253521,1.0,0.483206,0.466408,1.0,0.483206,0.466408,1.0,0.509143,0.659961,1.0,0.536766,0.815277,1.0,0.536766,0.815277,1.0,0.530635,0.458310,1.0,0.530635,0.458310,1.0,0.532198,0.649043,1.0,0.521453,0.777144,1.0,0.521453,0.777144,1.0
0.507660,0.478719,1.0,0.499613,0.324450,1.0,0.502295,0.375873,1.0,0.496930,0.273027,1.0,0.493890,0.184516,1.0,0.506148,0.185736,1.0,0.506148,0.185736,1.0,0.486237,0.185669,1.0,0.486237,0.185669,1.0,0.479293,0.275744,1.0,0.461655,0.278461,1.0,0.463191,0.398304,1.0,0.444820,0.488239,1.0,0.439747,0.502087,1.0,0.435294,0.534629,1.0,0.443210,0.519677,1.0,0.433810,0.533309,1.0,0.427131,0.515719,1.0,0.427131,0.519237,1.0,0.431336,0.525833,1.0,0.427379,0.516599,1.0,0.429605,0.522756,1.0,0.434552,0.533749,1.0,0.426637,0.522316,1.0,0.429605,0.522316,1.0,0.433316,0.532869,1.0,0.426637,0.521876,1.0,0.424163,0.533309,1.0,0.514588,0.271629,1.0,0.532245,0.270231,1.0,0.524531,0.381889,1.0,0.495360,0.305666,1.0,0.475752,0.256989,1.0,0.475055,0.254513,1.0,0.486894,0.290417,1.0,0.490376,0.255751,1.0,0.490608,0.264005,1.0,0.492930,0.266894,1.0,0.491072,0.265243,1.0,0.488519,0.276798,1.0,0.485269,0.282988,1.0,0.486662,0.271433,1.0,0.485966,0.278861,1.0,0.483412,0.289592,1.0,0.483412,0.294956,1.0,0.486894,0.299083,1.0,0.486430,0.298670,1.0,0.484680,0.482792,1.0,0.484680,0.482792,1.0,0.519915,0.651793,1.0,0.558318,0.826231,1.0,0.558318,0.826231,1.0,0.530641,0.474645,1.0,0.530641,0.474645,1.0,0.521458,0.657277,1.0,0.507611,0.782619,1.0,0.507611,0.782619,1.0
0.506112,0.491004,1.0,0.499282,0.341693,1.0,0.501559,0.391463,1.0,0.497005,0.291922,1.0,0.493902,0.203482,1.0,0.506097,0.202077,1.0,0.506097,0.202077,1.0,0.486251,0.202022,1.0,0.486251,0.202022,1.0,0.480878,0.291978,1.0,0.464751,0.292033,1.0,0.475477,0.400996,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.514609,0.289265,1.0,0.532214,0.286607,1.0,0.519951,0.384694,1.0,0.470854,0.316688,1.0,0.461755,0.296051,1.0,0.464039,0.272146,1.0,0.455920,0.274402,1.0,0.459725,0.272597,1.0,0.453637,0.266734,1.0,0.446533,0.266734,1.0,0.458204,0.271695,1.0,0.452876,0.268539,1.0,0.449578,0.268087,1.0,0.457949,0.276656,1.0,0.452876,0.270343,1.0,0.448056,0.270343,1.0,0.455920,0.284775,1.0,0.449070,0.280716,1.0,0.447802,0.279814,1.0,0.484616,0.493726,1.0,0.484616,0.493726,1.0,0.521458,0.662684,1.0,0.558339,0.839856,1.0,0.558339,0.839856,1.0,0.527609,0.488281,1.0,0.527609,0.488281,1.0,0.521437,0.662604,1.0,0.503078,0.793432,1.0,0.503078,0.793432,1.0
0.504614,0.488277,1.0,0.498810,0.341071,1.0,0.500745,0.390140,1.0,0.496875,0.292003,1.0,0.491618,0.202119,1.0,0.504596,0.193987,1.0,0.504596,0.193987,1.0,0.484720,0.191239,1.0,0.484720,0.191239,1.0,0.478544,0.294747,1.0,0.460212,0.297492,1.0,0.470907,0.398274,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.514498,0.285213,1.0,0.532120,0.278423,1.0,0.519859,0.360339,1.0,0.460139,0.360177,1.0,0.451385,0.374837,1.0,0.431424,0.328100,1.0,0.437754,0.374405,1.0,0.446273,0.349305,1.0,0.441648,0.372241,1.0,0.443109,0.372673,1.0,0.439458,0.354498,1.0,0.441892,0.373539,1.0,0.439944,0.377434,1.0,0.437997,0.354931,1.0,0.439458,0.377867,1.0,0.437997,0.378732,1.0,0.444570,0.386955,1.0,0.429721,0.377001,1.0,0.437510,0.382627,1.0,0.483165,0.491038,1.0,0.483165,0.491038,1.0,0.519915,0.659978,1.0,0.555172,0.837135,1.0,0.555172,0.837135,1.0,0.526062,0.485516,1.0,0.526062,0.485516,1.0,0.519961,0.662562,1.0,0.507585,0.790758,1.0,0.507585,0.790758,1.0
0.500003,0.474653,1.0,0.496496,0.323378,1.0,0.497665,0.373803,1.0,0.495327,0.272953,1.0,0.490036,0.187130,1.0,0.498511,0.180338,1.0,0.498511,0.180338,1.0,0.483134,0.180216,1.0,0.483134,0.180216,1.0,0.477721,0.279752,1.0,0.460115,0.286552,1.0,0.472438,0.384762,1.0,0.461654,0.466543,1.0,0.453943,0.500912,1.0,0.449790,0.506819,1.0,0.450413,0.509771,1.0,0.453943,0.511986,1.0,0.459549,0.512725,1.0,0.457265,0.521215,1.0,0.454151,0.510510,1.0,0.459134,0.511618,1.0,0.460380,0.521215,1.0,0.454981,0.510141,1.0,0.459342,0.514570,1.0,0.459965,0.520477,1.0,0.453943,0.493899,1.0,0.450413,0.509771,1.0,0.452282,0.515678,1.0,0.510695,0.268881,1.0,0.526062,0.264808,1.0,0.518339,0.346581,1.0,0.460143,0.403725,1.0,0.453946,0.442334,1.0,0.431454,0.434626,1.0,0.429286,0.434144,1.0,0.431183,0.432217,1.0,0.438228,0.408130,1.0,0.439041,0.408130,1.0,0.442293,0.424027,1.0,0.426305,0.449560,1.0,0.427389,0.431254,1.0,0.443919,0.424991,1.0,0.426576,0.450042,1.0,0.427118,0.431254,1.0,0.444190,0.442334,1.0,0.440667,0.454378,1.0,0.426847,0.431254,1.0,0.478563,0.480081,1.0,0.478563,0.480081,1.0,0.515310,0.662663,1.0,0.533771,0.837098,1.0,0.533771,0.837098,1.0,0.521443,0.469225,1.0,0.521443,0.469225,1.0,0.524552,0.662684,1.0,0.510738,0.779864,1.0,0.510738,0.779864,1.0
0.494606,0.469225,1.0,0.490600,0.311846,1.0,0.491935,0.364306,1.0,0.489265,0.259386,1.0,0.485421,0.172227,1.0,0.495439,0.164001,1.0,0.495439,0.164001,1.0,0.480033,0.163919,1.0,0.480033,0.163919,1.0,0.473941,0.263481,1.0,0.458618,0.267577,1.0,0.460219,0.362997,1.0,0.446334,0.428390,1.0,0.451799,0.421253,1.0,0.450617,0.435961,1.0,0.445693,0.442965,1.0,0.438207,0.441565,1.0,0.444314,0.448569,1.0,0.450617,0.454172,1.0,0.439389,0.456623,1.0,0.438995,0.460826,1.0,0.453572,0.465028,1.0,0.452390,0.451370,1.0,0.436237,0.467480,1.0,0.445693,0.466779,1.0,0.433282,0.467480,1.0,0.437616,0.470281,1.0,0.448647,0.455222,1.0,0.505377,0.255328,1.0,0.521490,0.251269,1.0,0.519915,0.357365,1.0,0.483176,0.428316,1.0,0.483655,0.446227,1.0,0.473484,0.483963,1.0,0.461765,0.431290,1.0,0.473927,0.481605,1.0,0.472157,0.480819,1.0,0.461102,0.434042,1.0,0.477685,0.465095,1.0,0.465524,0.463130,1.0,0.456459,0.450157,1.0,0.479896,0.440331,1.0,0.472157,0.437972,1.0,0.465745,0.418711,1.0,0.478570,0.435614,1.0,0.468398,0.437186,1.0,0.461544,0.436006,1.0,0.472369,0.471947,1.0,0.472369,0.471947,1.0,0.507693,0.651828,1.0,0.503070,0.812596,1.0,0.503070,0.812596,1.0,0.516842,0.466503,1.0,0.516842,0.466503,1.0,0.532240,0.651766,1.0,0.532177,0.774491,1.0,0.532177,0.774491,1.0
0.494606,0.469225,1.0,0.490600,0.311846,1.0,0.491935,0.364306,1.0,0.489265,0.259386,1.0,0.485421,0.172227,1.0,0.495439,0.164001,1.0,0.495439,0.164001,1.0,0.480033,0.163919,1.0,0.480033,0.163919,1.0,0.473941,0.263481,1.0,0.458618,0.267577,1.0,0.460219,0.362997,1.0,0.446334,0.428390,1.0,0.451799,0.421253,1.0,0.450617,0.435961,1.0,0.445693,0.442965,1.0,0.438207,0.441565,1.0,0.444314,0.448569,1.0,0.450617,0.454172,1.0,0.439389,0.456623,1.0,0.438995,0.460826,1.0,0.453572,0.465028,1.0,0.452390,0.451370,1.0,0.436237,0.467480,1.0,0.445693,0.466779,1.0,0.433282,0.467480,1.0,0.437616,0.470281,1.0,0.448647,0.455222,1.0,0.505377,0.255328,1.0,0.521490,0.251269,1.0,0.519915,0.357365,1.0,0.483176,0.428316,1.0,0.483655,0.446227,1.0,0.473484,0.483963,1.0,0.461765,0.431290,1.0,0.473927,0.481605,1.0,0.472157,0.480819,1.0,0.461102,0.434042,1.0,0.477685,0.465095,1.0,0.465524,0.463130,1.0,0.456459,0.450157,1.0,0.479896,0.440331,1.0,0.472157,0.437972,1.0,0.465745,0.418711,1.0,0.478570,0.435614,1.0,0.468398,0.437186,1.0,0.461544,0.436006,1.0,0.472369,0.471947,1.0,0.472369,0.471947,1.0,0.507693,0.651828,1.0,0.503070,0.812596,1.0,0.503070,0.812596,1.0,0.516842,0.466503,1.0,0.516842,0.466503,1.0,0.532240,0.651766,1.0,0.532177,0.774491,1.0,0.532177,0.774491,1.0
0.488511,0.467764,1.0,0.486768,0.309444,1.0,0.487349,0.362217,1.0,0.486187,0.256670,1.0,0.483148,0.170804,1.0,0.493855,0.163857,1.0,0.493855,0.163857,1.0,0.473939,0.161313,1.0,0.473939,0.161313,1.0,0.470097,0.258033,1.0,0.454006,0.259396,1.0,0.449405,0.354736,1.0,0.418745,0.395597,1.0,0.403887,0.402061,1.0,0.406455,0.395392,1.0,0.410404,0.404869,1.0,0.414353,0.407678,1.0,0.415340,0.410486,1.0,0.413958,0.406624,1.0,0.410996,0.411188,1.0,0.410798,0.410837,1.0,0.405665,0.421368,1.0,0.410996,0.414347,1.0,0.409219,0.422069,1.0,0.408824,0.424878,1.0,0.415143,0.410486,1.0,0.415340,0.412943,1.0,0.415143,0.411890,1.0,0.503083,0.255296,1.0,0.519979,0.253921,1.0,0.532167,0.360121,1.0,0.530599,0.447507,1.0,0.534557,0.443343,1.0,0.522255,0.475152,1.0,0.529411,0.433004,1.0,0.520911,0.474356,1.0,0.521583,0.452090,1.0,0.521359,0.452090,1.0,0.528964,0.462825,1.0,0.527849,0.457657,1.0,0.527401,0.456066,1.0,0.528516,0.469585,1.0,0.526057,0.467994,1.0,0.526057,0.470381,1.0,0.526505,0.471573,1.0,0.520690,0.452090,1.0,0.523375,0.453681,1.0,0.466291,0.469131,1.0,0.466291,0.469131,1.0,0.497004,0.657194,1.0,0.470898,0.796328,1.0,0.470898,0.796328,1.0,0.510732,0.466397,1.0,0.510732,0.466397,1.0,0.542917,0.646370,1.0,0.556703,0.788024,1.0,0.556703,0.788024,1.0
0.483127,0.463752,1.0,0.483155,0.314573,1.0,0.483145,0.364300,1.0,0.483164,0.264847,1.0,0.480058,0.176256,1.0,0.489278,0.164020,1.0,0.489278,0.164020,1.0,0.472387,0.163950,1.0,0.472387,0.163950,1.0,0.466312,0.264794,1.0,0.449459,0.264740,1.0,0.434104,0.335719,1.0,0.397278,0.354714,1.0,0.376965,0.347592,1.0,0.385596,0.349266,1.0,0.392030,0.358193,1.0,0.380731,0.350939,1.0,0.392971,0.358472,1.0,0.390146,0.359308,1.0,0.388264,0.363494,1.0,0.386537,0.362098,1.0,0.381986,0.367399,1.0,0.388420,0.363494,1.0,0.386380,0.369631,1.0,0.386851,0.371026,1.0,0.381986,0.348149,1.0,0.392501,0.359867,1.0,0.387636,0.372700,1.0,0.500019,0.264838,1.0,0.516874,0.264829,1.0,0.547505,0.352006,1.0,0.570568,0.425641,1.0,0.579026,0.433726,1.0,0.585391,0.431841,1.0,0.585391,0.431086,1.0,0.566510,0.432972,1.0,0.565661,0.436366,1.0,0.570542,0.436366,1.0,0.566938,0.449563,1.0,0.565875,0.451071,1.0,0.584328,0.458991,1.0,0.569057,0.453711,1.0,0.567573,0.454843,1.0,0.570542,0.457859,1.0,0.571177,0.472188,1.0,0.567573,0.469926,1.0,0.567359,0.470680,1.0,0.460105,0.466468,1.0,0.460105,0.466468,1.0,0.480045,0.665394,1.0,0.438724,0.807159,1.0,0.438724,0.807159,1.0,0.506148,0.461036,1.0,0.506148,0.461036,1.0,0.546062,0.640752,1.0,0.582719,0.777155,1.0,0.582719,0.777155,1.0
0.481572,0.470518,1.0,0.480435,0.320418,1.0,0.480814,0.370451,1.0,0.480056,0.270384,1.0,0.477769,0.184467,1.0,0.486212,0.177560,1.0,0.486212,0.177560,1.0,0.470854,0.174881,1.0,0.470854,0.174881,1.0,0.463204,0.270343,1.0,0.446353,0.270301,1.0,0.415668,0.319366,1.0,0.371221,0.313867,1.0,0.355828,0.307531,1.0,0.355465,0.282349,1.0,0.355102,0.282026,1.0,0.356373,0.297523,1.0,0.356009,0.272341,1.0,0.355465,0.274278,1.0,0.356009,0.323351,1.0,0.356191,0.324320,1.0,0.355646,0.323674,1.0,0.355828,0.326580,1.0,0.355828,0.326580,1.0,0.360549,0.325934,1.0,0.356009,0.338848,1.0,0.355102,0.269757,1.0,0.355646,0.271694,1.0,0.495410,0.271651,1.0,0.510765,0.272919,1.0,0.562870,0.341161,1.0,0.607292,0.417452,1.0,0.612385,0.443075,1.0,0.627490,0.416220,1.0,0.637563,0.426067,1.0,0.641589,0.430543,1.0,0.642849,0.436808,1.0,0.642094,0.440837,1.0,0.631271,0.451131,1.0,0.641089,0.447998,1.0,0.639073,0.451131,1.0,0.627490,0.455159,1.0,0.637313,0.454712,1.0,0.636557,0.455159,1.0,0.625729,0.459187,1.0,0.636557,0.458740,1.0,0.634036,0.462320,1.0,0.458573,0.471904,1.0,0.458573,0.471904,1.0,0.455554,0.670831,1.0,0.427957,0.826228,1.0,0.427957,0.826228,1.0,0.504570,0.469132,1.0,0.504570,0.469132,1.0,0.549089,0.640880,1.0,0.605729,0.777206,1.0,0.605729,0.777206,1.0
0.479299,0.471967,1.0,0.476433,0.322799,1.0,0.477388,0.372522,1.0,0.475478,0.273077,1.0,0.475475,0.184525,1.0,0.484651,0.180288,1.0,0.484651,0.180288,1.0,0.469310,0.177570,1.0,0.469310,0.177570,1.0,0.457843,0.273035,1.0,0.440209,0.272994,1.0,0.401873,0.308389,1.0,0.352819,0.273121,1.0,0.345690,0.276054,1.0,0.337063,0.276437,1.0,0.331240,0.274137,1.0,0.335769,0.256499,1.0,0.327357,0.263018,1.0,0.328652,0.268385,1.0,0.337063,0.256116,1.0,0.329083,0.264551,1.0,0.330377,0.270686,1.0,0.337926,0.256882,1.0,0.330161,0.266084,1.0,0.332318,0.272986,1.0,0.339651,0.259950,1.0,0.334044,0.268769,1.0,0.333828,0.272986,1.0,0.493864,0.274404,1.0,0.512251,0.275732,1.0,0.569042,0.338448,1.0,0.622641,0.403703,1.0,0.625500,0.422412,1.0,0.631063,0.435122,1.0,0.637417,0.444537,1.0,0.644828,0.421470,1.0,0.653302,0.427591,1.0,0.658599,0.431827,1.0,0.647214,0.412056,1.0,0.655953,0.419588,1.0,0.662042,0.424766,1.0,0.646948,0.404524,1.0,0.655422,0.408290,1.0,0.661245,0.410644,1.0,0.645625,0.397463,1.0,0.651979,0.395580,1.0,0.655688,0.394168,1.0,0.457048,0.474682,1.0,0.457048,0.474682,1.0,0.458518,0.662602,1.0,0.434089,0.823490,1.0,0.434089,0.823490,1.0,0.501549,0.469252,1.0,0.501549,0.469252,1.0,0.552135,0.640798,1.0,0.602698,0.779917,1.0,0.602698,0.779917,1.0
0.480821,0.465107,1.0,0.475653,0.318913,1.0,0.477376,0.367644,1.0,0.473931,0.270181,1.0,0.473932,0.183099,1.0,0.483176,0.169464,1.0,0.483176,0.169464,1.0,0.466290,0.169393,1.0,0.466290,0.169393,1.0,0.455555,0.270171,1.0,0.437180,0.270160,1.0,0.388142,0.313825,1.0,0.340605,0.270325,1.0,0.334289,0.269918,1.0,0.325136,0.266819,1.0,0.318380,0.262556,1.0,0.329059,0.249384,1.0,0.322085,0.246285,1.0,0.316637,0.245897,1.0,0.331238,0.250934,1.0,0.324482,0.247834,1.0,0.320559,0.253258,1.0,0.334071,0.254421,1.0,0.328187,0.252096,1.0,0.325354,0.257132,1.0,0.335379,0.257907,1.0,0.330148,0.260232,1.0,0.327315,0.262944,1.0,0.492326,0.270235,1.0,0.510722,0.270289,1.0,0.564365,0.332977,1.0,0.621094,0.398318,1.0,0.624380,0.413512,1.0,0.632375,0.426247,1.0,0.638708,0.432615,1.0,0.644495,0.410573,1.0,0.653865,0.421349,1.0,0.659375,0.424778,1.0,0.645047,0.403716,1.0,0.653865,0.410573,1.0,0.659099,0.417920,1.0,0.643396,0.398328,1.0,0.651661,0.402736,1.0,0.656344,0.408124,1.0,0.640911,0.393919,1.0,0.647526,0.393919,1.0,0.651661,0.393919,1.0,0.458594,0.466548,1.0,0.458594,0.466548,1.0,0.461654,0.662681,1.0,0.447826,0.812598,1.0,0.447826,0.812598,1.0,0.503049,0.463666,1.0,0.503049,0.463666,1.0,0.545958,0.640853,1.0,0.576677,0.801691,1.0,0.576677,0.801691,1.0
0.480821,0.465107,1.0,0.475653,0.318913,1.0,0.477376,0.367644,1.0,0.473931,0.270181,1.0,0.473932,0.183099,1.0,0.483176,0.169464,1.0,0.483176,0.169464,1.0,0.466290,0.169393,1.0,0.466290,0.169393,1.0,0.455555,0.270171,1.0,0.437180,0.270160,1.0,0.388142,0.313825,1.0,0.340605,0.270325,1.0,0.334289,0.269918,1.0,0.325136,0.266819,1.0,0.318380,0.262556,1.0,0.329059,0.249384,1.0,0.322085,0.246285,1.0,0.316637,0.245897,1.0,0.331238,0.250934,1.0,0.324482,0.247834,1.0,0.320559,0.253258,1.0,0.334071,0.254421,1.0,0.328187,0.252096,1.0,0.325354,0.257132,1.0,0.335379,0.257907,1.0,0.330148,0.260232,1.0,0.327315,0.262944,1.0,0.492326,0.270235,1.0,0.510722,0.270289,1.0,0.564365,0.332977,1.0,0.621094,0.398318,1.0,0.624380,0.413512,1.0,0.632375,0.426247,1.0,0.638708,0.432615,1.0,0.644495,0.410573,1.0,0.653865,0.421349,1.0,0.659375,0.424778,1.0,0.645047,0.403716,1.0,0.653865,0.410573,1.0,0.659099,0.417920,1.0,0.643396,0.398328,1.0,0.651661,0.402736,1.0,0.656344,0.408124,1.0,0.640911,0.393919,1.0,0.647526,0.393919,1.0,0.651661,0.393919,1.0,0.458594,0.466548,1.0,0.458594,0.466548,1.0,0.461654,0.662681,1.0,0.447826,0.812598,1.0,0.447826,0.812598,1.0,0.503049,0.463666,1.0,0.503049,0.463666,1.0,0.545958,0.640853,1.0,0.576677,0.801691,1.0,0.576677,0.801691,1.0
0.483847,0.462333,1.0,0.475329,0.316184,1.0,0.478168,0.364900,1.0,0.472490,0.267468,1.0,0.473174,0.181667,1.0,0.483199,0.172142,1.0,0.483199,0.172142,1.0,0.467798,0.169428,1.0,0.467798,0.169428,1.0,0.454056,0.267510,1.0,0.435622,0.267552,1.0,0.384986,0.330201,1.0,0.346647,0.292006,1.0,0.351874,0.295494,1.0,0.350064,0.288252,1.0,0.353232,0.273768,1.0,0.341917,0.277389,1.0,0.335127,0.260894,1.0,0.327432,0.258480,1.0,0.339427,0.277389,1.0,0.331280,0.262503,1.0,0.324264,0.259686,1.0,0.336711,0.280607,1.0,0.329695,0.268538,1.0,0.323585,0.266123,1.0,0.334900,0.285838,1.0,0.327659,0.277389,1.0,0.323132,0.273768,1.0,0.491617,0.266150,1.0,0.510744,0.264832,1.0,0.556708,0.335698,1.0,0.607307,0.384790,1.0,0.610615,0.400154,1.0,0.617661,0.409344,1.0,0.624005,0.416863,1.0,0.627297,0.395559,1.0,0.636224,0.402243,1.0,0.640693,0.408926,1.0,0.628000,0.388875,1.0,0.636224,0.398483,1.0,0.638104,0.408091,1.0,0.626828,0.385951,1.0,0.634583,0.389711,1.0,0.634583,0.402243,1.0,0.624948,0.385533,1.0,0.631760,0.385116,1.0,0.633875,0.386369,1.0,0.460088,0.466384,1.0,0.460088,0.466384,1.0,0.470838,0.662731,1.0,0.470837,0.809856,1.0,0.470837,0.809856,1.0,0.507606,0.458281,1.0,0.507606,0.458281,1.0,0.524552,0.638088,1.0,0.536792,0.812509,1.0,0.536792,0.812509,1.0
0.486975,0.467898,1.0,0.474920,0.319624,1.0,0.478938,0.369049,1.0,0.470902,0.270199,1.0,0.475485,0.187129,1.0,0.484715,0.183126,1.0,0.484715,0.183126,1.0,0.470805,0.183024,1.0,0.470805,0.183024,1.0,0.452516,0.271578,1.0,0.434129,0.272957,1.0,0.386591,0.360119,1.0,0.366619,0.319394,1.0,0.356020,0.289475,1.0,0.372555,0.318424,1.0,0.369548,0.318869,1.0,0.363786,0.311298,1.0,0.370551,0.317533,1.0,0.365791,0.317979,1.0,0.362784,0.311744,1.0,0.365290,0.313525,1.0,0.355269,0.304618,1.0,0.356271,0.303727,1.0,0.364287,0.310407,1.0,0.361782,0.314416,1.0,0.353766,0.306844,1.0,0.372555,0.317979,1.0,0.364789,0.323769,1.0,0.489257,0.267526,1.0,0.507611,0.264854,1.0,0.538339,0.338447,1.0,0.582818,0.376433,1.0,0.588646,0.385036,1.0,0.595484,0.391472,1.0,0.602120,0.395763,1.0,0.603526,0.377169,1.0,0.610771,0.384320,1.0,0.614187,0.387181,1.0,0.601516,0.372879,1.0,0.608156,0.380030,1.0,0.610167,0.387181,1.0,0.599708,0.371091,1.0,0.604937,0.378599,1.0,0.606344,0.384678,1.0,0.597094,0.370733,1.0,0.602323,0.377169,1.0,0.602927,0.381818,1.0,0.464738,0.469311,1.0,0.464738,0.469311,1.0,0.473917,0.665330,1.0,0.504567,0.815237,1.0,0.504567,0.815237,1.0,0.509212,0.466485,1.0,0.509212,0.466485,1.0,0.504589,0.651797,1.0,0.495443,0.820756,1.0,0.495443,0.820756,1.0
0.489277,0.473306,1.0,0.475443,0.325181,1.0,0.480054,0.374556,1.0,0.470831,0.275806,1.0,0.476942,0.203449,1.0,0.484739,0.204751,1.0,0.484739,0.204751,1.0,0.470907,0.202098,1.0,0.470907,0.202098,1.0,0.453253,0.283869,1.0,0.435675,0.291931,1.0,0.409599,0.392845,1.0,0.417215,0.338366,1.0,0.427291,0.337906,1.0,0.422249,0.300832,1.0,0.435541,0.311832,1.0,0.412166,0.312240,1.0,0.420416,0.308573,1.0,0.433249,0.307351,1.0,0.413312,0.316314,1.0,0.419270,0.316721,1.0,0.433707,0.315092,1.0,0.411021,0.314684,1.0,0.430957,0.331387,1.0,0.433249,0.331794,1.0,0.411021,0.311018,1.0,0.438290,0.331794,1.0,0.436916,0.333831,1.0,0.484673,0.273044,1.0,0.498516,0.270282,1.0,0.519987,0.338298,1.0,0.558250,0.360245,1.0,0.563828,0.368071,1.0,0.570380,0.377394,1.0,0.577099,0.379432,1.0,0.580542,0.366323,1.0,0.581198,0.367488,1.0,0.581854,0.370110,1.0,0.576281,0.363993,1.0,0.580870,0.366031,1.0,0.580708,0.365741,1.0,0.574318,0.364867,1.0,0.580708,0.364575,1.0,0.582344,0.373023,1.0,0.569073,0.378850,1.0,0.581688,0.364867,1.0,0.581688,0.366906,1.0,0.469321,0.477419,1.0,0.469321,0.477419,1.0,0.481612,0.662684,1.0,0.522984,0.834394,1.0,0.522984,0.834394,1.0,0.509234,0.469193,1.0,0.509234,0.469193,1.0,0.486190,0.646408,1.0,0.469331,0.828914,1.0,0.469331,0.828914,1.0
0.489234,0.476029,1.0,0.474271,0.340079,1.0,0.479259,0.385395,1.0,0.469284,0.294762,1.0,0.476998,0.217066,1.0,0.486221,0.223824,1.0,0.486221,0.223824,1.0,0.472420,0.221145,1.0,0.472420,0.221145,1.0,0.452476,0.301578,1.0,0.435667,0.308394,1.0,0.441770,0.403782,1.0,0.461646,0.341218,1.0,0.470384,0.325501,1.0,0.472168,0.321627,1.0,0.484054,0.320219,1.0,0.481677,0.335715,1.0,0.485242,0.330431,1.0,0.482667,0.322331,1.0,0.463253,0.343463,1.0,0.484648,0.324093,1.0,0.484648,0.324093,1.0,0.462857,0.343463,1.0,0.460480,0.344167,1.0,0.484846,0.325501,1.0,0.462263,0.344167,1.0,0.462263,0.344871,1.0,0.484054,0.331136,1.0,0.483087,0.290682,1.0,0.496891,0.286603,1.0,0.507712,0.338274,1.0,0.538328,0.346534,1.0,0.544010,0.359133,1.0,0.550953,0.364744,1.0,0.556885,0.366314,1.0,0.551589,0.347465,1.0,0.555375,0.349036,1.0,0.554740,0.349933,1.0,0.552089,0.347241,1.0,0.553479,0.348587,1.0,0.554740,0.349485,1.0,0.552724,0.346344,1.0,0.553229,0.347465,1.0,0.552974,0.347241,1.0,0.556380,0.348138,1.0,0.556510,0.348363,1.0,0.557391,0.364968,1.0,0.470788,0.482793,1.0,0.470788,0.482793,1.0,0.486187,0.662673,1.0,0.529130,0.839840,1.0,0.529130,0.839840,1.0,0.507680,0.469265,1.0,0.507680,0.469265,1.0,0.480032,0.665396,1.0,0.452502,0.839825,1.0,0.452502,0.839825,1.0
0.487711,0.489690,1.0,0.473954,0.345534,1.0,0.478540,0.393586,1.0,0.469368,0.297481,1.0,0.480100,0.226569,1.0,0.487714,0.226559,1.0,0.487714,0.226559,1.0,0.472485,0.226579,1.0,0.472485,0.226579,1.0,0.452534,0.305635,1.0,0.435699,0.313789,1.0,0.447921,0.406616,1.0,0.480076,0.349275,1.0,0.487146,0.344342,1.0,0.494621,0.338047,1.0,0.500326,0.333850,1.0,0.493047,0.306570,1.0,0.504654,0.312866,1.0,0.502097,0.324407,1.0,0.490687,0.308319,1.0,0.503474,0.314615,1.0,0.500523,0.325106,1.0,0.489506,0.311118,1.0,0.499933,0.316363,1.0,0.498753,0.325457,1.0,0.489703,0.314615,1.0,0.496982,0.318811,1.0,0.497376,0.325106,1.0,0.483169,0.293382,1.0,0.496970,0.289283,1.0,0.507665,0.335666,1.0,0.529115,0.343804,1.0,0.534229,0.355683,1.0,0.539198,0.357706,1.0,0.541266,0.340605,1.0,0.540849,0.340972,1.0,0.540750,0.340788,1.0,0.534854,0.336927,1.0,0.538573,0.342076,1.0,0.537333,0.341340,1.0,0.532885,0.338766,1.0,0.537333,0.348144,1.0,0.533818,0.346673,1.0,0.533094,0.345754,1.0,0.532161,0.354396,1.0,0.533302,0.347408,1.0,0.531646,0.344282,1.0,0.469277,0.491092,1.0,0.469277,0.491092,1.0,0.483177,0.662761,1.0,0.529115,0.839892,1.0,0.529115,0.839892,1.0,0.506145,0.488289,1.0,0.506145,0.488289,1.0,0.480039,0.670847,1.0,0.455524,0.842569,1.0,0.455524,0.842569,1.0
0.487711,0.489690,1.0,0.473954,0.345534,1.0,0.478540,0.393586,1.0,0.469368,0.297481,1.0,0.480100,0.226569,1.0,0.487714,0.226559,1.0,0.487714,0.226559,1.0,0.472485,0.226579,1.0,0.472485,0.226579,1.0,0.452534,0.305635,1.0,0.435699,0.313789,1.0,0.447921,0.406616,1.0,0.480076,0.349275,1.0,0.487146,0.344342,1.0,0.494621,0.338047,1.0,0.500326,0.333850,1.0,0.493047,0.306570,1.0,0.504654,0.312866,1.0,0.502097,0.324407,1.0,0.490687,0.308319,1.0,0.503474,0.314615,1.0,0.500523,0.325106,1.0,0.489506,0.311118,1.0,0.499933,0.316363,1.0,0.498753,0.325457,1.0,0.489703,0.314615,1.0,0.496982,0.318811,1.0,0.497376,0.325106,1.0,0.483169,0.293382,1.0,0.496970,0.289283,1.0,0.507665,0.335666,1.0,0.529115,0.343804,1.0,0.534229,0.355683,1.0,0.539198,0.357706,1.0,0.541266,0.340605,1.0,0.540849,0.340972,1.0,0.540750,0.340788,1.0,0.534854,0.336927,1.0,0.538573,0.342076,1.0,0.537333,0.341340,1.0,0.532885,0.338766,1.0,0.537333,0.348144,1.0,0.533818,0.346673,1.0,0.533094,0.345754,1.0,0.532161,0.354396,1.0,0.533302,0.347408,1.0,0.531646,0.344282,1.0,0.469277,0.491092,1.0,0.469277,0.491092,1.0,0.483177,0.662761,1.0,0.529115,0.839892,1.0,0.529115,0.839892,1.0,0.506145,0.488289,1.0,0.506145,0.488289,1.0,0.480039,0.670847,1.0,0.455524,0.842569,1.0,0.455524,0.842569,1.0
0.478555,0.473293,1.0,0.472828,0.337320,1.0,0.474737,0.382644,1.0,0.470919,0.291995,1.0,0.477716,0.208950,1.0,0.489286,0.207737,1.0,0.489286,0.207737,1.0,0.473934,0.207721,1.0,0.473934,0.207721,1.0,0.454808,0.293431,1.0,0.438698,0.294866,1.0,0.432574,0.406568,1.0,0.450958,0.360297,1.0,0.478331,0.334323,1.0,0.466289,0.326089,1.0,0.455635,0.362731,1.0,0.470920,0.335558,1.0,0.461194,0.352850,1.0,0.465131,0.342969,1.0,0.470226,0.354909,1.0,0.461194,0.355732,1.0,0.461194,0.356556,1.0,0.469994,0.356556,1.0,0.461657,0.352850,1.0,0.468836,0.356556,1.0,0.467215,0.366025,1.0,0.467215,0.362731,1.0,0.467215,0.362731,1.0,0.486222,0.286588,1.0,0.501525,0.281181,1.0,0.519964,0.335760,1.0,0.539854,0.362872,1.0,0.542083,0.376490,1.0,0.546026,0.384898,1.0,0.546552,0.385366,1.0,0.546682,0.383964,1.0,0.546943,0.384431,1.0,0.547078,0.385366,1.0,0.547078,0.383731,1.0,0.546943,0.383497,1.0,0.546943,0.384197,1.0,0.547208,0.383964,1.0,0.547078,0.383964,1.0,0.547078,0.384665,1.0,0.547078,0.384431,1.0,0.547865,0.386767,1.0,0.547208,0.385599,1.0,0.460116,0.477379,1.0,0.460116,0.477379,1.0,0.481616,0.659878,1.0,0.521531,0.837096,1.0,0.521531,0.837096,1.0,0.496993,0.469207,1.0,0.496993,0.469207,1.0,0.483198,0.657186,1.0,0.461720,0.839778,1.0,0.461720,0.839778,1.0
0.473920,0.466469,1.0,0.473925,0.323403,1.0,0.473923,0.371091,1.0,0.473926,0.275714,1.0,0.477786,0.202147,1.0,0.486252,0.202131,1.0,0.486252,0.202131,1.0,0.470942,0.204696,1.0,0.470942,0.204696,1.0,0.457841,0.278450,1.0,0.441755,0.281186,1.0,0.421731,0.362910,1.0,0.408019,0.379308,1.0,0.395953,0.380795,1.0,0.414164,0.398127,1.0,0.413060,0.399435,1.0,0.395401,0.379488,1.0,0.397057,0.380469,1.0,0.395769,0.383412,1.0,0.402759,0.386681,1.0,0.400000,0.389952,1.0,0.402207,0.394857,1.0,0.403679,0.387336,1.0,0.401104,0.396493,1.0,0.402759,0.402706,1.0,0.414347,0.382431,1.0,0.414531,0.382757,1.0,0.401471,0.406630,1.0,0.491533,0.274330,1.0,0.509140,0.272946,1.0,0.530688,0.327454,1.0,0.550599,0.368337,1.0,0.562120,0.379384,1.0,0.556344,0.375963,1.0,0.551943,0.384272,1.0,0.564453,0.382806,1.0,0.553594,0.383783,1.0,0.552495,0.384761,1.0,0.565557,0.391359,1.0,0.556896,0.393804,1.0,0.558818,0.397958,1.0,0.566104,0.400647,1.0,0.557583,0.400892,1.0,0.559646,0.402846,1.0,0.564318,0.410179,1.0,0.558958,0.407734,1.0,0.560604,0.408468,1.0,0.452488,0.466531,1.0,0.452488,0.466531,1.0,0.472482,0.665537,1.0,0.509173,0.818007,1.0,0.509173,0.818007,1.0,0.495352,0.466406,1.0,0.495352,0.466406,1.0,0.484697,0.662667,1.0,0.486251,0.839819,1.0,0.486251,0.839819,1.0
0.470889,0.466464,1.0,0.474342,0.321308,1.0,0.473191,0.369693,1.0,0.475493,0.272922,1.0,0.477004,0.203437,1.0,0.483191,0.199436,1.0,0.483191,0.199436,1.0,0.467821,0.199448,1.0,0.467821,0.199448,1.0,0.459384,0.272973,1.0,0.443275,0.273023,1.0,0.398818,0.357514,1.0,0.365127,0.376576,1.0,0.355442,0.366738,1.0,0.364752,0.395599,1.0,0.363797,0.394750,1.0,0.364514,0.394750,1.0,0.354964,0.390081,1.0,0.355680,0.390506,1.0,0.359739,0.388384,1.0,0.355203,0.388808,1.0,0.354486,0.390081,1.0,0.357829,0.385837,1.0,0.354964,0.399844,1.0,0.355442,0.402390,1.0,0.352816,0.384989,1.0,0.351383,0.390081,1.0,0.353532,0.399419,1.0,0.493106,0.272919,1.0,0.510719,0.272916,1.0,0.545995,0.338278,1.0,0.579661,0.387487,1.0,0.591521,0.393425,1.0,0.591521,0.397413,1.0,0.581802,0.393757,1.0,0.582922,0.391099,1.0,0.580865,0.391431,1.0,0.582359,0.403726,1.0,0.593203,0.396748,1.0,0.579370,0.406384,1.0,0.584229,0.412033,1.0,0.593203,0.398409,1.0,0.581427,0.412033,1.0,0.584604,0.414692,1.0,0.593203,0.407714,1.0,0.582922,0.416021,1.0,0.587406,0.421006,1.0,0.447925,0.466481,1.0,0.447925,0.466481,1.0,0.461711,0.673578,1.0,0.484683,0.801656,1.0,0.484683,0.801656,1.0,0.493853,0.466447,1.0,0.493853,0.466447,1.0,0.498483,0.670840,1.0,0.515314,0.837026,1.0,0.515314,0.837026,1.0
0.468581,0.466439,1.0,0.471482,0.321396,1.0,0.470515,0.369744,1.0,0.472449,0.273048,1.0,0.470875,0.200798,1.0,0.473996,0.202094,1.0,0.473996,0.202094,1.0,0.460129,0.202056,1.0,0.460129,0.202056,1.0,0.456327,0.273069,1.0,0.440205,0.273091,1.0,0.392720,0.332974,1.0,0.348297,0.338459,1.0,0.346666,0.340650,1.0,0.335774,0.363051,1.0,0.337696,0.344826,1.0,0.332784,0.361532,1.0,0.324455,0.352041,1.0,0.332570,0.365330,1.0,0.331289,0.359255,1.0,0.332357,0.363811,1.0,0.332357,0.363051,1.0,0.333638,0.355837,1.0,0.330007,0.362671,1.0,0.331289,0.362671,1.0,0.332997,0.359634,1.0,0.337482,0.364570,1.0,0.332784,0.366848,1.0,0.490071,0.273028,1.0,0.507692,0.273007,1.0,0.553677,0.338500,1.0,0.594990,0.401077,1.0,0.595792,0.416615,1.0,0.600880,0.426841,1.0,0.605526,0.435494,1.0,0.612828,0.413469,1.0,0.619245,0.421334,1.0,0.619464,0.422907,1.0,0.615927,0.402456,1.0,0.620349,0.407569,1.0,0.619245,0.413861,1.0,0.615703,0.395376,1.0,0.618802,0.399309,1.0,0.617917,0.401276,1.0,0.614156,0.394982,1.0,0.615042,0.396949,1.0,0.616589,0.397736,1.0,0.446372,0.466498,1.0,0.446372,0.466498,1.0,0.458599,0.668253,1.0,0.458553,0.815257,1.0,0.458553,0.815257,1.0,0.490790,0.466381,1.0,0.490790,0.466381,1.0,0.509188,0.662709,1.0,0.535250,0.820751,1.0,0.535250,0.820751,1.0
0.467011,0.476029,1.0,0.471035,0.327871,1.0,0.469694,0.377257,1.0,0.472377,0.278485,1.0,0.464766,0.203406,1.0,0.469311,0.202139,1.0,0.469311,0.202139,1.0,0.452477,0.202101,1.0,0.452477,0.202101,1.0,0.455538,0.278446,1.0,0.438700,0.278407,1.0,0.388126,0.313731,1.0,0.345158,0.316604,1.0,0.340347,0.332081,1.0,0.334766,0.345193,1.0,0.328587,0.346965,1.0,0.330182,0.333144,1.0,0.325796,0.346256,1.0,0.325397,0.345902,1.0,0.325995,0.329246,1.0,0.321411,0.341649,1.0,0.323205,0.340941,1.0,0.323803,0.324285,1.0,0.319019,0.336688,1.0,0.320813,0.335979,1.0,0.322208,0.318969,1.0,0.317823,0.331018,1.0,0.319019,0.331727,1.0,0.489269,0.278482,1.0,0.506161,0.278480,1.0,0.555203,0.343898,1.0,0.602672,0.406567,1.0,0.600740,0.427247,1.0,0.606286,0.439244,1.0,0.610380,0.449097,1.0,0.617609,0.431960,1.0,0.624839,0.437530,1.0,0.627974,0.440100,1.0,0.620505,0.424677,1.0,0.629661,0.428961,1.0,0.633276,0.428961,1.0,0.620984,0.415680,1.0,0.630141,0.418679,1.0,0.633036,0.415680,1.0,0.619781,0.407539,1.0,0.627734,0.407968,1.0,0.630141,0.406254,1.0,0.446296,0.477406,1.0,0.446296,0.477406,1.0,0.458539,0.670844,1.0,0.449451,0.817950,1.0,0.449451,0.817950,1.0,0.487727,0.474652,1.0,0.487727,0.474652,1.0,0.516843,0.660005,1.0,0.546078,0.823475,1.0,0.546078,0.823475,1.0
0.467011,0.476029,1.0,0.471035,0.327871,1.0,0.469694,0.377257,1.0,0.472377,0.278485,1.0,0.464766,0.203406,1.0,0.469311,0.202139,1.0,0.469311,0.202139,1.0,0.452477,0.202101,1.0,0.452477,0.202101,1.0,0.455538,0.278446,1.0,0.438700,0.278407,1.0,0.388126,0.313731,1.0,0.345158,0.316604,1.0,0.340347,0.332081,1.0,0.334766,0.345193,1.0,0.328587,0.346965,1.0,0.330182,0.333144,1.0,0.325796,0.346256,1.0,0.325397,0.345902,1.0,0.325995,0.329246,1.0,0.321411,0.341649,1.0,0.323205,0.340941,1.0,0.323803,0.324285,1.0,0.319019,0.336688,1.0,0.320813,0.335979,1.0,0.322208,0.318969,1.0,0.317823,0.331018,1.0,0.319019,0.331727,1.0,0.489269,0.278482,1.0,0.506161,0.278480,1.0,0.555203,0.343898,1.0,0.602672,0.406567,1.0,0.600740,0.427247,1.0,0.606286,0.439244,1.0,0.610380,0.449097,1.0,0.617609,0.431960,1.0,0.624839,0.437530,1.0,0.627974,0.440100,1.0,0.620505,0.424677,1.0,0.629661,0.428961,1.0,0.633276,0.428961,1.0,0.620984,0.415680,1.0,0.630141,0.418679,1.0,0.633036,0.415680,1.0,0.619781,0.407539,1.0,0.627734,0.407968,1.0,0.630141,0.406254,1.0,0.446296,0.477406,1.0,0.446296,0.477406,1.0,0.458539,0.670844,1.0,0.449451,0.817950,1.0,0.449451,0.817950,1.0,0.487727,0.474652,1.0,0.487727,0.474652,1.0,0.516843,0.660005,1.0,0.546078,0.823475,1.0,0.546078,0.823475,1.0
0.467024,0.477402,1.0,0.471011,0.328229,1.0,0.469682,0.377953,1.0,0.472340,0.278505,1.0,0.463184,0.202107,1.0,0.461703,0.202053,1.0,0.461703,0.202053,1.0,0.447919,0.202074,1.0,0.447919,0.202074,1.0,0.454750,0.278487,1.0,0.437160,0.278469,1.0,0.386555,0.313771,1.0,0.342132,0.316516,1.0,0.340635,0.329121,1.0,0.334652,0.341884,1.0,0.328271,0.344012,1.0,0.331262,0.328412,1.0,0.326077,0.344012,1.0,0.326077,0.341530,1.0,0.326675,0.324867,1.0,0.321490,0.339048,1.0,0.323285,0.337276,1.0,0.324083,0.320967,1.0,0.319496,0.335148,1.0,0.321490,0.333021,1.0,0.321889,0.316358,1.0,0.318499,0.329831,1.0,0.318897,0.329831,1.0,0.489968,0.278482,1.0,0.507597,0.278459,1.0,0.556646,0.357346,1.0,0.595073,0.422850,1.0,0.593677,0.438858,1.0,0.599016,0.452231,1.0,0.602656,0.461290,1.0,0.611875,0.446623,1.0,0.617703,0.455251,1.0,0.620370,0.458270,1.0,0.614302,0.437565,1.0,0.620370,0.443172,1.0,0.624495,0.444035,1.0,0.614302,0.428937,1.0,0.620370,0.432819,1.0,0.624495,0.435839,1.0,0.612849,0.420741,1.0,0.618672,0.421604,1.0,0.622068,0.422035,1.0,0.446302,0.480126,1.0,0.446302,0.480126,1.0,0.460153,0.665364,1.0,0.458656,0.812611,1.0,0.458656,0.812611,1.0,0.487746,0.474678,1.0,0.487746,0.474678,1.0,0.515327,0.654540,1.0,0.544411,0.823446,1.0,0.544411,0.823446,1.0
0.466272,0.465104,1.0,0.469750,0.320982,1.0,0.468591,0.369022,1.0,0.470909,0.272941,1.0,0.460866,0.189940,1.0,0.461653,0.188524,1.0,0.461653,0.188524,1.0,0.447868,0.188556,1.0,0.447868,0.188556,1.0,0.453299,0.274307,1.0,0.435689,0.275673,1.0,0.386592,0.322082,1.0,0.349791,0.335751,1.0,0.349069,0.335547,1.0,0.338258,0.330470,1.0,0.344785,0.329382,1.0,0.329486,0.341349,1.0,0.334178,0.335909,1.0,0.341725,0.335184,1.0,0.328874,0.345338,1.0,0.332139,0.347152,1.0,0.342949,0.345338,1.0,0.331730,0.348602,1.0,0.332546,0.352954,1.0,0.340094,0.355493,1.0,0.331730,0.350778,1.0,0.333566,0.355855,1.0,0.337646,0.359481,1.0,0.488513,0.271631,1.0,0.506117,0.270321,1.0,0.546031,0.354705,1.0,0.581292,0.425669,1.0,0.599526,0.449086,1.0,0.595885,0.463243,1.0,0.588604,0.467287,1.0,0.586786,0.466882,1.0,0.585651,0.431291,1.0,0.581328,0.440593,1.0,0.579505,0.457984,1.0,0.579734,0.447469,1.0,0.580646,0.448278,1.0,0.581099,0.462838,1.0,0.582917,0.453940,1.0,0.582917,0.456771,1.0,0.584740,0.464456,1.0,0.589745,0.461624,1.0,0.582917,0.463646,1.0,0.446288,0.466495,1.0,0.446288,0.466495,1.0,0.460186,0.662610,1.0,0.467790,0.804406,1.0,0.467790,0.804406,1.0,0.486257,0.463713,1.0,0.486257,0.463713,1.0,0.507666,0.646431,1.0,0.521458,0.828928,1.0,0.521458,0.828928,1.0
0.467082,0.461019,1.0,0.468779,0.317917,1.0,0.468214,0.365618,1.0,0.469345,0.270217,1.0,0.460149,0.185842,1.0,0.463214,0.185830,1.0,0.463214,0.185830,1.0,0.447916,0.185832,1.0,0.447916,0.185832,1.0,0.451711,0.271602,1.0,0.434077,0.272987,1.0,0.398825,0.330206,1.0,0.381931,0.357394,1.0,0.387389,0.352980,1.0,0.374780,0.358894,1.0,0.371628,0.360140,1.0,0.367251,0.376640,1.0,0.372504,0.360451,1.0,0.372854,0.383177,1.0,0.367776,0.375083,1.0,0.372154,0.390337,1.0,0.371979,0.388158,1.0,0.367601,0.375083,1.0,0.372154,0.390649,1.0,0.372854,0.385045,1.0,0.366725,0.375706,1.0,0.377932,0.388469,1.0,0.370052,0.391894,1.0,0.486966,0.267514,1.0,0.504587,0.264812,1.0,0.536807,0.351994,1.0,0.565885,0.422904,1.0,0.566438,0.430614,1.0,0.578495,0.460081,1.0,0.577417,0.462376,1.0,0.568375,0.430614,1.0,0.569453,0.432144,1.0,0.563208,0.433675,1.0,0.561057,0.441711,1.0,0.559979,0.448217,1.0,0.564500,0.453192,1.0,0.562995,0.455106,1.0,0.579786,0.450513,1.0,0.564500,0.455870,1.0,0.563641,0.466585,1.0,0.576339,0.462759,1.0,0.572250,0.462376,1.0,0.446394,0.463722,1.0,0.446394,0.463722,1.0,0.460180,0.662552,1.0,0.478553,0.812508,1.0,0.478553,0.812508,1.0,0.487770,0.458316,1.0,0.487770,0.458316,1.0,0.493890,0.649111,1.0,0.495310,0.820794,1.0,0.495310,0.820794,1.0
0.467786,0.467811,1.0,0.463220,0.321678,1.0,0.464742,0.370389,1.0,0.461697,0.272968,1.0,0.461682,0.196659,1.0,0.467789,0.188532,1.0,0.467789,0.188532,1.0,0.449452,0.188531,1.0,0.449452,0.188531,1.0,0.445589,0.277093,1.0,0.429481,0.281219,1.0,0.392685,0.379334,1.0,0.435599,0.371093,1.0,0.447084,0.373564,1.0,0.456088,0.377024,1.0,0.453411,0.379620,1.0,0.458765,0.379620,1.0,0.456331,0.383081,1.0,0.454141,0.378755,1.0,0.458765,0.373996,1.0,0.456088,0.380918,1.0,0.454628,0.379187,1.0,0.458521,0.374429,1.0,0.456331,0.379187,1.0,0.456088,0.380053,1.0,0.460224,0.373131,1.0,0.453168,0.380485,1.0,0.453411,0.380485,1.0,0.479298,0.270220,1.0,0.496898,0.267473,1.0,0.523010,0.338508,1.0,0.546052,0.406575,1.0,0.542542,0.406694,1.0,0.542177,0.412199,1.0,0.546188,0.422237,1.0,0.554927,0.419322,1.0,0.547464,0.422561,1.0,0.545094,0.430656,1.0,0.558391,0.427742,1.0,0.546370,0.433570,1.0,0.543635,0.440370,1.0,0.558937,0.437132,1.0,0.548005,0.441019,1.0,0.546917,0.448143,1.0,0.558755,0.444581,1.0,0.551286,0.448790,1.0,0.547646,0.453323,1.0,0.447844,0.469154,1.0,0.447844,0.469154,1.0,0.461668,0.659984,1.0,0.495439,0.815349,1.0,0.495439,0.815349,1.0,0.487729,0.466469,1.0,0.487729,0.466469,1.0,0.472472,0.646296,1.0,0.461651,0.834377,1.0,0.461651,0.834377,1.0
0.468584,0.473329,1.0,0.462287,0.333315,1.0,0.464386,0.379986,1.0,0.460188,0.286644,1.0,0.463199,0.208989,1.0,0.470837,0.204794,1.0,0.470837,0.204794,1.0,0.455556,0.204747,1.0,0.455556,0.204747,1.0,0.446364,0.289370,1.0,0.432539,0.292097,1.0,0.409621,0.401019,1.0,0.446332,0.363030,1.0,0.451488,0.367132,1.0,0.469965,0.368411,1.0,0.468766,0.369264,1.0,0.471405,0.364998,1.0,0.469485,0.365425,1.0,0.469965,0.352199,1.0,0.461086,0.356039,1.0,0.468045,0.351773,1.0,0.468766,0.350493,1.0,0.460606,0.353053,1.0,0.466126,0.348786,1.0,0.466846,0.349640,1.0,0.457727,0.350493,1.0,0.461326,0.342814,1.0,0.464206,0.339401,1.0,0.476252,0.281163,1.0,0.492315,0.275681,1.0,0.515302,0.338485,1.0,0.533802,0.401039,1.0,0.535375,0.415344,1.0,0.535698,0.428307,1.0,0.545906,0.419665,1.0,0.536505,0.428307,1.0,0.537479,0.432053,1.0,0.537964,0.439543,1.0,0.541208,0.428307,1.0,0.541854,0.430324,1.0,0.544448,0.432341,1.0,0.543964,0.427155,1.0,0.545583,0.431764,1.0,0.546068,0.430900,1.0,0.543474,0.418513,1.0,0.544286,0.419953,1.0,0.545906,0.421969,1.0,0.449400,0.474699,1.0,0.449400,0.474699,1.0,0.469292,0.646418,1.0,0.504614,0.831619,1.0,0.504614,0.831619,1.0,0.487768,0.471958,1.0,0.487768,0.471958,1.0,0.460206,0.649122,1.0,0.446267,0.834306,1.0,0.446267,0.834306,1.0
0.468584,0.473329,1.0,0.462287,0.333315,1.0,0.464386,0.379986,1.0,0.460188,0.286644,1.0,0.463199,0.208989,1.0,0.470837,0.204794,1.0,0.470837,0.204794,1.0,0.455556,0.204747,1.0,0.455556,0.204747,1.0,0.446364,0.289370,1.0,0.432539,0.292097,1.0,0.409621,0.401019,1.0,0.446332,0.363030,1.0,0.451488,0.367132,1.0,0.469965,0.368411,1.0,0.468766,0.369264,1.0,0.471405,0.364998,1.0,0.469485,0.365425,1.0,0.469965,0.352199,1.0,0.461086,0.356039,1.0,0.468045,0.351773,1.0,0.468766,0.350493,1.0,0.460606,0.353053,1.0,0.466126,0.348786,1.0,0.466846,0.349640,1.0,0.457727,0.350493,1.0,0.461326,0.342814,1.0,0.464206,0.339401,1.0,0.476252,0.281163,1.0,0.492315,0.275681,1.0,0.515302,0.338485,1.0,0.533802,0.401039,1.0,0.535375,0.415344,1.0,0.535698,0.428307,1.0,0.545906,0.419665,1.0,0.536505,0.428307,1.0,0.537479,0.432053,1.0,0.537964,0.439543,1.0,0.541208,0.428307,1.0,0.541854,0.430324,1.0,0.544448,0.432341,1.0,0.543964,0.427155,1.0,0.545583,0.431764,1.0,0.546068,0.430900,1.0,0.543474,0.418513,1.0,0.544286,0.419953,1.0,0.545906,0.421969,1.0,0.449400,0.474699,1.0,0.449400,0.474699,1.0,0.469292,0.646418,1.0,0.504614,0.831619,1.0,0.504614,0.831619,1.0,0.487768,0.471958,1.0,0.487768,0.471958,1.0,0.460206,0.649122,1.0,0.446267,0.834306,1.0,0.446267,0.834306,1.0
0.467040,0.473287,1.0,0.461835,0.339436,1.0,0.463570,0.384053,1.0,0.460101,0.294819,1.0,0.464686,0.217092,1.0,0.472407,0.207512,1.0,0.472407,0.207512,1.0,0.458585,0.204957,1.0,0.458585,0.204957,1.0,0.445557,0.301615,1.0,0.431014,0.308410,1.0,0.423428,0.398364,1.0,0.452484,0.357426,1.0,0.457943,0.351925,1.0,0.466765,0.353927,1.0,0.468642,0.351257,1.0,0.481030,0.326899,1.0,0.479716,0.339912,1.0,0.471457,0.339912,1.0,0.478027,0.338578,1.0,0.479716,0.339912,1.0,0.471833,0.339912,1.0,0.479904,0.331570,1.0,0.479153,0.340914,1.0,0.470707,0.341915,1.0,0.479341,0.325564,1.0,0.477276,0.351925,1.0,0.470331,0.341915,1.0,0.474678,0.290695,1.0,0.489255,0.286570,1.0,0.503087,0.335513,1.0,0.521432,0.381944,1.0,0.521109,0.396108,1.0,0.519810,0.402816,1.0,0.520591,0.412992,1.0,0.520461,0.410448,1.0,0.520071,0.413917,1.0,0.521109,0.416924,1.0,0.524755,0.405360,1.0,0.526188,0.407210,1.0,0.527875,0.408829,1.0,0.527484,0.403741,1.0,0.529958,0.407442,1.0,0.531130,0.404666,1.0,0.530349,0.395415,1.0,0.533078,0.402354,1.0,0.534510,0.403509,1.0,0.449433,0.474665,1.0,0.449433,0.474665,1.0,0.470864,0.649071,1.0,0.506075,0.831682,1.0,0.506075,0.831682,1.0,0.484647,0.471908,1.0,0.484647,0.471908,1.0,0.458623,0.657262,1.0,0.434108,0.842645,1.0,0.434108,0.842645,1.0
0.466295,0.473252,1.0,0.461678,0.337341,1.0,0.463217,0.382645,1.0,0.460140,0.292038,1.0,0.463985,0.207576,1.0,0.472480,0.202105,1.0,0.472480,0.202105,1.0,0.458595,0.202020,1.0,0.458595,0.202020,1.0,0.446325,0.293485,1.0,0.432511,0.294931,1.0,0.421793,0.384781,1.0,0.431021,0.362898,1.0,0.431603,0.370165,1.0,0.440890,0.363763,1.0,0.443733,0.364100,1.0,0.443543,0.359382,1.0,0.443354,0.359382,1.0,0.443543,0.359045,1.0,0.425538,0.363763,1.0,0.431792,0.359045,1.0,0.442595,0.349274,1.0,0.426107,0.363763,1.0,0.431792,0.356687,1.0,0.439563,0.346916,1.0,0.434256,0.367469,1.0,0.436152,0.367132,1.0,0.437478,0.342536,1.0,0.475476,0.286626,1.0,0.490812,0.281214,1.0,0.501533,0.341071,1.0,0.516885,0.379287,1.0,0.512877,0.386829,1.0,0.518192,0.395125,1.0,0.521823,0.400656,1.0,0.523635,0.388672,1.0,0.526620,0.390516,1.0,0.529729,0.391669,1.0,0.523375,0.382450,1.0,0.525193,0.387059,1.0,0.520525,0.402038,1.0,0.521693,0.378994,1.0,0.523120,0.383603,1.0,0.519099,0.400194,1.0,0.519488,0.375767,1.0,0.521432,0.381529,1.0,0.517673,0.396507,1.0,0.447893,0.474618,1.0,0.447893,0.474618,1.0,0.467831,0.646400,1.0,0.500026,0.820713,1.0,0.500026,0.820713,1.0,0.484697,0.471886,1.0,0.484697,0.471886,1.0,0.461718,0.654525,1.0,0.443302,0.834393,1.0,0.443302,0.834393,1.0
0.465544,0.463735,1.0,0.461543,0.322742,1.0,0.462877,0.369740,1.0,0.460209,0.275744,1.0,0.464780,0.202061,1.0,0.473919,0.185661,1.0,0.473919,0.185661,1.0,0.458680,0.185669,1.0,0.458680,0.185669,1.0,0.446392,0.282517,1.0,0.432576,0.289289,1.0,0.409598,0.360184,1.0,0.386633,0.403759,1.0,0.373314,0.420240,1.0,0.375678,0.414837,1.0,0.375847,0.414537,1.0,0.375847,0.417238,1.0,0.376016,0.417238,1.0,0.374496,0.423542,1.0,0.383951,0.416338,1.0,0.374158,0.423842,1.0,0.374327,0.424743,1.0,0.373145,0.424142,1.0,0.373483,0.425043,1.0,0.389692,0.424142,1.0,0.372132,0.424142,1.0,0.386484,0.426544,1.0,0.388847,0.424142,1.0,0.477025,0.272945,1.0,0.493841,0.270146,1.0,0.504583,0.319269,1.0,0.519852,0.379244,1.0,0.513721,0.386425,1.0,0.517343,0.398500,1.0,0.522927,0.406819,1.0,0.525797,0.395548,1.0,0.529417,0.400109,1.0,0.532740,0.403867,1.0,0.525948,0.389913,1.0,0.528063,0.397963,1.0,0.527760,0.410306,1.0,0.525042,0.386425,1.0,0.527458,0.389913,1.0,0.525042,0.413794,1.0,0.523833,0.382936,1.0,0.525495,0.387230,1.0,0.523229,0.416210,1.0,0.446385,0.463741,1.0,0.446385,0.463741,1.0,0.460105,0.662744,1.0,0.492344,0.809799,1.0,0.492344,0.809799,1.0,0.484703,0.463729,1.0,0.484703,0.463729,1.0,0.470897,0.659908,1.0,0.458610,0.837054,1.0,0.458610,0.837054,1.0
0.464754,0.465063,1.0,0.462435,0.319009,1.0,0.463208,0.367694,1.0,0.461661,0.270324,1.0,0.465517,0.192575,1.0,0.473943,0.180369,1.0,0.473943,0.180369,1.0,0.458656,0.182966,1.0,0.458656,0.182966,1.0,0.447867,0.273074,1.0,0.434072,0.275824,1.0,0.397311,0.357328,1.0,0.352853,0.425542,1.0,0.351347,0.440818,1.0,0.335548,0.456138,1.0,0.338181,0.459117,1.0,0.336745,0.468479,1.0,0.336027,0.469330,1.0,0.337703,0.469756,1.0,0.351347,0.470606,1.0,0.340575,0.472734,1.0,0.346559,0.471032,1.0,0.350390,0.470606,1.0,0.346559,0.471883,1.0,0.333394,0.468054,1.0,0.349671,0.470606,1.0,0.355177,0.459117,1.0,0.336984,0.469756,1.0,0.477751,0.263508,1.0,0.493840,0.256693,1.0,0.509158,0.305651,1.0,0.521547,0.373815,1.0,0.521531,0.382294,1.0,0.518901,0.392806,1.0,0.518736,0.403901,1.0,0.532042,0.399229,1.0,0.535490,0.412076,1.0,0.530234,0.419960,1.0,0.534505,0.398061,1.0,0.539432,0.413828,1.0,0.541240,0.423171,1.0,0.535161,0.397477,1.0,0.540745,0.412952,1.0,0.542552,0.422004,1.0,0.534667,0.397769,1.0,0.535323,0.410032,1.0,0.544521,0.418500,1.0,0.444820,0.466417,1.0,0.444820,0.466417,1.0,0.458539,0.662663,1.0,0.470872,0.804403,1.0,0.470872,0.804403,1.0,0.484688,0.463709,1.0,0.484688,0.463709,1.0,0.480036,0.657251,1.0,0.483183,0.815239,1.0,0.483183,0.815239,1.0
0.463985,0.469222,1.0,0.462281,0.322026,1.0,0.462849,0.371091,1.0,0.461713,0.272961,1.0,0.466245,0.202053,1.0,0.473923,0.185725,1.0,0.473923,0.185725,1.0,0.458671,0.185731,1.0,0.458671,0.185731,1.0,0.447865,0.274378,1.0,0.434016,0.275794,1.0,0.385086,0.357587,1.0,0.331386,0.441849,1.0,0.330890,0.455123,1.0,0.326803,0.471731,1.0,0.321840,0.480036,1.0,0.315124,0.470175,1.0,0.312789,0.472770,1.0,0.312205,0.486784,1.0,0.312789,0.462908,1.0,0.309577,0.473808,1.0,0.310161,0.479518,1.0,0.312205,0.458237,1.0,0.309285,0.467061,1.0,0.310161,0.472251,1.0,0.313665,0.453566,1.0,0.310161,0.462390,1.0,0.310161,0.466022,1.0,0.478550,0.270241,1.0,0.495387,0.267520,1.0,0.519974,0.300281,1.0,0.530641,0.357490,1.0,0.527255,0.365314,1.0,0.526286,0.367280,1.0,0.524490,0.374404,1.0,0.535547,0.384968,1.0,0.535823,0.386442,1.0,0.527948,0.385950,1.0,0.536516,0.385705,1.0,0.535958,0.387179,1.0,0.528083,0.394548,1.0,0.537344,0.385705,1.0,0.536927,0.388161,1.0,0.536234,0.387424,1.0,0.537068,0.385213,1.0,0.537344,0.387916,1.0,0.536099,0.387179,1.0,0.443277,0.469280,1.0,0.443277,0.469280,1.0,0.457032,0.662668,1.0,0.447905,0.812563,1.0,0.447905,0.812563,1.0,0.484694,0.469164,1.0,0.484694,0.469164,1.0,0.496902,0.649076,1.0,0.500004,0.793576,1.0,0.500004,0.793576,1.0
0.463985,0.469222,1.0,0.462281,0.322026,1.0,0.462849,0.371091,1.0,0.461713,0.272961,1.0,0.466245,0.202053,1.0,0.473923,0.185725,1.0,0.473923,0.185725,1.0,0.458671,0.185731,1.0,0.458671,0.185731,1.0,0.447865,0.274378,1.0,0.434016,0.275794,1.0,0.385086,0.357587,1.0,0.331386,0.441849,1.0,0.330890,0.455123,1.0,0.326803,0.471731,1.0,0.321840,0.480036,1.0,0.315124,0.470175,1.0,0.312789,0.472770,1.0,0.312205,0.486784,1.0,0.312789,0.462908,1.0,0.309577,0.473808,1.0,0.310161,0.479518,1.0,0.312205,0.458237,1.0,0.309285,0.467061,1.0,0.310161,0.472251,1.0,0.313665,0.453566,1.0,0.310161,0.462390,1.0,0.310161,0.466022,1.0,0.478550,0.270241,1.0,0.495387,0.267520,1.0,0.519974,0.300281,1.0,0.530641,0.357490,1.0,0.527255,0.365314,1.0,0.526286,0.367280,1.0,0.524490,0.374404,1.0,0.535547,0.384968,1.0,0.535823,0.386442,1.0,0.527948,0.385950,1.0,0.536516,0.385705,1.0,0.535958,0.387179,1.0,0.528083,0.394548,1.0,0.537344,0.385705,1.0,0.536927,0.388161,1.0,0.536234,0.387424,1.0,0.537068,0.385213,1.0,0.537344,0.387916,1.0,0.536099,0.387179,1.0,0.443277,0.469280,1.0,0.443277,0.469280,1.0,0.457032,0.662668,1.0,0.447905,0.812563,1.0,0.447905,0.812563,1.0,0.484694,0.469164,1.0,0.484694,0.469164,1.0,0.496902,0.649076,1.0,0.500004,0.793576,1.0,0.500004,0.793576,1.0
0.463212,0.471967,1.0,0.462075,0.326852,1.0,0.462454,0.375224,1.0,0.461695,0.278481,1.0,0.464758,0.204868,1.0,0.472470,0.199382,1.0,0.472470,0.199382,1.0,0.458606,0.199367,1.0,0.458606,0.199367,1.0,0.447133,0.283866,1.0,0.432571,0.289251,1.0,0.383471,0.360144,1.0,0.334469,0.428291,1.0,0.331738,0.446271,1.0,0.328695,0.459345,1.0,0.321594,0.464755,1.0,0.319312,0.461148,1.0,0.315001,0.469714,1.0,0.315255,0.469714,1.0,0.317030,0.454386,1.0,0.312972,0.460697,1.0,0.314494,0.460697,1.0,0.315255,0.447623,1.0,0.311451,0.453033,1.0,0.313226,0.453935,1.0,0.315508,0.442213,1.0,0.312972,0.445820,1.0,0.313480,0.448074,1.0,0.478528,0.275739,1.0,0.495361,0.272997,1.0,0.532214,0.316547,1.0,0.523021,0.330231,1.0,0.532323,0.315121,1.0,0.521932,0.335900,1.0,0.518525,0.339075,1.0,0.520636,0.337631,1.0,0.519500,0.338209,1.0,0.517390,0.333303,1.0,0.522906,0.324645,1.0,0.519662,0.333592,1.0,0.520636,0.335034,1.0,0.522099,0.321759,1.0,0.527943,0.322336,1.0,0.523557,0.324933,1.0,0.532484,0.308772,1.0,0.528589,0.319739,1.0,0.527453,0.323202,1.0,0.441771,0.471965,1.0,0.441771,0.471965,1.0,0.452498,0.659872,1.0,0.447907,0.812565,1.0,0.447907,0.812565,1.0,0.484654,0.471969,1.0,0.484654,0.471969,1.0,0.513821,0.635459,1.0,0.506131,0.752692,1.0,0.506131,0.752692,1.0
0.463228,0.470617,1.0,0.462062,0.334610,1.0,0.462451,0.379945,1.0,0.461673,0.289274,1.0,0.464711,0.206279,1.0,0.472408,0.204931,1.0,0.472408,0.204931,1.0,0.458549,0.204883,1.0,0.458549,0.204883,1.0,0.446347,0.290593,1.0,0.431021,0.291912,1.0,0.386582,0.357440,1.0,0.349711,0.411962,1.0,0.346228,0.416022,1.0,0.342839,0.411128,1.0,0.346440,0.426942,1.0,0.335426,0.422423,1.0,0.345169,0.428448,1.0,0.345381,0.433719,1.0,0.331614,0.428071,1.0,0.339874,0.436731,1.0,0.343474,0.441627,1.0,0.330554,0.435602,1.0,0.337332,0.441627,1.0,0.340933,0.443133,1.0,0.330554,0.438615,1.0,0.334791,0.448028,1.0,0.336697,0.446898,1.0,0.478544,0.286589,1.0,0.495414,0.283905,1.0,0.538318,0.351971,1.0,0.524510,0.311061,1.0,0.516789,0.303186,1.0,0.517422,0.302436,1.0,0.515945,0.267933,1.0,0.516578,0.274309,1.0,0.515945,0.271684,1.0,0.519953,0.256683,1.0,0.515945,0.274684,1.0,0.517422,0.286685,1.0,0.518898,0.289685,1.0,0.512781,0.275434,1.0,0.524594,0.337688,1.0,0.517422,0.287060,1.0,0.508773,0.278809,1.0,0.521854,0.339563,1.0,0.526703,0.343688,1.0,0.443274,0.471948,1.0,0.443274,0.471948,1.0,0.458666,0.659917,1.0,0.447917,0.812550,1.0,0.447917,0.812550,1.0,0.483181,0.469285,1.0,0.483181,0.469285,1.0,0.521516,0.621754,1.0,0.495403,0.708957,1.0,0.495403,0.708957,1.0
0.461666,0.465075,1.0,0.460578,0.323122,1.0,0.460941,0.370440,1.0,0.460216,0.275804,1.0,0.464746,0.207590,1.0,0.472342,0.210276,1.0,0.472342,0.210276,1.0,0.458587,0.210325,1.0,0.458587,0.210325,1.0,0.445596,0.277137,1.0,0.430977,0.278471,1.0,0.397281,0.349271,1.0,0.365117,0.403809,1.0,0.355076,0.425889,1.0,0.362540,0.414321,1.0,0.362922,0.414662,1.0,0.362731,0.417724,1.0,0.363305,0.414662,1.0,0.364454,0.415002,1.0,0.361583,0.419084,1.0,0.363114,0.412960,1.0,0.364645,0.412280,1.0,0.363497,0.412280,1.0,0.365219,0.412280,1.0,0.365793,0.412280,1.0,0.362922,0.409898,1.0,0.365028,0.412620,1.0,0.365602,0.413981,1.0,0.477787,0.275732,1.0,0.495358,0.275659,1.0,0.530630,0.357521,1.0,0.516843,0.272868,1.0,0.509528,0.234340,1.0,0.514209,0.231314,1.0,0.520167,0.226018,1.0,0.513145,0.235096,1.0,0.514634,0.236988,1.0,0.505059,0.243797,1.0,0.516549,0.246445,1.0,0.514847,0.240771,1.0,0.505059,0.251363,1.0,0.514209,0.255145,1.0,0.511017,0.258172,1.0,0.506336,0.256281,1.0,0.513358,0.257416,1.0,0.510379,0.258172,1.0,0.506761,0.255524,1.0,0.441719,0.466425,1.0,0.441719,0.466425,1.0,0.467797,0.654532,1.0,0.454012,0.798975,1.0,0.454012,0.798975,1.0,0.481614,0.463726,1.0,0.481614,0.463726,1.0,0.519908,0.619169,1.0,0.481559,0.687122,1.0,0.481559,0.687122,1.0
0.460923,0.459631,1.0,0.460397,0.319693,1.0,0.460573,0.366339,1.0,0.460222,0.273047,1.0,0.464731,0.206298,1.0,0.470939,0.221225,1.0,0.470939,0.221225,1.0,0.458577,0.223852,1.0,0.458577,0.223852,1.0,0.444853,0.273082,1.0,0.429485,0.273118,1.0,0.401884,0.354720,1.0,0.385030,0.403834,1.0,0.380647,0.410960,1.0,0.382612,0.417597,1.0,0.381630,0.417946,1.0,0.381433,0.415850,1.0,0.380254,0.417597,1.0,0.377307,0.416898,1.0,0.378879,0.415850,1.0,0.377896,0.417946,1.0,0.381237,0.418295,1.0,0.381630,0.415850,1.0,0.377307,0.417946,1.0,0.381237,0.418994,1.0,0.380844,0.415501,1.0,0.380451,0.416898,1.0,0.377896,0.417946,1.0,0.477796,0.272999,1.0,0.495371,0.272950,1.0,0.516840,0.354698,1.0,0.510784,0.251222,1.0,0.510933,0.245911,1.0,0.516181,0.225132,1.0,0.517373,0.214531,1.0,0.509979,0.232341,1.0,0.505924,0.216651,1.0,0.506640,0.219195,1.0,0.507594,0.228101,1.0,0.509264,0.219619,1.0,0.507117,0.221740,1.0,0.513557,0.232341,1.0,0.508071,0.229796,1.0,0.507355,0.224284,1.0,0.513796,0.234461,1.0,0.509741,0.233613,1.0,0.509741,0.232765,1.0,0.440233,0.461003,1.0,0.440233,0.461003,1.0,0.469277,0.646331,1.0,0.458667,0.793538,1.0,0.458667,0.793538,1.0,0.481614,0.458260,1.0,0.481614,0.458260,1.0,0.509159,0.624539,1.0,0.461674,0.687186,1.0,0.461674,0.687186,1.0
0.463156,0.455573,1.0,0.460899,0.318704,1.0,0.461651,0.364327,1.0,0.460147,0.273081,1.0,0.464737,0.209038,1.0,0.470883,0.223964,1.0,0.470883,0.223964,1.0,0.458532,0.226512,1.0,0.458532,0.226512,1.0,0.444827,0.274384,1.0,0.429508,0.275688,1.0,0.411074,0.354697,1.0,0.398822,0.403934,1.0,0.395839,0.411710,1.0,0.399898,0.422066,1.0,0.397957,0.423948,1.0,0.394603,0.418928,1.0,0.394250,0.419869,1.0,0.393015,0.418928,1.0,0.394603,0.418928,1.0,0.394427,0.422380,1.0,0.394250,0.416418,1.0,0.398310,0.424576,1.0,0.399192,0.427400,1.0,0.397251,0.426144,1.0,0.398310,0.425204,1.0,0.397074,0.426458,1.0,0.397074,0.426772,1.0,0.475470,0.273022,1.0,0.490794,0.272963,1.0,0.506078,0.335747,1.0,0.518359,0.242946,1.0,0.516947,0.233306,1.0,0.517821,0.216985,1.0,0.519133,0.206105,1.0,0.518259,0.210769,1.0,0.510171,0.200665,1.0,0.507111,0.195225,1.0,0.514980,0.216208,1.0,0.507330,0.205717,1.0,0.507548,0.206494,1.0,0.512794,0.220483,1.0,0.505799,0.210769,1.0,0.507111,0.213100,1.0,0.509953,0.225146,1.0,0.505581,0.216208,1.0,0.506018,0.217374,1.0,0.443245,0.458263,1.0,0.443245,0.458263,1.0,0.461688,0.651812,1.0,0.470812,0.812589,1.0,0.470812,0.812589,1.0,0.483067,0.452883,1.0,0.483067,0.452883,1.0,0.496943,0.638110,1.0,0.452467,0.708960,1.0,0.452467,0.708960,1.0
0.463156,0.455573,1.0,0.460899,0.318704,1.0,0.461651,0.364327,1.0,0.460147,0.273081,1.0,0.464737,0.209038,1.0,0.470883,0.223964,1.0,0.470883,0.223964,1.0,0.458532,0.226512,1.0,0.458532,0.226512,1.0,0.444827,0.274384,1.0,0.429508,0.275688,1.0,0.411074,0.354697,1.0,0.398822,0.403934,1.0,0.395839,0.411710,1.0,0.399898,0.422066,1.0,0.397957,0.423948,1.0,0.394603,0.418928,1.0,0.394250,0.419869,1.0,0.393015,0.418928,1.0,0.394603,0.418928,1.0,0.394427,0.422380,1.0,0.394250,0.416418,1.0,0.398310,0.424576,1.0,0.399192,0.427400,1.0,0.397251,0.426144,1.0,0.398310,0.425204,1.0,0.397074,0.426458,1.0,0.397074,0.426772,1.0,0.475470,0.273022,1.0,0.490794,0.272963,1.0,0.506078,0.335747,1.0,0.518359,0.242946,1.0,0.516947,0.233306,1.0,0.517821,0.216985,1.0,0.519133,0.206105,1.0,0.518259,0.210769,1.0,0.510171,0.200665,1.0,0.507111,0.195225,1.0,0.514980,0.216208,1.0,0.507330,0.205717,1.0,0.507548,0.206494,1.0,0.512794,0.220483,1.0,0.505799,0.210769,1.0,0.507111,0.213100,1.0,0.509953,0.225146,1.0,0.505581,0.216208,1.0,0.506018,0.217374,1.0,0.443245,0.458263,1.0,0.443245,0.458263,1.0,0.461688,0.651812,1.0,0.470812,0.812589,1.0,0.470812,0.812589,1.0,0.483067,0.452883,1.0,0.483067,0.452883,1.0,0.496943,0.638110,1.0,0.452467,0.708960,1.0,0.452467,0.708960,1.0
0.461673,0.466412,1.0,0.460553,0.327454,1.0,0.460927,0.373774,1.0,0.460180,0.281135,1.0,0.464729,0.222539,1.0,0.470859,0.229376,1.0,0.470859,0.229376,1.0,0.458532,0.229406,1.0,0.458532,0.229406,1.0,0.444844,0.285186,1.0,0.429508,0.289236,1.0,0.417226,0.357463,1.0,0.411040,0.425597,1.0,0.412005,0.435421,1.0,0.411530,0.427545,1.0,0.409789,0.431202,1.0,0.407890,0.431483,1.0,0.405517,0.448925,1.0,0.405200,0.451456,1.0,0.408523,0.440204,1.0,0.405833,0.449207,1.0,0.404726,0.451175,1.0,0.409315,0.448362,1.0,0.409315,0.447237,1.0,0.414694,0.448362,1.0,0.408840,0.453144,1.0,0.408048,0.453144,1.0,0.405358,0.453426,1.0,0.477003,0.278415,1.0,0.493826,0.275695,1.0,0.498500,0.319367,1.0,0.518338,0.232210,1.0,0.518848,0.226826,1.0,0.521005,0.212263,1.0,0.513674,0.187736,1.0,0.520573,0.210347,1.0,0.520573,0.201532,1.0,0.513243,0.186203,1.0,0.517123,0.211496,1.0,0.515183,0.201916,1.0,0.510872,0.192718,1.0,0.513243,0.216862,1.0,0.510656,0.207664,1.0,0.509363,0.204215,1.0,0.509579,0.221844,1.0,0.507207,0.214180,1.0,0.505698,0.210731,1.0,0.441721,0.466447,1.0,0.441721,0.466447,1.0,0.460153,0.662633,1.0,0.472430,0.818135,1.0,0.472430,0.818135,1.0,0.481625,0.466377,1.0,0.481625,0.466377,1.0,0.484686,0.643535,1.0,0.447907,0.733537,1.0,0.447907,0.733537,1.0
0.460154,0.477365,1.0,0.461317,0.340420,1.0,0.460929,0.386068,1.0,0.461705,0.294771,1.0,0.464745,0.234859,1.0,0.470895,0.242960,1.0,0.470895,0.242960,1.0,0.458535,0.242969,1.0,0.458535,0.242969,1.0,0.447865,0.296181,1.0,0.434025,0.297592,1.0,0.423295,0.379139,1.0,0.421871,0.441890,1.0,0.423647,0.464748,1.0,0.418809,0.447236,1.0,0.423302,0.454609,1.0,0.423820,0.470893,1.0,0.423302,0.472121,1.0,0.423129,0.472736,1.0,0.421055,0.470585,1.0,0.422265,0.471200,1.0,0.421228,0.465977,1.0,0.420709,0.470585,1.0,0.420709,0.470893,1.0,0.420018,0.470279,1.0,0.422092,0.471200,1.0,0.416735,0.470893,1.0,0.413624,0.473351,1.0,0.477796,0.292050,1.0,0.493886,0.289328,1.0,0.506121,0.308353,1.0,0.512249,0.248356,1.0,0.512733,0.239741,1.0,0.513852,0.200967,1.0,0.509238,0.201464,1.0,0.514970,0.203701,1.0,0.509098,0.207181,1.0,0.508259,0.201464,1.0,0.516368,0.215631,1.0,0.511474,0.212152,1.0,0.508539,0.207181,1.0,0.517906,0.217123,1.0,0.510496,0.216874,1.0,0.510496,0.217371,1.0,0.519304,0.219359,1.0,0.510216,0.215631,1.0,0.506302,0.223088,1.0,0.440216,0.477346,1.0,0.440216,0.477346,1.0,0.458621,0.662667,1.0,0.477015,0.834355,1.0,0.477015,0.834355,1.0,0.480091,0.477384,1.0,0.480091,0.477384,1.0,0.472380,0.659966,1.0,0.440235,0.766239,1.0,0.440235,0.766239,1.0
0.457103,0.499184,1.0,0.462830,0.362308,1.0,0.460921,0.407934,1.0,0.464739,0.316683,1.0,0.464734,0.252545,1.0,0.470896,0.248584,1.0,0.470896,0.248584,1.0,0.458529,0.251187,1.0,0.458529,0.251187,1.0,0.449430,0.319340,1.0,0.434121,0.321997,1.0,0.423434,0.401009,1.0,0.426423,0.469155,1.0,0.424056,0.496114,1.0,0.424056,0.492536,1.0,0.424895,0.477631,1.0,0.424392,0.473755,1.0,0.424224,0.492536,1.0,0.424056,0.488065,1.0,0.424727,0.490449,1.0,0.424559,0.488661,1.0,0.424895,0.489257,1.0,0.423218,0.492238,1.0,0.423721,0.492238,1.0,0.423553,0.491940,1.0,0.423889,0.494325,1.0,0.423889,0.492834,1.0,0.422547,0.492238,1.0,0.480065,0.315315,1.0,0.495392,0.313947,1.0,0.507685,0.313766,1.0,0.509274,0.275757,1.0,0.513381,0.254205,1.0,0.514081,0.249544,1.0,0.505954,0.237737,1.0,0.505167,0.252806,1.0,0.503682,0.244262,1.0,0.507177,0.243485,1.0,0.504468,0.253428,1.0,0.504206,0.245039,1.0,0.505429,0.244572,1.0,0.502021,0.254049,1.0,0.503856,0.245194,1.0,0.505429,0.246903,1.0,0.501934,0.253893,1.0,0.505255,0.238669,1.0,0.504992,0.253893,1.0,0.438716,0.499195,1.0,0.438716,0.499195,1.0,0.458608,0.673629,1.0,0.472465,0.839910,1.0,0.472465,0.839910,1.0,0.475491,0.499172,1.0,0.475491,0.499172,1.0,0.463210,0.665491,1.0,0.435701,0.771753,1.0,0.435701,0.771753,1.0
0.454796,0.511457,1.0,0.461130,0.367405,1.0,0.459018,0.415422,1.0,0.463241,0.319387,1.0,0.463931,0.255201,1.0,0.470800,0.248391,1.0,0.470800,0.248391,1.0,0.455545,0.251084,1.0,0.455545,0.251084,1.0,0.448660,0.327496,1.0,0.434079,0.335606,1.0,0.427955,0.436518,1.0,0.463211,0.469307,1.0,0.471495,0.489809,1.0,0.486993,0.461883,1.0,0.487203,0.461511,1.0,0.484270,0.461883,1.0,0.488669,0.460766,1.0,0.485946,0.498745,1.0,0.481129,0.472309,1.0,0.485318,0.500234,1.0,0.486575,0.495394,1.0,0.480501,0.493905,1.0,0.484690,0.499490,1.0,0.485527,0.497628,1.0,0.477149,0.493532,1.0,0.486575,0.458532,1.0,0.486575,0.501724,1.0,0.479322,0.316567,1.0,0.495403,0.313746,1.0,0.509214,0.319334,1.0,0.519884,0.294897,1.0,0.522979,0.285068,1.0,0.514327,0.279897,1.0,0.519789,0.277249,1.0,0.517873,0.287968,1.0,0.517731,0.287589,1.0,0.520427,0.287337,1.0,0.517873,0.287842,1.0,0.519789,0.285194,1.0,0.520072,0.286076,1.0,0.517660,0.287716,1.0,0.519789,0.285194,1.0,0.520781,0.292381,1.0,0.528156,0.296164,1.0,0.517448,0.287337,1.0,0.520854,0.293894,1.0,0.435647,0.510137,1.0,0.435647,0.510137,1.0,0.458639,0.668204,1.0,0.470864,0.828931,1.0,0.470864,0.828931,1.0,0.473944,0.512778,1.0,0.473944,0.512778,1.0,0.458562,0.665471,1.0,0.435680,0.771750,1.0,0.435680,0.771750,1.0
0.455574,0.497824,1.0,0.461302,0.361805,1.0,0.459392,0.407145,1.0,0.463211,0.316466,1.0,0.455589,0.238911,1.0,0.461668,0.226765,1.0,0.461668,0.226765,1.0,0.447821,0.229518,1.0,0.447821,0.229518,1.0,0.447868,0.321973,1.0,0.432526,0.327480,1.0,0.424927,0.417469,1.0,0.424928,0.469267,1.0,0.428683,0.465330,1.0,0.421923,0.479350,1.0,0.422862,0.479350,1.0,0.425115,0.486694,1.0,0.424364,0.491033,1.0,0.422674,0.493704,1.0,0.424364,0.488696,1.0,0.422111,0.497042,1.0,0.423613,0.484357,1.0,0.425491,0.489364,1.0,0.422299,0.498044,1.0,0.423050,0.483689,1.0,0.419294,0.495373,1.0,0.424552,0.499379,1.0,0.417792,0.504053,1.0,0.480083,0.308357,1.0,0.496956,0.300249,1.0,0.519978,0.384794,1.0,0.519980,0.357425,1.0,0.513003,0.317381,1.0,0.522693,0.313590,1.0,0.528510,0.309110,1.0,0.516297,0.352183,1.0,0.524828,0.311868,1.0,0.529865,0.308077,1.0,0.518817,0.331164,1.0,0.519205,0.383541,1.0,0.525214,0.317036,1.0,0.516104,0.343914,1.0,0.518623,0.384230,1.0,0.526573,0.316347,1.0,0.522693,0.389054,1.0,0.513778,0.388020,1.0,0.530057,0.307388,1.0,0.437157,0.496434,1.0,0.437157,0.496434,1.0,0.458515,0.662565,1.0,0.469291,0.831652,1.0,0.469291,0.831652,1.0,0.473990,0.499213,1.0,0.473990,0.499213,1.0,0.458623,0.662621,1.0,0.435649,0.766231,1.0,0.435649,0.766231,1.0
0.455574,0.497824,1.0,0.461302,0.361805,1.0,0.459392,0.407145,1.0,0.463211,0.316466,1.0,0.455589,0.238911,1.0,0.461668,0.226765,1.0,0.461668,0.226765,1.0,0.447821,0.229518,1.0,0.447821,0.229518,1.0,0.447868,0.321973,1.0,0.432526,0.327480,1.0,0.424927,0.417469,1.0,0.424928,0.469267,1.0,0.428683,0.465330,1.0,0.421923,0.479350,1.0,0.422862,0.479350,1.0,0.425115,0.486694,1.0,0.424364,0.491033,1.0,0.422674,0.493704,1.0,0.424364,0.488696,1.0,0.422111,0.497042,1.0,0.423613,0.484357,1.0,0.425491,0.489364,1.0,0.422299,0.498044,1.0,0.423050,0.483689,1.0,0.419294,0.495373,1.0,0.424552,0.499379,1.0,0.417792,0.504053,1.0,0.480083,0.308357,1.0,0.496956,0.300249,1.0,0.519978,0.384794,1.0,0.519980,0.357425,1.0,0.513003,0.317381,1.0,0.522693,0.313590,1.0,0.528510,0.309110,1.0,0.516297,0.352183,1.0,0.524828,0.311868,1.0,0.529865,0.308077,1.0,0.518817,0.331164,1.0,0.519205,0.383541,1.0,0.525214,0.317036,1.0,0.516104,0.343914,1.0,0.518623,0.384230,1.0,0.526573,0.316347,1.0,0.522693,0.389054,1.0,0.513778,0.388020,1.0,0.530057,0.307388,1.0,0.437157,0.496434,1.0,0.437157,0.496434,1.0,0.458515,0.662565,1.0,0.469291,0.831652,1.0,0.469291,0.831652,1.0,0.473990,0.499213,1.0,0.473990,0.499213,1.0,0.458623,0.662621,1.0,0.435649,0.766231,1.0,0.435649,0.766231,1.0
0.458629,0.486891,1.0,0.458657,0.350984,1.0,0.458648,0.396287,1.0,0.458666,0.305682,1.0,0.451697,0.227982,1.0,0.457099,0.207561,1.0,0.457099,0.207561,1.0,0.438678,0.210268,1.0,0.438678,0.210268,1.0,0.441011,0.309801,1.0,0.423356,0.313919,1.0,0.421820,0.398386,1.0,0.423390,0.466365,1.0,0.417106,0.487558,1.0,0.427221,0.468337,1.0,0.423908,0.470506,1.0,0.422861,0.499649,1.0,0.424780,0.489419,1.0,0.421466,0.472987,1.0,0.422164,0.501509,1.0,0.422513,0.477637,1.0,0.423384,0.477018,1.0,0.423210,0.498409,1.0,0.420071,0.508950,1.0,0.423384,0.479497,1.0,0.424431,0.498099,1.0,0.426872,0.487558,1.0,0.417978,0.518251,1.0,0.476280,0.300243,1.0,0.493893,0.294804,1.0,0.523005,0.398285,1.0,0.506104,0.406563,1.0,0.514614,0.388920,1.0,0.511032,0.390619,1.0,0.510794,0.400381,1.0,0.513420,0.392741,1.0,0.511510,0.423301,1.0,0.511271,0.410143,1.0,0.522255,0.409294,1.0,0.513181,0.420754,1.0,0.514375,0.410568,1.0,0.524641,0.417783,1.0,0.515091,0.424574,1.0,0.516285,0.414812,1.0,0.524401,0.421603,1.0,0.514853,0.424574,1.0,0.516524,0.419906,1.0,0.437188,0.485600,1.0,0.437188,0.485600,1.0,0.452466,0.659914,1.0,0.460236,0.815278,1.0,0.460236,0.815278,1.0,0.480071,0.488182,1.0,0.480071,0.488182,1.0,0.472394,0.643557,1.0,0.446398,0.733637,1.0,0.446398,0.733637,1.0
0.458653,0.484184,1.0,0.456334,0.342248,1.0,0.457107,0.389560,1.0,0.455560,0.294936,1.0,0.444815,0.217117,1.0,0.450955,0.196711,1.0,0.450955,0.196711,1.0,0.435564,0.202054,1.0,0.435564,0.202054,1.0,0.437925,0.303019,1.0,0.420290,0.311103,1.0,0.418767,0.395637,1.0,0.423299,0.447506,1.0,0.422526,0.460899,1.0,0.416592,0.447868,1.0,0.420955,0.443524,1.0,0.423747,0.487893,1.0,0.422526,0.486031,1.0,0.424445,0.460279,1.0,0.427761,0.475792,1.0,0.422526,0.486031,1.0,0.425318,0.459657,1.0,0.426714,0.477964,1.0,0.422351,0.485720,1.0,0.423573,0.484480,1.0,0.424271,0.486962,1.0,0.419908,0.487272,1.0,0.423922,0.484169,1.0,0.472412,0.293449,1.0,0.489265,0.291961,1.0,0.519905,0.379206,1.0,0.518374,0.463733,1.0,0.511501,0.470875,1.0,0.504922,0.482194,1.0,0.503436,0.495401,1.0,0.515534,0.498419,1.0,0.512350,0.514267,1.0,0.513199,0.515021,1.0,0.519142,0.501816,1.0,0.520628,0.508230,1.0,0.518081,0.514644,1.0,0.524448,0.499552,1.0,0.523177,0.507098,1.0,0.522115,0.510871,1.0,0.525297,0.493892,1.0,0.524448,0.505589,1.0,0.522328,0.510871,1.0,0.435690,0.485534,1.0,0.435690,0.485534,1.0,0.449416,0.665406,1.0,0.460196,0.834306,1.0,0.460196,0.834306,1.0,0.481617,0.482833,1.0,0.481617,0.482833,1.0,0.490802,0.630045,1.0,0.446337,0.703585,1.0,0.446337,0.703585,1.0
0.459373,0.484141,1.0,0.451912,0.344156,1.0,0.454399,0.390818,1.0,0.449426,0.297494,1.0,0.443260,0.211678,1.0,0.449460,0.191292,1.0,0.449460,0.191292,1.0,0.434115,0.191304,1.0,0.434115,0.191304,1.0,0.431798,0.304275,1.0,0.414171,0.311055,1.0,0.411109,0.387453,1.0,0.420284,0.441894,1.0,0.429476,0.456488,1.0,0.429634,0.463232,1.0,0.427579,0.464356,1.0,0.427579,0.462950,1.0,0.422838,0.469131,1.0,0.424418,0.469413,1.0,0.426473,0.464918,1.0,0.424102,0.469975,1.0,0.424260,0.469694,1.0,0.426473,0.476157,1.0,0.426315,0.475594,1.0,0.425050,0.476719,1.0,0.426789,0.477281,1.0,0.427737,0.463794,1.0,0.422838,0.476999,1.0,0.467065,0.294750,1.0,0.484704,0.292005,1.0,0.510727,0.373809,1.0,0.518366,0.469319,1.0,0.511155,0.483534,1.0,0.509385,0.500443,1.0,0.510934,0.514206,1.0,0.519339,0.505948,1.0,0.520885,0.520497,1.0,0.521552,0.528361,1.0,0.523760,0.504375,1.0,0.525312,0.517351,1.0,0.525531,0.525609,1.0,0.526859,0.499263,1.0,0.527302,0.509881,1.0,0.526417,0.517351,1.0,0.527521,0.493758,1.0,0.528849,0.503981,1.0,0.527302,0.507914,1.0,0.437126,0.488224,1.0,0.437126,0.488224,1.0,0.454030,0.670915,1.0,0.464729,0.837175,1.0,0.464729,0.837175,1.0,0.481620,0.480058,1.0,0.481620,0.480058,1.0,0.498466,0.632698,1.0,0.446290,0.638135,1.0,0.446290,0.638135,1.0
0.458617,0.484215,1.0,0.450572,0.346217,1.0,0.453254,0.392216,1.0,0.447891,0.300218,1.0,0.441805,0.215742,1.0,0.450931,0.196643,1.0,0.450931,0.196643,1.0,0.434118,0.193919,1.0,0.434118,0.193919,1.0,0.429530,0.305656,1.0,0.411169,0.311094,1.0,0.411131,0.414710,1.0,0.427947,0.422920,1.0,0.451029,0.429810,1.0,0.418743,0.413466,1.0,0.418529,0.416506,1.0,0.420453,0.411945,1.0,0.418957,0.416887,1.0,0.418743,0.416887,1.0,0.418957,0.416506,1.0,0.418957,0.417267,1.0,0.418957,0.417267,1.0,0.419170,0.416127,1.0,0.419170,0.416887,1.0,0.448463,0.421448,1.0,0.419812,0.412325,1.0,0.419384,0.415367,1.0,0.418957,0.416887,1.0,0.465524,0.297487,1.0,0.483158,0.294756,1.0,0.503056,0.368345,1.0,0.513775,0.425682,1.0,0.509898,0.440410,1.0,0.508551,0.449995,1.0,0.508551,0.457782,1.0,0.515121,0.449995,1.0,0.517649,0.457782,1.0,0.518323,0.463474,1.0,0.518660,0.445802,1.0,0.520682,0.454188,1.0,0.520682,0.460179,1.0,0.522031,0.443406,1.0,0.523375,0.449695,1.0,0.523547,0.456884,1.0,0.523375,0.440709,1.0,0.524724,0.445502,1.0,0.524557,0.449396,1.0,0.435680,0.491030,1.0,0.435680,0.491030,1.0,0.457094,0.676305,1.0,0.463242,0.839814,1.0,0.463242,0.839814,1.0,0.481555,0.477401,1.0,0.481555,0.477401,1.0,0.506139,0.638119,1.0,0.457060,0.594480,1.0,0.457060,0.594480,1.0
0.458575,0.493766,1.0,0.450577,0.348663,1.0,0.453243,0.397031,1.0,0.447911,0.300295,1.0,0.443312,0.211672,1.0,0.454000,0.193927,1.0,0.454000,0.193927,1.0,0.435602,0.188584,1.0,0.435602,0.188584,1.0,0.430259,0.303002,1.0,0.412608,0.305708,1.0,0.409562,0.409290,1.0,0.409603,0.403859,1.0,0.411328,0.407775,1.0,0.414753,0.411580,1.0,0.412826,0.415385,1.0,0.416893,0.429464,1.0,0.408118,0.424517,1.0,0.410044,0.424517,1.0,0.407690,0.421093,1.0,0.407476,0.424517,1.0,0.416893,0.440879,1.0,0.405763,0.430606,1.0,0.404051,0.432888,1.0,0.416893,0.442020,1.0,0.407047,0.424897,1.0,0.407261,0.426039,1.0,0.408118,0.425658,1.0,0.465548,0.298941,1.0,0.483185,0.297586,1.0,0.509266,0.379346,1.0,0.498456,0.349309,1.0,0.486743,0.340086,1.0,0.483252,0.343190,1.0,0.477821,0.349051,1.0,0.486355,0.356981,1.0,0.487519,0.358706,1.0,0.486937,0.367326,1.0,0.491204,0.360430,1.0,0.491204,0.368705,1.0,0.501678,0.371464,1.0,0.497023,0.367670,1.0,0.511375,0.382497,1.0,0.511375,0.382153,1.0,0.511957,0.382153,1.0,0.512151,0.385601,1.0,0.513896,0.384566,1.0,0.435576,0.499214,1.0,0.435576,0.499214,1.0,0.458547,0.681766,1.0,0.460196,0.837040,1.0,0.460196,0.837040,1.0,0.481574,0.488318,1.0,0.481574,0.488318,1.0,0.507590,0.643602,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0
0.458575,0.493766,1.0,0.450577,0.348663,1.0,0.453243,0.397031,1.0,0.447911,0.300295,1.0,0.443312,0.211672,1.0,0.454000,0.193927,1.0,0.454000,0.193927,1.0,0.435602,0.188584,1.0,0.435602,0.188584,1.0,0.430259,0.303002,1.0,0.412608,0.305708,1.0,0.409562,0.409290,1.0,0.409603,0.403859,1.0,0.411328,0.407775,1.0,0.414753,0.411580,1.0,0.412826,0.415385,1.0,0.416893,0.429464,1.0,0.408118,0.424517,1.0,0.410044,0.424517,1.0,0.407690,0.421093,1.0,0.407476,0.424517,1.0,0.416893,0.440879,1.0,0.405763,0.430606,1.0,0.404051,0.432888,1.0,0.416893,0.442020,1.0,0.407047,0.424897,1.0,0.407261,0.426039,1.0,0.408118,0.425658,1.0,0.465548,0.298941,1.0,0.483185,0.297586,1.0,0.509266,0.379346,1.0,0.498456,0.349309,1.0,0.486743,0.340086,1.0,0.483252,0.343190,1.0,0.477821,0.349051,1.0,0.486355,0.356981,1.0,0.487519,0.358706,1.0,0.486937,0.367326,1.0,0.491204,0.360430,1.0,0.491204,0.368705,1.0,0.501678,0.371464,1.0,0.497023,0.367670,1.0,0.511375,0.382497,1.0,0.511375,0.382153,1.0,0.511957,0.382153,1.0,0.512151,0.385601,1.0,0.513896,0.384566,1.0,0.435576,0.499214,1.0,0.435576,0.499214,1.0,0.458547,0.681766,1.0,0.460196,0.837040,1.0,0.460196,0.837040,1.0,0.481574,0.488318,1.0,0.481574,0.488318,1.0,0.507590,0.643602,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0
0.457069,0.493717,1.0,0.450229,0.346594,1.0,0.452509,0.395635,1.0,0.447949,0.297554,1.0,0.445568,0.214437,1.0,0.455555,0.193953,1.0,0.455555,0.193953,1.0,0.435674,0.188617,1.0,0.435674,0.188617,1.0,0.431049,0.298914,1.0,0.414149,0.300274,1.0,0.407997,0.365622,1.0,0.406499,0.422742,1.0,0.405732,0.438675,1.0,0.414619,0.454717,1.0,0.406142,0.421418,1.0,0.413388,0.428952,1.0,0.412978,0.429681,1.0,0.406279,0.420931,1.0,0.409833,0.431140,1.0,0.410380,0.436001,1.0,0.415302,0.459092,1.0,0.406689,0.430897,1.0,0.407099,0.459092,1.0,0.415576,0.458363,1.0,0.405595,0.459821,1.0,0.411474,0.464682,1.0,0.412978,0.466384,1.0,0.465566,0.296179,1.0,0.483183,0.294804,1.0,0.515326,0.354794,1.0,0.532193,0.343877,1.0,0.529208,0.324773,1.0,0.523396,0.332068,1.0,0.523396,0.331459,1.0,0.528010,0.331764,1.0,0.528693,0.331459,1.0,0.528693,0.333587,1.0,0.529891,0.336322,1.0,0.529036,0.331156,1.0,0.528693,0.335715,1.0,0.530234,0.336019,1.0,0.529891,0.333587,1.0,0.528010,0.333283,1.0,0.534505,0.335106,1.0,0.530406,0.336019,1.0,0.525276,0.331156,1.0,0.434093,0.496479,1.0,0.434093,0.496479,1.0,0.458556,0.681780,1.0,0.460223,0.836990,1.0,0.460223,0.836990,1.0,0.480045,0.490955,1.0,0.480045,0.490955,1.0,0.507654,0.651794,1.0,0.506082,0.597336,1.0,0.506082,0.597336,1.0
0.450960,0.485602,1.0,0.448671,0.342443,1.0,0.449434,0.390163,1.0,0.447907,0.294723,1.0,0.445606,0.210336,1.0,0.455572,0.188558,1.0,0.455572,0.188558,1.0,0.435703,0.185884,1.0,0.435703,0.185884,1.0,0.431795,0.294830,1.0,0.415683,0.294936,1.0,0.401902,0.368414,1.0,0.397302,0.425598,1.0,0.409050,0.446174,1.0,0.402018,0.432251,1.0,0.398661,0.441059,1.0,0.395145,0.445037,1.0,0.395145,0.452141,1.0,0.392588,0.452141,1.0,0.396104,0.454698,1.0,0.392747,0.455835,1.0,0.397063,0.455267,1.0,0.398502,0.457256,1.0,0.395944,0.458676,1.0,0.397383,0.457540,1.0,0.396743,0.459244,1.0,0.396903,0.460949,1.0,0.397383,0.464644,1.0,0.465502,0.293345,1.0,0.483096,0.291968,1.0,0.516877,0.341076,1.0,0.544495,0.365659,1.0,0.540000,0.361534,1.0,0.540479,0.360681,1.0,0.540797,0.360396,1.0,0.538880,0.361819,1.0,0.542078,0.359257,1.0,0.542719,0.358973,1.0,0.541760,0.357834,1.0,0.542240,0.359543,1.0,0.542562,0.359257,1.0,0.541922,0.357550,1.0,0.542401,0.359257,1.0,0.541922,0.361250,1.0,0.542240,0.356981,1.0,0.542562,0.360965,1.0,0.542562,0.366942,1.0,0.429499,0.491061,1.0,0.429499,0.491061,1.0,0.457017,0.684511,1.0,0.460201,0.837017,1.0,0.460201,0.837017,1.0,0.472421,0.480144,1.0,0.472421,0.480144,1.0,0.507707,0.662644,1.0,0.521432,0.572735,1.0,0.521432,0.572735,1.0
0.450178,0.490949,1.0,0.448461,0.343739,1.0,0.449033,0.392809,1.0,0.447889,0.294669,1.0,0.446340,0.206176,1.0,0.457086,0.185781,1.0,0.457086,0.185781,1.0,0.437195,0.183130,1.0,0.437195,0.183130,1.0,0.430257,0.294771,1.0,0.412624,0.294872,1.0,0.395746,0.381918,1.0,0.381991,0.444760,1.0,0.380111,0.459756,1.0,0.386192,0.463810,1.0,0.386952,0.459756,1.0,0.387141,0.459756,1.0,0.385431,0.459756,1.0,0.382582,0.464147,1.0,0.385621,0.463134,1.0,0.384102,0.460769,1.0,0.381252,0.466512,1.0,0.383721,0.465161,1.0,0.381252,0.464147,1.0,0.381442,0.467863,1.0,0.378212,0.470903,1.0,0.376502,0.472254,1.0,0.378022,0.477996,1.0,0.465511,0.293331,1.0,0.483133,0.291992,1.0,0.521422,0.343858,1.0,0.549052,0.381954,1.0,0.566115,0.392327,1.0,0.568588,0.386048,1.0,0.559229,0.392013,1.0,0.557641,0.401431,1.0,0.557464,0.401431,1.0,0.558344,0.397979,1.0,0.561349,0.405199,1.0,0.560109,0.406141,1.0,0.557286,0.408025,1.0,0.562406,0.405199,1.0,0.561698,0.412734,1.0,0.562229,0.412734,1.0,0.567000,0.415559,1.0,0.567000,0.411792,1.0,0.553578,0.415873,1.0,0.427935,0.493698,1.0,0.427935,0.493698,1.0,0.452491,0.684424,1.0,0.460150,0.834302,1.0,0.460150,0.834302,1.0,0.472421,0.488199,1.0,0.472421,0.488199,1.0,0.507649,0.662762,1.0,0.535255,0.640972,1.0,0.535255,0.640972,1.0
0.447912,0.488259,1.0,0.447849,0.343156,1.0,0.447870,0.391524,1.0,0.447828,0.294789,1.0,0.446335,0.204790,1.0,0.457095,0.185668,1.0,0.457095,0.185668,1.0,0.437210,0.183028,1.0,0.437210,0.183028,1.0,0.429449,0.296134,1.0,0.411069,0.297480,1.0,0.383506,0.395667,1.0,0.361987,0.469158,1.0,0.356470,0.500656,1.0,0.359641,0.483346,1.0,0.353527,0.504682,1.0,0.355791,0.503877,1.0,0.353527,0.507500,1.0,0.352847,0.505487,1.0,0.355112,0.504280,1.0,0.352168,0.505085,1.0,0.352395,0.507097,1.0,0.350583,0.505085,1.0,0.357377,0.526018,1.0,0.358056,0.526420,1.0,0.350583,0.506293,1.0,0.351715,0.507097,1.0,0.364396,0.511526,1.0,0.465481,0.293447,1.0,0.483134,0.292106,1.0,0.532234,0.373769,1.0,0.578172,0.439158,1.0,0.580500,0.444511,1.0,0.576802,0.437933,1.0,0.587161,0.442757,1.0,0.597276,0.438372,1.0,0.596781,0.444511,1.0,0.599990,0.444950,1.0,0.600479,0.448896,1.0,0.599250,0.449335,1.0,0.583708,0.463806,1.0,0.600729,0.459859,1.0,0.593573,0.472138,1.0,0.586422,0.473454,1.0,0.600479,0.469945,1.0,0.596286,0.474331,1.0,0.588891,0.477839,1.0,0.424895,0.490946,1.0,0.424895,0.490946,1.0,0.450923,0.684525,1.0,0.460094,0.837000,1.0,0.460094,0.837000,1.0,0.470929,0.485572,1.0,0.470929,0.485572,1.0,0.507733,0.665392,1.0,0.549042,0.749908,1.0,0.549042,0.749908,1.0
0.447150,0.490979,1.0,0.447662,0.347898,1.0,0.447492,0.395592,1.0,0.447833,0.300205,1.0,0.446346,0.207569,1.0,0.457063,0.185883,1.0,0.457063,0.185883,1.0,0.437158,0.185764,1.0,0.437158,0.185764,1.0,0.428715,0.302954,1.0,0.409598,0.305704,1.0,0.371261,0.401150,1.0,0.334393,0.488152,1.0,0.313484,0.518194,1.0,0.313235,0.515086,1.0,0.334464,0.500434,1.0,0.314983,0.513310,1.0,0.320478,0.511534,1.0,0.325223,0.503986,1.0,0.315483,0.512422,1.0,0.318979,0.515086,1.0,0.324224,0.507094,1.0,0.311486,0.524410,1.0,0.315233,0.521746,1.0,0.323225,0.509314,1.0,0.313984,0.525742,1.0,0.312236,0.523966,1.0,0.324723,0.505762,1.0,0.466229,0.297555,1.0,0.484625,0.294906,1.0,0.533734,0.382118,1.0,0.579734,0.469172,1.0,0.576292,0.487676,1.0,0.579578,0.502281,1.0,0.585052,0.512019,1.0,0.592172,0.499847,1.0,0.602307,0.503256,1.0,0.606964,0.507637,1.0,0.595187,0.495466,1.0,0.603125,0.499360,1.0,0.609151,0.502281,1.0,0.597104,0.489137,1.0,0.604771,0.492057,1.0,0.608880,0.494006,1.0,0.597922,0.484756,1.0,0.603677,0.484756,1.0,0.606687,0.484269,1.0,0.423404,0.493704,1.0,0.423404,0.493704,1.0,0.449463,0.684600,1.0,0.458646,0.837029,1.0,0.458646,0.837029,1.0,0.470897,0.488254,1.0,0.470897,0.488254,1.0,0.506122,0.670835,1.0,0.541401,0.837034,1.0,0.541401,0.837034,1.0
0.447150,0.490979,1.0,0.447662,0.347898,1.0,0.447492,0.395592,1.0,0.447833,0.300205,1.0,0.446346,0.207569,1.0,0.457063,0.185883,1.0,0.457063,0.185883,1.0,0.437158,0.185764,1.0,0.437158,0.185764,1.0,0.428715,0.302954,1.0,0.409598,0.305704,1.0,0.371261,0.401150,1.0,0.334393,0.488152,1.0,0.313484,0.518194,1.0,0.313235,0.515086,1.0,0.334464,0.500434,1.0,0.314983,0.513310,1.0,0.320478,0.511534,1.0,0.325223,0.503986,1.0,0.315483,0.512422,1.0,0.318979,0.515086,1.0,0.324224,0.507094,1.0,0.311486,0.524410,1.0,0.315233,0.521746,1.0,0.323225,0.509314,1.0,0.313984,0.525742,1.0,0.312236,0.523966,1.0,0.324723,0.505762,1.0,0.466229,0.297555,1.0,0.484625,0.294906,1.0,0.533734,0.382118,1.0,0.579734,0.469172,1.0,0.576292,0.487676,1.0,0.579578,0.502281,1.0,0.585052,0.512019,1.0,0.592172,0.499847,1.0,0.602307,0.503256,1.0,0.606964,0.507637,1.0,0.595187,0.495466,1.0,0.603125,0.499360,1.0,0.609151,0.502281,1.0,0.597104,0.489137,1.0,0.604771,0.492057,1.0,0.608880,0.494006,1.0,0.597922,0.484756,1.0,0.603677,0.484756,1.0,0.606687,0.484269,1.0,0.423404,0.493704,1.0,0.423404,0.493704,1.0,0.449463,0.684600,1.0,0.458646,0.837029,1.0,0.458646,0.837029,1.0,0.470897,0.488254,1.0,0.470897,0.488254,1.0,0.506122,0.670835,1.0,0.541401,0.837034,1.0,0.541401,0.837034,1.0
0.450970,0.495073,1.0,0.448705,0.357048,1.0,0.449460,0.403057,1.0,0.447949,0.311040,1.0,0.447133,0.221163,1.0,0.457056,0.199388,1.0,0.457056,0.199388,1.0,0.437126,0.199355,1.0,0.437126,0.199355,1.0,0.429519,0.312380,1.0,0.411088,0.313720,1.0,0.362097,0.387476,1.0,0.312985,0.455545,1.0,0.306678,0.470336,1.0,0.310740,0.458153,1.0,0.290941,0.479361,1.0,0.291448,0.479813,1.0,0.287387,0.478007,1.0,0.287387,0.485679,1.0,0.289671,0.486581,1.0,0.282310,0.496058,1.0,0.289418,0.501022,1.0,0.281041,0.501022,1.0,0.281295,0.501924,1.0,0.288910,0.501473,1.0,0.279518,0.500570,1.0,0.280787,0.501473,1.0,0.284341,0.501022,1.0,0.467065,0.308351,1.0,0.486181,0.305663,1.0,0.521437,0.379175,1.0,0.550563,0.444735,1.0,0.566750,0.481964,1.0,0.550203,0.451486,1.0,0.560172,0.464953,1.0,0.570141,0.475584,1.0,0.552198,0.482672,1.0,0.570734,0.484444,1.0,0.556984,0.483381,1.0,0.554391,0.488343,1.0,0.553594,0.488697,1.0,0.558974,0.483027,1.0,0.553594,0.492950,1.0,0.553594,0.492595,1.0,0.570937,0.477356,1.0,0.553594,0.494013,1.0,0.563359,0.485507,1.0,0.429498,0.499141,1.0,0.429498,0.499141,1.0,0.450977,0.687241,1.0,0.458651,0.837182,1.0,0.458651,0.837182,1.0,0.472443,0.491006,1.0,0.472443,0.491006,1.0,0.495316,0.684609,1.0,0.509233,0.848030,1.0,0.509233,0.848030,1.0
0.457857,0.503275,1.0,0.452702,0.359135,1.0,0.454421,0.407182,1.0,0.450984,0.311089,1.0,0.448647,0.225221,1.0,0.455543,0.204741,1.0,0.455543,0.204741,1.0,0.435705,0.204756,1.0,0.435705,0.204756,1.0,0.432586,0.312428,1.0,0.414188,0.313768,1.0,0.355896,0.362993,1.0,0.302236,0.379202,1.0,0.291394,0.363928,1.0,0.285712,0.382868,1.0,0.290210,0.389601,1.0,0.285239,0.386234,1.0,0.288079,0.394231,1.0,0.292814,0.390864,1.0,0.285712,0.386656,1.0,0.288553,0.400123,1.0,0.288790,0.397598,1.0,0.294708,0.395915,1.0,0.288553,0.401386,1.0,0.290447,0.399702,1.0,0.294708,0.395915,1.0,0.290447,0.399702,1.0,0.293287,0.402648,1.0,0.469370,0.309720,1.0,0.487756,0.308351,1.0,0.509226,0.387408,1.0,0.483155,0.357512,1.0,0.465494,0.342493,1.0,0.465132,0.341527,1.0,0.466037,0.357952,1.0,0.466581,0.344747,1.0,0.465856,0.343781,1.0,0.467668,0.348612,1.0,0.466581,0.344103,1.0,0.467124,0.345713,1.0,0.468393,0.349256,1.0,0.466762,0.343459,1.0,0.468030,0.344103,1.0,0.468030,0.347324,1.0,0.466581,0.341205,1.0,0.467668,0.343137,1.0,0.467849,0.344425,1.0,0.434124,0.504659,1.0,0.434124,0.504659,1.0,0.452473,0.684525,1.0,0.463233,0.839856,1.0,0.463233,0.839856,1.0,0.481589,0.501890,1.0,0.481589,0.501890,1.0,0.473915,0.673613,1.0,0.472362,0.845302,1.0,0.472362,0.845302,1.0
0.458617,0.491012,1.0,0.455159,0.343838,1.0,0.456312,0.392896,1.0,0.454007,0.294780,1.0,0.449388,0.219814,1.0,0.455565,0.202083,1.0,0.455565,0.202083,1.0,0.437128,0.202094,1.0,0.437128,0.202094,1.0,0.437895,0.298868,1.0,0.421783,0.302956,1.0,0.361982,0.322006,1.0,0.325281,0.286603,1.0,0.313615,0.247581,1.0,0.315621,0.247581,1.0,0.307375,0.255902,1.0,0.316067,0.249958,1.0,0.322976,0.271354,1.0,0.320524,0.274920,1.0,0.320747,0.271750,1.0,0.320970,0.270166,1.0,0.318741,0.276505,1.0,0.319410,0.279279,1.0,0.314061,0.264619,1.0,0.310718,0.280467,1.0,0.310272,0.278090,1.0,0.312278,0.280467,1.0,0.311386,0.280071,1.0,0.469326,0.292020,1.0,0.484644,0.289260,1.0,0.495475,0.311107,1.0,0.461683,0.272984,1.0,0.451673,0.245323,1.0,0.451673,0.245033,1.0,0.441559,0.226472,1.0,0.440906,0.226762,1.0,0.441722,0.228212,1.0,0.441069,0.228793,1.0,0.441722,0.227922,1.0,0.441885,0.241263,1.0,0.441069,0.244163,1.0,0.441722,0.227922,1.0,0.442048,0.241843,1.0,0.441559,0.245033,1.0,0.441885,0.227922,1.0,0.442701,0.227922,1.0,0.443190,0.226762,1.0,0.435611,0.491034,1.0,0.435611,0.491034,1.0,0.446357,0.657222,1.0,0.460083,0.834307,1.0,0.460083,0.834307,1.0,0.481624,0.490990,1.0,0.481624,0.490990,1.0,0.458621,0.640953,1.0,0.438676,0.828924,1.0,0.438676,0.828924,1.0
0.460142,0.474671,1.0,0.456701,0.323497,1.0,0.457848,0.373888,1.0,0.455554,0.273106,1.0,0.449398,0.206227,1.0,0.457058,0.183086,1.0,0.457058,0.183086,1.0,0.437148,0.183104,1.0,0.437148,0.183104,1.0,0.438696,0.277138,1.0,0.421839,0.281170,1.0,0.360546,0.270362,1.0,0.348182,0.196622,1.0,0.344554,0.189561,1.0,0.338001,0.164254,1.0,0.339357,0.146981,1.0,0.356077,0.163852,1.0,0.338453,0.157827,1.0,0.340035,0.142562,1.0,0.355626,0.167468,1.0,0.342746,0.163852,1.0,0.342972,0.159433,1.0,0.355173,0.176305,1.0,0.345457,0.168271,1.0,0.345909,0.166664,1.0,0.350880,0.190364,1.0,0.339357,0.177510,1.0,0.339357,0.179920,1.0,0.471638,0.272995,1.0,0.487721,0.272885,1.0,0.495464,0.275731,1.0,0.458577,0.229280,1.0,0.460407,0.198229,1.0,0.461697,0.184144,1.0,0.454880,0.178247,1.0,0.449905,0.182833,1.0,0.447326,0.181195,1.0,0.451563,0.178575,1.0,0.449905,0.181851,1.0,0.451379,0.183161,1.0,0.447326,0.181195,1.0,0.450089,0.181851,1.0,0.449905,0.190694,1.0,0.449905,0.190694,1.0,0.450089,0.181523,1.0,0.444193,0.195281,1.0,0.455064,0.179885,1.0,0.437207,0.474693,1.0,0.437207,0.474693,1.0,0.447872,0.640903,1.0,0.460102,0.831663,1.0,0.460102,0.831663,1.0,0.483077,0.474649,1.0,0.483077,0.474649,1.0,0.437209,0.616371,1.0,0.412657,0.817955,1.0,0.412657,0.817955,1.0
0.465500,0.466488,1.0,0.460323,0.302934,1.0,0.462049,0.357452,1.0,0.458597,0.248416,1.0,0.441003,0.163931,1.0,0.446372,0.161156,1.0,0.446372,0.161156,1.0,0.435633,0.166706,1.0,0.435633,0.166706,1.0,0.441755,0.249788,1.0,0.424912,0.251161,1.0,0.368180,0.215785,1.0,0.362088,0.131245,1.0,0.377502,0.109229,1.0,0.368900,0.095506,1.0,0.368239,0.096290,1.0,0.350374,0.091585,1.0,0.364930,0.101387,1.0,0.376399,0.082959,1.0,0.349933,0.091977,1.0,0.359196,0.102956,1.0,0.358975,0.112366,1.0,0.349051,0.091585,1.0,0.358975,0.103740,1.0,0.359196,0.103740,1.0,0.348830,0.106092,1.0,0.350374,0.109229,1.0,0.350374,0.108444,1.0,0.473938,0.248375,1.0,0.489279,0.248334,1.0,0.458629,0.188560,1.0,0.397351,0.123147,1.0,0.390822,0.127976,1.0,0.382664,0.109330,1.0,0.371593,0.103115,1.0,0.367515,0.127457,1.0,0.360814,0.099489,1.0,0.377129,0.082915,1.0,0.368680,0.123832,1.0,0.376255,0.096381,1.0,0.381207,0.086540,1.0,0.384121,0.091720,1.0,0.381790,0.088612,1.0,0.384412,0.084986,1.0,0.387617,0.093273,1.0,0.387617,0.086540,1.0,0.387325,0.082915,1.0,0.447900,0.466522,1.0,0.447900,0.466522,1.0,0.449418,0.654484,1.0,0.460108,0.831624,1.0,0.460108,0.831624,1.0,0.483101,0.466453,1.0,0.483101,0.466453,1.0,0.421846,0.600057,1.0,0.403426,0.796332,1.0,0.403426,0.796332,1.0
0.465500,0.466488,1.0,0.460323,0.302934,1.0,0.462049,0.357452,1.0,0.458597,0.248416,1.0,0.441003,0.163931,1.0,0.446372,0.161156,1.0,0.446372,0.161156,1.0,0.435633,0.166706,1.0,0.435633,0.166706,1.0,0.441755,0.249788,1.0,0.424912,0.251161,1.0,0.368180,0.215785,1.0,0.362088,0.131245,1.0,0.377502,0.109229,1.0,0.368900,0.095506,1.0,0.368239,0.096290,1.0,0.350374,0.091585,1.0,0.364930,0.101387,1.0,0.376399,0.082959,1.0,0.349933,0.091977,1.0,0.359196,0.102956,1.0,0.358975,0.112366,1.0,0.349051,0.091585,1.0,0.358975,0.103740,1.0,0.359196,0.103740,1.0,0.348830,0.106092,1.0,0.350374,0.109229,1.0,0.350374,0.108444,1.0,0.473938,0.248375,1.0,0.489279,0.248334,1.0,0.458629,0.188560,1.0,0.397351,0.123147,1.0,0.390822,0.127976,1.0,0.382664,0.109330,1.0,0.371593,0.103115,1.0,0.367515,0.127457,1.0,0.360814,0.099489,1.0,0.377129,0.082915,1.0,0.368680,0.123832,1.0,0.376255,0.096381,1.0,0.381207,0.086540,1.0,0.384121,0.091720,1.0,0.381790,0.088612,1.0,0.384412,0.084986,1.0,0.387617,0.093273,1.0,0.387617,0.086540,1.0,0.387325,0.082915,1.0,0.447900,0.466522,1.0,0.447900,0.466522,1.0,0.449418,0.654484,1.0,0.460108,0.831624,1.0,0.460108,0.831624,1.0,0.483101,0.466453,1.0,0.483101,0.466453,1.0,0.421846,0.600057,1.0,0.403426,0.796332,1.0,0.403426,0.796332,1.0
0.470882,0.455592,1.0,0.462827,0.283905,1.0,0.465512,0.341134,1.0,0.460142,0.226676,1.0,0.440945,0.147675,1.0,0.446332,0.144948,1.0,0.446332,0.144948,1.0,0.435558,0.150403,1.0,0.435558,0.150403,1.0,0.447127,0.228021,1.0,0.434113,0.229366,1.0,0.388120,0.174882,1.0,0.385025,0.114940,1.0,0.384207,0.076055,1.0,0.372447,0.069567,1.0,0.366973,0.067765,1.0,0.366567,0.081101,1.0,0.364743,0.078578,1.0,0.360485,0.073171,1.0,0.373055,0.101286,1.0,0.372042,0.103809,1.0,0.357241,0.083985,1.0,0.373461,0.107414,1.0,0.371839,0.111379,1.0,0.370622,0.113181,1.0,0.372042,0.110297,1.0,0.409550,0.071369,1.0,0.371636,0.115704,1.0,0.472440,0.226603,1.0,0.484737,0.226530,1.0,0.447903,0.134024,1.0,0.400396,0.093056,1.0,0.385421,0.110719,1.0,0.399453,0.094088,1.0,0.398985,0.097830,1.0,0.399921,0.097830,1.0,0.400622,0.097830,1.0,0.405300,0.098661,1.0,0.374195,0.100324,1.0,0.368816,0.084525,1.0,0.355953,0.081615,1.0,0.373259,0.115708,1.0,0.367413,0.082862,1.0,0.356888,0.084109,1.0,0.373026,0.074546,1.0,0.370453,0.068310,1.0,0.364606,0.067062,1.0,0.460203,0.455598,1.0,0.460203,0.455598,1.0,0.450959,0.643601,1.0,0.463192,0.817994,1.0,0.463192,0.817994,1.0,0.481561,0.455586,1.0,0.481561,0.455586,1.0,0.411108,0.597252,1.0,0.400367,0.790724,1.0,0.400367,0.790724,1.0
0.477767,0.447435,1.0,0.464542,0.265523,1.0,0.468951,0.326161,1.0,0.460134,0.204886,1.0,0.441700,0.140791,1.0,0.447842,0.139394,1.0,0.447842,0.139394,1.0,0.435558,0.142187,1.0,0.435558,0.142187,1.0,0.450173,0.204862,1.0,0.440211,0.204838,1.0,0.420288,0.128536,1.0,0.397318,0.063122,1.0,0.395927,0.067938,1.0,0.397341,0.064795,1.0,0.393098,0.055994,1.0,0.381782,0.052536,1.0,0.379307,0.053479,1.0,0.375241,0.052851,1.0,0.377539,0.064166,1.0,0.372235,0.064481,1.0,0.369229,0.063538,1.0,0.377539,0.077682,1.0,0.369583,0.072339,1.0,0.365340,0.072967,1.0,0.380545,0.088055,1.0,0.374887,0.095598,1.0,0.374887,0.095598,1.0,0.470115,0.206213,1.0,0.480096,0.207539,1.0,0.469363,0.169421,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.483106,0.447484,1.0,0.483106,0.447484,1.0,0.447930,0.624587,1.0,0.469301,0.801697,1.0,0.469301,0.801697,1.0,0.472429,0.447386,1.0,0.472429,0.447386,1.0,0.411122,0.597248,1.0,0.408002,0.777236,1.0,0.408002,0.777236,1.0
0.474710,0.439204,1.0,0.463815,0.277690,1.0,0.467446,0.331528,1.0,0.460183,0.223852,1.0,0.436378,0.142094,1.0,0.440208,0.142122,1.0,0.440208,0.142122,1.0,0.432548,0.142065,1.0,0.432548,0.142065,1.0,0.454799,0.225285,1.0,0.449415,0.226718,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.465539,0.217103,1.0,0.470894,0.210354,1.0,0.458581,0.158516,1.0,0.434125,0.076872,1.0,0.418844,0.072175,1.0,0.410148,0.061995,1.0,0.437083,0.045783,1.0,0.433477,0.048045,1.0,0.430720,0.043898,1.0,0.435810,0.045029,1.0,0.430084,0.046914,1.0,0.430296,0.045029,1.0,0.433902,0.051061,1.0,0.422873,0.054078,1.0,0.427115,0.049553,1.0,0.433902,0.051061,1.0,0.422449,0.054455,1.0,0.436446,0.042013,1.0,0.437295,0.045406,1.0,0.489267,0.444628,1.0,0.489267,0.444628,1.0,0.450932,0.619139,1.0,0.460176,0.801743,1.0,0.460176,0.801743,1.0,0.460152,0.433781,1.0,0.460152,0.433781,1.0,0.421773,0.608241,1.0,0.411167,0.777183,1.0,0.411167,0.777183,1.0
0.465546,0.443300,1.0,0.468361,0.264435,1.0,0.467423,0.324057,1.0,0.469300,0.204814,1.0,0.450167,0.131229,1.0,0.453998,0.131239,1.0,0.453998,0.131239,1.0,0.446337,0.131219,1.0,0.446337,0.131219,1.0,0.460889,0.207555,1.0,0.452478,0.210296,1.0,0.443256,0.144955,1.0,0.421882,0.076703,1.0,0.413038,0.040488,1.0,0.416083,0.039214,1.0,0.402650,0.065642,1.0,0.413933,0.042717,1.0,0.408919,0.055135,1.0,0.410710,0.057682,1.0,0.415008,0.054816,1.0,0.415366,0.063413,1.0,0.415366,0.069145,1.0,0.418053,0.053224,1.0,0.416620,0.065005,1.0,0.415187,0.070100,1.0,0.416262,0.077742,1.0,0.416441,0.075513,1.0,0.435964,0.063413,1.0,0.476213,0.198033,1.0,0.483126,0.191252,1.0,0.480043,0.117627,1.0,0.457030,0.068597,1.0,0.453549,0.065688,1.0,0.451264,0.050521,1.0,0.445627,0.048896,1.0,0.451264,0.048896,1.0,0.444560,0.048896,1.0,0.441361,0.048896,1.0,0.451111,0.057834,1.0,0.443798,0.059730,1.0,0.436029,0.054313,1.0,0.444560,0.062980,1.0,0.437400,0.066230,1.0,0.433591,0.062167,1.0,0.439228,0.072189,1.0,0.432982,0.070563,1.0,0.433744,0.071376,1.0,0.484721,0.444683,1.0,0.484721,0.444683,1.0,0.460174,0.632678,1.0,0.457022,0.796191,1.0,0.457022,0.796191,1.0,0.446370,0.441916,1.0,0.446370,0.441916,1.0,0.432543,0.621803,1.0,0.423397,0.774508,1.0,0.423397,0.774508,1.0
0.459403,0.444707,1.0,0.467950,0.279089,1.0,0.465101,0.334295,1.0,0.470798,0.223883,1.0,0.438670,0.161115,1.0,0.437188,0.142224,1.0,0.437188,0.142224,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.483894,0.226604,1.0,0.496990,0.229325,1.0,0.509241,0.142203,1.0,0.472374,0.076705,1.0,0.479753,0.095881,1.0,0.472743,0.093993,1.0,0.463820,0.093237,1.0,0.467644,0.068688,1.0,0.454472,0.071331,1.0,0.448523,0.080773,1.0,0.467856,0.063400,1.0,0.452772,0.067554,1.0,0.442575,0.074353,1.0,0.466369,0.061512,1.0,0.453835,0.057357,1.0,0.444912,0.062267,1.0,0.465732,0.060379,1.0,0.455747,0.055091,1.0,0.449798,0.056224,1.0,0.454730,0.219821,1.0,0.438662,0.215758,1.0,0.411128,0.093144,1.0,0.427964,0.052291,1.0,0.411180,0.073197,1.0,0.420716,0.060120,1.0,0.432430,0.051886,1.0,0.439241,0.048012,1.0,0.452045,0.055761,1.0,0.451228,0.056245,1.0,0.438969,0.056730,1.0,0.449048,0.066416,1.0,0.439514,0.064479,1.0,0.437606,0.067385,1.0,0.446324,0.072712,1.0,0.440876,0.073681,1.0,0.437061,0.069322,1.0,0.444962,0.082399,1.0,0.441420,0.082399,1.0,0.483144,0.447465,1.0,0.483144,0.447465,1.0,0.466277,0.640795,1.0,0.447955,0.815299,1.0,0.447955,0.815299,1.0,0.435662,0.441950,1.0,0.435662,0.441950,1.0,0.444799,0.627313,1.0,0.438706,0.774338,1.0,0.438706,0.774338,1.0
0.459403,0.444707,1.0,0.467950,0.279089,1.0,0.465101,0.334295,1.0,0.470798,0.223883,1.0,0.438670,0.161115,1.0,0.437188,0.142224,1.0,0.437188,0.142224,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.483894,0.226604,1.0,0.496990,0.229325,1.0,0.509241,0.142203,1.0,0.472374,0.076705,1.0,0.479753,0.095881,1.0,0.472743,0.093993,1.0,0.463820,0.093237,1.0,0.467644,0.068688,1.0,0.454472,0.071331,1.0,0.448523,0.080773,1.0,0.467856,0.063400,1.0,0.452772,0.067554,1.0,0.442575,0.074353,1.0,0.466369,0.061512,1.0,0.453835,0.057357,1.0,0.444912,0.062267,1.0,0.465732,0.060379,1.0,0.455747,0.055091,1.0,0.449798,0.056224,1.0,0.454730,0.219821,1.0,0.438662,0.215758,1.0,0.411128,0.093144,1.0,0.427964,0.052291,1.0,0.411180,0.073197,1.0,0.420716,0.060120,1.0,0.432430,0.051886,1.0,0.439241,0.048012,1.0,0.452045,0.055761,1.0,0.451228,0.056245,1.0,0.438969,0.056730,1.0,0.449048,0.066416,1.0,0.439514,0.064479,1.0,0.437606,0.067385,1.0,0.446324,0.072712,1.0,0.440876,0.073681,1.0,0.437061,0.069322,1.0,0.444962,0.082399,1.0,0.441420,0.082399,1.0,0.483144,0.447465,1.0,0.483144,0.447465,1.0,0.466277,0.640795,1.0,0.447955,0.815299,1.0,0.447955,0.815299,1.0,0.435662,0.441950,1.0,0.435662,0.441950,1.0,0.444799,0.627313,1.0,0.438706,0.774338,1.0,0.438706,0.774338,1.0
0.453986,0.448756,1.0,0.458607,0.282199,1.0,0.457066,0.337718,1.0,0.460147,0.226680,1.0,0.467063,0.163962,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.477016,0.229447,1.0,0.493884,0.232214,1.0,0.529130,0.139499,1.0,0.486245,0.079450,1.0,0.497032,0.090422,1.0,0.487333,0.075644,1.0,0.482022,0.070307,1.0,0.482253,0.072360,1.0,0.469783,0.071539,1.0,0.467012,0.065791,1.0,0.478789,0.081391,1.0,0.472093,0.079749,1.0,0.468167,0.078517,1.0,0.477173,0.091654,1.0,0.472554,0.089601,1.0,0.467936,0.090422,1.0,0.474864,0.102328,1.0,0.472093,0.101506,1.0,0.470938,0.101917,1.0,0.444049,0.222580,1.0,0.427952,0.218480,1.0,0.404982,0.098588,1.0,0.444763,0.055096,1.0,0.478276,0.071409,1.0,0.450572,0.056541,1.0,0.448743,0.058399,1.0,0.450572,0.055611,1.0,0.458674,0.057470,1.0,0.454493,0.068621,1.0,0.451618,0.064904,1.0,0.456322,0.075126,1.0,0.450050,0.076055,1.0,0.449005,0.068621,1.0,0.454754,0.083025,1.0,0.448482,0.083025,1.0,0.448482,0.079772,1.0,0.453447,0.089065,1.0,0.450050,0.089994,1.0,0.473948,0.450148,1.0,0.473948,0.450148,1.0,0.472370,0.640850,1.0,0.446308,0.815350,1.0,0.446308,0.815350,1.0,0.434024,0.447365,1.0,0.434024,0.447365,1.0,0.455504,0.627330,1.0,0.446339,0.771766,1.0,0.446339,0.771766,1.0
0.449398,0.451504,1.0,0.456263,0.286922,1.0,0.453975,0.341783,1.0,0.458551,0.232062,1.0,0.473962,0.170697,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.471605,0.232112,1.0,0.484659,0.232163,1.0,0.533802,0.155784,1.0,0.506110,0.093025,1.0,0.469195,0.079551,1.0,0.514692,0.094025,1.0,0.500324,0.079977,1.0,0.496972,0.074017,1.0,0.497690,0.079551,1.0,0.495056,0.088065,1.0,0.497211,0.087639,1.0,0.492422,0.091470,1.0,0.496493,0.103816,1.0,0.490267,0.100836,1.0,0.490985,0.100410,1.0,0.494578,0.105093,1.0,0.484041,0.108072,1.0,0.484520,0.110201,1.0,0.492662,0.115735,1.0,0.441745,0.232069,1.0,0.424939,0.232077,1.0,0.412628,0.183073,1.0,0.409621,0.117752,1.0,0.422755,0.099402,1.0,0.421252,0.097264,1.0,0.411935,0.107950,1.0,0.402919,0.117834,1.0,0.410282,0.108218,1.0,0.409681,0.110621,1.0,0.404873,0.109820,1.0,0.405624,0.109286,1.0,0.406075,0.108484,1.0,0.404873,0.109553,1.0,0.405474,0.109019,1.0,0.418848,0.114094,1.0,0.404873,0.108752,1.0,0.405173,0.108218,1.0,0.405323,0.108218,1.0,0.469330,0.452881,1.0,0.469330,0.452881,1.0,0.483066,0.640901,1.0,0.446364,0.804444,1.0,0.446364,0.804444,1.0,0.429467,0.450126,1.0,0.429467,0.450126,1.0,0.463189,0.635391,1.0,0.449384,0.774442,1.0,0.449384,0.774442,1.0
0.449411,0.455571,1.0,0.452856,0.292062,1.0,0.451708,0.346565,1.0,0.454004,0.237559,1.0,0.465507,0.173477,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.463986,0.236208,1.0,0.473968,0.234856,1.0,0.507618,0.166755,1.0,0.512259,0.120365,1.0,0.521083,0.113369,1.0,0.514539,0.093085,1.0,0.504999,0.077456,1.0,0.514352,0.095745,1.0,0.502942,0.075129,1.0,0.509489,0.096744,1.0,0.514165,0.097076,1.0,0.504064,0.093750,1.0,0.503877,0.094083,1.0,0.513978,0.093750,1.0,0.497892,0.097076,1.0,0.496769,0.094083,1.0,0.513978,0.093750,1.0,0.506309,0.105056,1.0,0.506683,0.106719,1.0,0.442499,0.241644,1.0,0.430993,0.245729,1.0,0.424907,0.136724,1.0,0.464752,0.082260,1.0,0.471346,0.063884,1.0,0.479935,0.062277,1.0,0.488977,0.064688,1.0,0.488299,0.097640,1.0,0.491690,0.074734,1.0,0.492368,0.069510,1.0,0.488073,0.095631,1.0,0.491464,0.081968,1.0,0.491690,0.079155,1.0,0.477449,0.090808,1.0,0.481518,0.088397,1.0,0.485134,0.089603,1.0,0.474963,0.075940,1.0,0.478805,0.088397,1.0,0.479257,0.088397,1.0,0.460119,0.458263,1.0,0.460119,0.458263,1.0,0.486190,0.640885,1.0,0.447911,0.799039,1.0,0.447911,0.799039,1.0,0.438704,0.452880,1.0,0.438704,0.452880,1.0,0.475506,0.638177,1.0,0.453999,0.779851,1.0,0.453999,0.779851,1.0
0.452487,0.467816,1.0,0.450211,0.299178,1.0,0.450970,0.355391,1.0,0.449452,0.242966,1.0,0.498417,0.187070,1.0,0.501520,0.188449,1.0,0.501520,0.188449,1.0,0.495315,0.185692,1.0,0.495315,0.185692,1.0,0.448690,0.236211,1.0,0.447928,0.229456,1.0,0.477019,0.177552,1.0,0.495373,0.084930,1.0,0.489496,0.087588,1.0,0.499178,0.065573,1.0,0.479815,0.064372,1.0,0.496926,0.065573,1.0,0.489496,0.065573,1.0,0.486344,0.069175,1.0,0.491748,0.075980,1.0,0.493549,0.077581,1.0,0.491072,0.083185,1.0,0.488821,0.079583,1.0,0.493999,0.084386,1.0,0.493098,0.087988,1.0,0.503681,0.093993,1.0,0.473735,0.075180,1.0,0.476212,0.078782,1.0,0.445607,0.247044,1.0,0.441761,0.251121,1.0,0.467783,0.357522,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.450974,0.469233,1.0,0.450974,0.469233,1.0,0.484673,0.643609,1.0,0.447858,0.799027,1.0,0.447858,0.799027,1.0,0.453999,0.466398,1.0,0.453999,0.466398,1.0,0.484632,0.643615,1.0,0.450953,0.774436,1.0,0.450953,0.774436,1.0
0.459353,0.465063,1.0,0.463382,0.298539,1.0,0.462039,0.354047,1.0,0.464724,0.243031,1.0,0.499219,0.173512,1.0,0.503092,0.177560,1.0,0.503092,0.177560,1.0,0.495345,0.169464,1.0,0.495345,0.169464,1.0,0.456286,0.236243,1.0,0.447847,0.229455,1.0,0.452509,0.117580,1.0,0.472354,0.071245,1.0,0.473116,0.069535,1.0,0.483070,0.053485,1.0,0.490709,0.067889,1.0,0.483301,0.057600,1.0,0.492792,0.074062,1.0,0.495802,0.085585,1.0,0.481449,0.067477,1.0,0.493024,0.085996,1.0,0.492561,0.085585,1.0,0.480523,0.080235,1.0,0.493024,0.089289,1.0,0.492792,0.090112,1.0,0.480755,0.088466,1.0,0.493718,0.068712,1.0,0.494876,0.086408,1.0,0.473912,0.247132,1.0,0.483100,0.251234,1.0,0.493851,0.338335,1.0,0.507685,0.270177,1.0,0.490721,0.264042,1.0,0.492193,0.274837,1.0,0.492193,0.283342,1.0,0.492929,0.271893,1.0,0.494954,0.287922,1.0,0.495321,0.298390,1.0,0.496794,0.271893,1.0,0.497346,0.288249,1.0,0.496794,0.302316,1.0,0.498818,0.271893,1.0,0.499186,0.285959,1.0,0.497161,0.293810,1.0,0.501210,0.271565,1.0,0.499738,0.283015,1.0,0.498634,0.288576,1.0,0.446352,0.463751,1.0,0.446352,0.463751,1.0,0.481576,0.640972,1.0,0.446284,0.815180,1.0,0.446284,0.815180,1.0,0.472354,0.466376,1.0,0.472354,0.466376,1.0,0.493845,0.640927,1.0,0.458653,0.774356,1.0,0.458653,0.774356,1.0
0.459353,0.465063,1.0,0.463382,0.298539,1.0,0.462039,0.354047,1.0,0.464724,0.243031,1.0,0.499219,0.173512,1.0,0.503092,0.177560,1.0,0.503092,0.177560,1.0,0.495345,0.169464,1.0,0.495345,0.169464,1.0,0.456286,0.236243,1.0,0.447847,0.229455,1.0,0.452509,0.117580,1.0,0.472354,0.071245,1.0,0.473116,0.069535,1.0,0.483070,0.053485,1.0,0.490709,0.067889,1.0,0.483301,0.057600,1.0,0.492792,0.074062,1.0,0.495802,0.085585,1.0,0.481449,0.067477,1.0,0.493024,0.085996,1.0,0.492561,0.085585,1.0,0.480523,0.080235,1.0,0.493024,0.089289,1.0,0.492792,0.090112,1.0,0.480755,0.088466,1.0,0.493718,0.068712,1.0,0.494876,0.086408,1.0,0.473912,0.247132,1.0,0.483100,0.251234,1.0,0.493851,0.338335,1.0,0.507685,0.270177,1.0,0.490721,0.264042,1.0,0.492193,0.274837,1.0,0.492193,0.283342,1.0,0.492929,0.271893,1.0,0.494954,0.287922,1.0,0.495321,0.298390,1.0,0.496794,0.271893,1.0,0.497346,0.288249,1.0,0.496794,0.302316,1.0,0.498818,0.271893,1.0,0.499186,0.285959,1.0,0.497161,0.293810,1.0,0.501210,0.271565,1.0,0.499738,0.283015,1.0,0.498634,0.288576,1.0,0.446352,0.463751,1.0,0.446352,0.463751,1.0,0.481576,0.640972,1.0,0.446284,0.815180,1.0,0.446284,0.815180,1.0,0.472354,0.466376,1.0,0.472354,0.466376,1.0,0.493845,0.640927,1.0,0.458653,0.774356,1.0,0.458653,0.774356,1.0
0.463190,0.451504,1.0,0.464365,0.286950,1.0,0.463973,0.341801,1.0,0.464757,0.232098,1.0,0.489280,0.162635,1.0,0.495402,0.163944,1.0,0.495402,0.163944,1.0,0.483159,0.161327,1.0,0.483159,0.161327,1.0,0.454760,0.229344,1.0,0.444764,0.226589,1.0,0.421751,0.109506,1.0,0.454020,0.049504,1.0,0.467484,0.059733,1.0,0.476185,0.064737,1.0,0.482328,0.057458,1.0,0.487958,0.063827,1.0,0.480792,0.056093,1.0,0.482072,0.064282,1.0,0.475930,0.049268,1.0,0.476953,0.051998,1.0,0.481816,0.061097,1.0,0.466972,0.048813,1.0,0.472858,0.046538,1.0,0.478489,0.057913,1.0,0.466204,0.048358,1.0,0.470555,0.046083,1.0,0.471579,0.064282,1.0,0.476239,0.240226,1.0,0.487721,0.248354,1.0,0.509233,0.332920,1.0,0.500022,0.229384,1.0,0.484245,0.206754,1.0,0.488571,0.228544,1.0,0.490253,0.245635,1.0,0.490494,0.230254,1.0,0.493378,0.246917,1.0,0.494580,0.257598,1.0,0.494339,0.224699,1.0,0.494580,0.243071,1.0,0.487129,0.253326,1.0,0.497223,0.220854,1.0,0.495060,0.237517,1.0,0.487129,0.249053,1.0,0.499386,0.216581,1.0,0.496021,0.233244,1.0,0.488331,0.241362,1.0,0.446284,0.450176,1.0,0.446284,0.450176,1.0,0.469370,0.643530,1.0,0.440198,0.815193,1.0,0.440198,0.815193,1.0,0.480096,0.452832,1.0,0.480096,0.452832,1.0,0.495392,0.640887,1.0,0.470844,0.774494,1.0,0.470844,0.774494,1.0
0.464753,0.444649,1.0,0.465904,0.268934,1.0,0.465520,0.327506,1.0,0.466287,0.210362,1.0,0.479274,0.146304,1.0,0.490816,0.145009,1.0,0.490816,0.145009,1.0,0.472491,0.147594,1.0,0.472491,0.147594,1.0,0.450933,0.211677,1.0,0.435579,0.212993,1.0,0.388131,0.133934,1.0,0.434022,0.054925,1.0,0.437188,0.056165,1.0,0.448385,0.067275,1.0,0.457759,0.069127,1.0,0.449948,0.049221,1.0,0.454374,0.065886,1.0,0.457759,0.070978,1.0,0.446042,0.050146,1.0,0.452031,0.059868,1.0,0.453854,0.070978,1.0,0.445260,0.052924,1.0,0.446042,0.056165,1.0,0.447865,0.067738,1.0,0.446562,0.053387,1.0,0.442396,0.057553,1.0,0.443177,0.060794,1.0,0.480876,0.210323,1.0,0.495465,0.210284,1.0,0.530615,0.155730,1.0,0.501535,0.082276,1.0,0.483906,0.079638,1.0,0.475050,0.080371,1.0,0.473196,0.089158,1.0,0.474844,0.078540,1.0,0.467842,0.075611,1.0,0.463723,0.074879,1.0,0.476492,0.070851,1.0,0.469695,0.067922,1.0,0.464753,0.065359,1.0,0.478757,0.064993,1.0,0.471549,0.061332,1.0,0.466812,0.058769,1.0,0.482464,0.058769,1.0,0.476697,0.053277,1.0,0.473196,0.049616,1.0,0.444839,0.444597,1.0,0.444839,0.444597,1.0,0.458551,0.643713,1.0,0.437121,0.815338,1.0,0.437121,0.815338,1.0,0.484667,0.444701,1.0,0.484667,0.444701,1.0,0.498527,0.640981,1.0,0.483204,0.771605,1.0,0.483204,0.771605,1.0
0.465483,0.440565,1.0,0.468369,0.278128,1.0,0.467407,0.332274,1.0,0.469331,0.223982,1.0,0.471653,0.155727,1.0,0.483158,0.142095,1.0,0.483158,0.142095,1.0,0.467774,0.142236,1.0,0.467774,0.142236,1.0,0.452465,0.223931,1.0,0.435598,0.223879,1.0,0.372791,0.164059,1.0,0.411157,0.079574,1.0,0.414146,0.083293,1.0,0.438978,0.079576,1.0,0.416498,0.086546,1.0,0.431659,0.091658,1.0,0.437409,0.092587,1.0,0.447342,0.083293,1.0,0.431920,0.083293,1.0,0.439239,0.081435,1.0,0.446558,0.079576,1.0,0.431136,0.075394,1.0,0.437409,0.072141,1.0,0.443421,0.068888,1.0,0.429045,0.067029,1.0,0.431659,0.064241,1.0,0.436625,0.061453,1.0,0.483901,0.225252,1.0,0.498470,0.226522,1.0,0.547542,0.155811,1.0,0.509145,0.098557,1.0,0.506670,0.088315,1.0,0.499718,0.076780,1.0,0.493925,0.072249,1.0,0.493462,0.071837,1.0,0.485815,0.067305,1.0,0.480485,0.064421,1.0,0.488595,0.075545,1.0,0.480717,0.071425,1.0,0.473765,0.068129,1.0,0.486046,0.081312,1.0,0.477936,0.075956,1.0,0.470752,0.072249,1.0,0.482570,0.086668,1.0,0.474460,0.080488,1.0,0.469594,0.075132,1.0,0.444774,0.439176,1.0,0.444774,0.439176,1.0,0.446379,0.646344,1.0,0.429483,0.815404,1.0,0.429483,0.815404,1.0,0.486191,0.441954,1.0,0.486191,0.441954,1.0,0.507597,0.643643,1.0,0.507615,0.771781,1.0,0.507615,0.771781,1.0
0.467026,0.450162,1.0,0.469918,0.284594,1.0,0.468954,0.339783,1.0,0.470882,0.229405,1.0,0.467064,0.161254,1.0,0.478535,0.144886,1.0,0.478535,0.144886,1.0,0.460163,0.144962,1.0,0.460163,0.144962,1.0,0.453255,0.230768,1.0,0.435628,0.232131,1.0,0.369709,0.204913,1.0,0.400416,0.117540,1.0,0.407570,0.097093,1.0,0.417004,0.082529,1.0,0.426189,0.072819,1.0,0.423210,0.090031,1.0,0.435127,0.088707,1.0,0.437360,0.079880,1.0,0.423706,0.104595,1.0,0.431403,0.095769,1.0,0.432892,0.078998,1.0,0.422714,0.116070,1.0,0.428423,0.105037,1.0,0.426934,0.101065,1.0,0.422961,0.122691,1.0,0.431899,0.126221,1.0,0.421720,0.118278,1.0,0.487740,0.228045,1.0,0.504598,0.226686,1.0,0.562844,0.166770,1.0,0.515320,0.117758,1.0,0.502106,0.125283,1.0,0.495193,0.121333,1.0,0.488775,0.085785,1.0,0.500378,0.088857,1.0,0.489516,0.084030,1.0,0.482850,0.081396,1.0,0.499390,0.091929,1.0,0.486553,0.089735,1.0,0.478901,0.085346,1.0,0.498649,0.096756,1.0,0.487047,0.098512,1.0,0.480382,0.094123,1.0,0.497168,0.101145,1.0,0.488528,0.109484,1.0,0.486059,0.108168,1.0,0.443244,0.447484,1.0,0.443244,0.447484,1.0,0.438679,0.659998,1.0,0.421798,0.812502,1.0,0.421798,0.812502,1.0,0.490808,0.452839,1.0,0.490808,0.452839,1.0,0.509281,0.659920,1.0,0.532234,0.782604,1.0,0.532234,0.782604,1.0
0.468542,0.467833,1.0,0.470227,0.303339,1.0,0.469666,0.358170,1.0,0.470789,0.248507,1.0,0.465473,0.178965,1.0,0.472435,0.161314,1.0,0.472435,0.161314,1.0,0.458540,0.163896,1.0,0.458540,0.163896,1.0,0.453175,0.251219,1.0,0.435561,0.253931,1.0,0.372687,0.240294,1.0,0.397257,0.155844,1.0,0.400021,0.144912,1.0,0.402113,0.125496,1.0,0.406528,0.113105,1.0,0.408851,0.114344,1.0,0.409781,0.103190,1.0,0.411872,0.095755,1.0,0.413498,0.115582,1.0,0.416286,0.102777,1.0,0.419075,0.093276,1.0,0.416984,0.118887,1.0,0.421166,0.106081,1.0,0.424187,0.096581,1.0,0.420004,0.123844,1.0,0.424652,0.111452,1.0,0.426975,0.104017,1.0,0.486921,0.244419,1.0,0.503053,0.240332,1.0,0.569042,0.191289,1.0,0.519934,0.139520,1.0,0.517634,0.138762,1.0,0.504778,0.116373,1.0,0.493758,0.108909,1.0,0.502416,0.154156,1.0,0.501105,0.157887,1.0,0.492183,0.102380,1.0,0.500317,0.150424,1.0,0.501105,0.167682,1.0,0.488772,0.134565,1.0,0.499530,0.150424,1.0,0.506615,0.167216,1.0,0.489560,0.134565,1.0,0.499793,0.149957,1.0,0.501105,0.161152,1.0,0.491921,0.101913,1.0,0.444776,0.466508,1.0,0.444776,0.466508,1.0,0.434016,0.670852,1.0,0.411092,0.812557,1.0,0.411092,0.812557,1.0,0.492308,0.469157,1.0,0.492308,0.469157,1.0,0.519938,0.665329,1.0,0.556755,0.796190,1.0,0.556755,0.796190,1.0
0.468542,0.467833,1.0,0.470227,0.303339,1.0,0.469666,0.358170,1.0,0.470789,0.248507,1.0,0.465473,0.178965,1.0,0.472435,0.161314,1.0,0.472435,0.161314,1.0,0.458540,0.163896,1.0,0.458540,0.163896,1.0,0.453175,0.251219,1.0,0.435561,0.253931,1.0,0.372687,0.240294,1.0,0.397257,0.155844,1.0,0.400021,0.144912,1.0,0.402113,0.125496,1.0,0.406528,0.113105,1.0,0.408851,0.114344,1.0,0.409781,0.103190,1.0,0.411872,0.095755,1.0,0.413498,0.115582,1.0,0.416286,0.102777,1.0,0.419075,0.093276,1.0,0.416984,0.118887,1.0,0.421166,0.106081,1.0,0.424187,0.096581,1.0,0.420004,0.123844,1.0,0.424652,0.111452,1.0,0.426975,0.104017,1.0,0.486921,0.244419,1.0,0.503053,0.240332,1.0,0.569042,0.191289,1.0,0.519934,0.139520,1.0,0.517634,0.138762,1.0,0.504778,0.116373,1.0,0.493758,0.108909,1.0,0.502416,0.154156,1.0,0.501105,0.157887,1.0,0.492183,0.102380,1.0,0.500317,0.150424,1.0,0.501105,0.167682,1.0,0.488772,0.134565,1.0,0.499530,0.150424,1.0,0.506615,0.167216,1.0,0.489560,0.134565,1.0,0.499793,0.149957,1.0,0.501105,0.161152,1.0,0.491921,0.101913,1.0,0.444776,0.466508,1.0,0.444776,0.466508,1.0,0.434016,0.670852,1.0,0.411092,0.812557,1.0,0.411092,0.812557,1.0,0.492308,0.469157,1.0,0.492308,0.469157,1.0,0.519938,0.665329,1.0,0.556755,0.796190,1.0,0.556755,0.796190,1.0
0.470060,0.488288,1.0,0.470645,0.326771,1.0,0.470450,0.380610,1.0,0.470840,0.272931,1.0,0.462450,0.202051,1.0,0.469372,0.183156,1.0,0.469372,0.183156,1.0,0.450935,0.185744,1.0,0.450935,0.185744,1.0,0.453993,0.278381,1.0,0.437145,0.283831,1.0,0.374298,0.267459,1.0,0.398780,0.185742,1.0,0.402199,0.189015,1.0,0.404063,0.187772,1.0,0.406626,0.189430,1.0,0.417112,0.164574,1.0,0.422937,0.152561,1.0,0.426433,0.143861,1.0,0.413850,0.156289,1.0,0.419908,0.143861,1.0,0.424103,0.135991,1.0,0.410121,0.150904,1.0,0.414549,0.138891,1.0,0.417112,0.131019,1.0,0.404296,0.149661,1.0,0.407558,0.138062,1.0,0.408956,0.133091,1.0,0.486178,0.270181,1.0,0.501516,0.267430,1.0,0.568948,0.229319,1.0,0.519918,0.169431,1.0,0.512564,0.163050,1.0,0.498546,0.143669,1.0,0.502959,0.188431,1.0,0.498546,0.187508,1.0,0.482193,0.184278,1.0,0.480376,0.193046,1.0,0.496470,0.163512,1.0,0.486606,0.194431,1.0,0.491278,0.209659,1.0,0.495951,0.173203,1.0,0.488163,0.193046,1.0,0.492576,0.208275,1.0,0.499844,0.184740,1.0,0.483751,0.180586,1.0,0.496210,0.202737,1.0,0.446294,0.488281,1.0,0.446294,0.488281,1.0,0.424901,0.689984,1.0,0.400355,0.815355,1.0,0.400355,0.815355,1.0,0.493826,0.488294,1.0,0.493826,0.488294,1.0,0.526036,0.681821,1.0,0.581224,0.818066,1.0,0.581224,0.818066,1.0
0.471620,0.512856,1.0,0.471046,0.351315,1.0,0.471237,0.405163,1.0,0.470855,0.297469,1.0,0.462417,0.230671,1.0,0.464750,0.218465,1.0,0.464750,0.218465,1.0,0.447920,0.221166,1.0,0.447920,0.221166,1.0,0.454002,0.302940,1.0,0.437150,0.308412,1.0,0.380398,0.291981,1.0,0.403432,0.213079,1.0,0.406814,0.218165,1.0,0.413774,0.221165,1.0,0.417149,0.219665,1.0,0.427064,0.164166,1.0,0.416939,0.215540,1.0,0.418204,0.220040,1.0,0.414407,0.179166,1.0,0.416939,0.160791,1.0,0.416306,0.217790,1.0,0.408079,0.190790,1.0,0.416939,0.182166,1.0,0.417360,0.160416,1.0,0.403228,0.201665,1.0,0.415040,0.218165,1.0,0.420946,0.221915,1.0,0.486182,0.294798,1.0,0.501508,0.292128,1.0,0.559849,0.270250,1.0,0.515315,0.207512,1.0,0.504324,0.196279,1.0,0.481626,0.174868,1.0,0.481394,0.178162,1.0,0.495059,0.182279,1.0,0.487416,0.182691,1.0,0.479542,0.174868,1.0,0.495291,0.202455,1.0,0.488806,0.184338,1.0,0.488806,0.216867,1.0,0.492743,0.201631,1.0,0.483016,0.213161,1.0,0.487416,0.217278,1.0,0.495291,0.214396,1.0,0.482553,0.213984,1.0,0.488806,0.217690,1.0,0.447893,0.512898,1.0,0.447893,0.512898,1.0,0.423313,0.711698,1.0,0.400347,0.820846,1.0,0.400347,0.820846,1.0,0.495346,0.512815,1.0,0.495346,0.512815,1.0,0.532260,0.711732,1.0,0.599646,0.826181,1.0,0.599646,0.826181,1.0
0.473960,0.534670,1.0,0.472775,0.379277,1.0,0.473170,0.431074,1.0,0.472380,0.327479,1.0,0.460133,0.259343,1.0,0.463232,0.248319,1.0,0.463232,0.248319,1.0,0.447849,0.248452,1.0,0.447849,0.248452,1.0,0.457822,0.331569,1.0,0.443264,0.335658,1.0,0.384953,0.313744,1.0,0.414185,0.234838,1.0,0.416397,0.232509,1.0,0.433014,0.209965,1.0,0.433233,0.216573,1.0,0.422957,0.206467,1.0,0.426236,0.207244,1.0,0.426236,0.204523,1.0,0.417928,0.215795,1.0,0.426455,0.220071,1.0,0.427329,0.219682,1.0,0.417709,0.216184,1.0,0.426673,0.225902,1.0,0.430172,0.226290,1.0,0.413774,0.230566,1.0,0.412681,0.236007,1.0,0.434982,0.231344,1.0,0.488474,0.322105,1.0,0.504569,0.316731,1.0,0.555182,0.294939,1.0,0.507671,0.245756,1.0,0.494905,0.231518,1.0,0.485492,0.216378,1.0,0.474735,0.208409,1.0,0.489302,0.244267,1.0,0.476976,0.250642,1.0,0.469580,0.246657,1.0,0.489974,0.247056,1.0,0.488630,0.252235,1.0,0.468235,0.239884,1.0,0.491095,0.247454,1.0,0.488854,0.256219,1.0,0.468460,0.238689,1.0,0.490871,0.272953,1.0,0.471597,0.247056,1.0,0.471597,0.246657,1.0,0.452460,0.537394,1.0,0.452460,0.537394,1.0,0.423298,0.728191,1.0,0.400336,0.831617,1.0,0.400336,0.831617,1.0,0.495459,0.531946,1.0,0.495459,0.531946,1.0,0.533766,0.741674,1.0,0.614953,0.837186,1.0,0.614953,0.837186,1.0
0.474688,0.552287,1.0,0.472987,0.391897,1.0,0.473554,0.445360,1.0,0.472420,0.338433,1.0,0.462429,0.274300,1.0,0.466250,0.259362,1.0,0.466250,0.259362,1.0,0.447909,0.264746,1.0,0.447909,0.264746,1.0,0.457841,0.341176,1.0,0.443261,0.343919,1.0,0.384993,0.316742,1.0,0.417216,0.251192,1.0,0.418569,0.247240,1.0,0.425640,0.231132,1.0,0.435585,0.230740,1.0,0.426082,0.226811,1.0,0.438016,0.224454,1.0,0.443319,0.222096,1.0,0.425198,0.231918,1.0,0.438016,0.239775,1.0,0.440005,0.235061,1.0,0.425861,0.243704,1.0,0.435585,0.243704,1.0,0.440668,0.256669,1.0,0.424977,0.254312,1.0,0.433375,0.259812,1.0,0.437132,0.262955,1.0,0.489258,0.337039,1.0,0.506096,0.335645,1.0,0.549057,0.311114,1.0,0.498448,0.256640,1.0,0.488499,0.254955,1.0,0.479335,0.263957,1.0,0.474754,0.260956,1.0,0.481506,0.240378,1.0,0.478612,0.229231,1.0,0.465348,0.226658,1.0,0.482953,0.238234,1.0,0.471377,0.228803,1.0,0.465590,0.226230,1.0,0.484399,0.239520,1.0,0.475236,0.229660,1.0,0.466072,0.226658,1.0,0.484882,0.237806,1.0,0.479094,0.232661,1.0,0.469689,0.229231,1.0,0.452504,0.553669,1.0,0.452504,0.553669,1.0,0.421848,0.730875,1.0,0.398921,0.831599,1.0,0.398921,0.831599,1.0,0.496871,0.550905,1.0,0.496871,0.550905,1.0,0.533781,0.752547,1.0,0.616500,0.839821,1.0,0.616500,0.839821,1.0
0.475482,0.538700,1.0,0.473233,0.386308,1.0,0.473982,0.437105,1.0,0.472483,0.335510,1.0,0.464741,0.270262,1.0,0.469310,0.256626,1.0,0.469310,0.256626,1.0,0.450960,0.262055,1.0,0.450960,0.262055,1.0,0.459418,0.335644,1.0,0.446353,0.335777,1.0,0.385055,0.313869,1.0,0.418758,0.251184,1.0,0.431257,0.258226,1.0,0.434927,0.254556,1.0,0.428734,0.234983,1.0,0.432404,0.257410,1.0,0.439973,0.229275,1.0,0.445478,0.227644,1.0,0.432404,0.239061,1.0,0.437679,0.229275,1.0,0.445478,0.227644,1.0,0.429422,0.238654,1.0,0.435615,0.228867,1.0,0.441349,0.230498,1.0,0.423229,0.244362,1.0,0.427817,0.228459,1.0,0.434239,0.229682,1.0,0.489280,0.331481,1.0,0.506078,0.327451,1.0,0.549047,0.294919,1.0,0.496925,0.251315,1.0,0.486769,0.246109,1.0,0.479020,0.227325,1.0,0.467749,0.226072,1.0,0.480664,0.228577,1.0,0.473150,0.221898,1.0,0.462819,0.222733,1.0,0.480664,0.231917,1.0,0.471037,0.222733,1.0,0.464228,0.222316,1.0,0.478081,0.241518,1.0,0.472681,0.225655,1.0,0.464697,0.225238,1.0,0.482777,0.228994,1.0,0.478316,0.257797,1.0,0.476907,0.258215,1.0,0.454024,0.542745,1.0,0.454024,0.542745,1.0,0.421806,0.728074,1.0,0.398894,0.828899,1.0,0.398894,0.828899,1.0,0.496940,0.534654,1.0,0.496940,0.534654,1.0,0.533698,0.741775,1.0,0.613427,0.837197,1.0,0.613427,0.837197,1.0
0.475482,0.538700,1.0,0.473233,0.386308,1.0,0.473982,0.437105,1.0,0.472483,0.335510,1.0,0.464741,0.270262,1.0,0.469310,0.256626,1.0,0.469310,0.256626,1.0,0.450960,0.262055,1.0,0.450960,0.262055,1.0,0.459418,0.335644,1.0,0.446353,0.335777,1.0,0.385055,0.313869,1.0,0.418758,0.251184,1.0,0.431257,0.258226,1.0,0.434927,0.254556,1.0,0.428734,0.234983,1.0,0.432404,0.257410,1.0,0.439973,0.229275,1.0,0.445478,0.227644,1.0,0.432404,0.239061,1.0,0.437679,0.229275,1.0,0.445478,0.227644,1.0,0.429422,0.238654,1.0,0.435615,0.228867,1.0,0.441349,0.230498,1.0,0.423229,0.244362,1.0,0.427817,0.228459,1.0,0.434239,0.229682,1.0,0.489280,0.331481,1.0,0.506078,0.327451,1.0,0.549047,0.294919,1.0,0.496925,0.251315,1.0,0.486769,0.246109,1.0,0.479020,0.227325,1.0,0.467749,0.226072,1.0,0.480664,0.228577,1.0,0.473150,0.221898,1.0,0.462819,0.222733,1.0,0.480664,0.231917,1.0,0.471037,0.222733,1.0,0.464228,0.222316,1.0,0.478081,0.241518,1.0,0.472681,0.225655,1.0,0.464697,0.225238,1.0,0.482777,0.228994,1.0,0.478316,0.257797,1.0,0.476907,0.258215,1.0,0.454024,0.542745,1.0,0.454024,0.542745,1.0,0.421806,0.728074,1.0,0.398894,0.828899,1.0,0.398894,0.828899,1.0,0.496940,0.534654,1.0,0.496940,0.534654,1.0,0.533698,0.741775,1.0,0.613427,0.837197,1.0,0.613427,0.837197,1.0
0.474726,0.514133,1.0,0.473017,0.359792,1.0,0.473587,0.411239,1.0,0.472448,0.308344,1.0,0.463954,0.248372,1.0,0.470802,0.242960,1.0,0.470802,0.242960,1.0,0.450969,0.243017,1.0,0.450969,0.243017,1.0,0.458640,0.311058,1.0,0.444831,0.313771,1.0,0.385001,0.292042,1.0,0.418757,0.232220,1.0,0.420488,0.239561,1.0,0.435946,0.220843,1.0,0.439978,0.217258,1.0,0.431913,0.213674,1.0,0.439306,0.214072,1.0,0.444682,0.213276,1.0,0.428777,0.212878,1.0,0.437962,0.216462,1.0,0.441770,0.221241,1.0,0.425865,0.214470,1.0,0.433705,0.220046,1.0,0.436618,0.227613,1.0,0.423177,0.220444,1.0,0.429449,0.220843,1.0,0.432137,0.227215,1.0,0.488521,0.302978,1.0,0.504594,0.297611,1.0,0.556682,0.273055,1.0,0.496877,0.240310,1.0,0.488874,0.239481,1.0,0.478416,0.245376,1.0,0.480202,0.245376,1.0,0.479436,0.217715,1.0,0.472549,0.211366,1.0,0.466172,0.212273,1.0,0.480967,0.215901,1.0,0.472039,0.210006,1.0,0.465662,0.211819,1.0,0.480457,0.215447,1.0,0.474080,0.211819,1.0,0.466172,0.211819,1.0,0.481477,0.215901,1.0,0.474845,0.213180,1.0,0.469743,0.218621,1.0,0.453992,0.515538,1.0,0.453992,0.515538,1.0,0.421804,0.706226,1.0,0.398900,0.823457,1.0,0.398900,0.823457,1.0,0.495459,0.512728,1.0,0.495459,0.512728,1.0,0.533724,0.714528,1.0,0.608813,0.831653,1.0,0.608813,0.831653,1.0
0.473213,0.482833,1.0,0.472643,0.325530,1.0,0.472833,0.377964,1.0,0.472454,0.273095,1.0,0.465479,0.223896,1.0,0.470824,0.218515,1.0,0.470824,0.218515,1.0,0.454009,0.218516,1.0,0.454009,0.218516,1.0,0.458608,0.277110,1.0,0.444761,0.281125,1.0,0.383489,0.267533,1.0,0.418755,0.221191,1.0,0.425863,0.221200,1.0,0.437868,0.198649,1.0,0.441946,0.196635,1.0,0.434697,0.190997,1.0,0.442172,0.191400,1.0,0.445796,0.194219,1.0,0.431299,0.192608,1.0,0.439681,0.197844,1.0,0.443758,0.203883,1.0,0.429260,0.196232,1.0,0.436509,0.203883,1.0,0.440133,0.210730,1.0,0.427448,0.201065,1.0,0.433338,0.207106,1.0,0.436509,0.213951,1.0,0.489276,0.272982,1.0,0.506097,0.272869,1.0,0.562833,0.248363,1.0,0.507636,0.226713,1.0,0.499098,0.216702,1.0,0.494029,0.206871,1.0,0.488499,0.198269,1.0,0.488039,0.201546,1.0,0.478131,0.194993,1.0,0.471680,0.192535,1.0,0.486886,0.204414,1.0,0.477210,0.197451,1.0,0.468916,0.197860,1.0,0.487117,0.204823,1.0,0.478822,0.199089,1.0,0.471450,0.201137,1.0,0.490573,0.206052,1.0,0.480205,0.199089,1.0,0.474676,0.202775,1.0,0.450983,0.488252,1.0,0.450983,0.488252,1.0,0.423316,0.687126,1.0,0.398920,0.817981,1.0,0.398920,0.817981,1.0,0.495442,0.477414,1.0,0.495442,0.477414,1.0,0.533740,0.684466,1.0,0.601182,0.818027,1.0,0.601182,0.818027,1.0
0.473957,0.455590,1.0,0.472827,0.298223,1.0,0.473204,0.350678,1.0,0.472451,0.245767,1.0,0.465539,0.185859,1.0,0.470848,0.202101,1.0,0.470848,0.202101,1.0,0.457044,0.202136,1.0,0.457044,0.202136,1.0,0.456322,0.247041,1.0,0.440194,0.248315,1.0,0.381928,0.240272,1.0,0.421755,0.202094,1.0,0.430181,0.197117,1.0,0.440686,0.181871,1.0,0.445832,0.181490,1.0,0.438757,0.173105,1.0,0.445832,0.175392,1.0,0.449476,0.178822,1.0,0.435755,0.174630,1.0,0.443902,0.184539,1.0,0.447332,0.190637,1.0,0.432968,0.178822,1.0,0.440472,0.190637,1.0,0.443045,0.197498,1.0,0.430824,0.185302,1.0,0.437256,0.195973,1.0,0.439185,0.200928,1.0,0.490053,0.245764,1.0,0.507655,0.245761,1.0,0.568911,0.226528,1.0,0.507597,0.207477,1.0,0.496751,0.215172,1.0,0.486348,0.209759,1.0,0.484318,0.209308,1.0,0.491676,0.183599,1.0,0.482289,0.179991,1.0,0.476199,0.177735,1.0,0.492437,0.183148,1.0,0.482035,0.182696,1.0,0.473916,0.184952,1.0,0.493706,0.184501,1.0,0.482796,0.187658,1.0,0.474931,0.189011,1.0,0.495228,0.190365,1.0,0.484318,0.190816,1.0,0.478737,0.194875,1.0,0.450973,0.461052,1.0,0.450973,0.461052,1.0,0.432490,0.662791,1.0,0.408011,0.812598,1.0,0.408011,0.812598,1.0,0.496940,0.450129,1.0,0.496940,0.450129,1.0,0.533661,0.662598,1.0,0.591927,0.812526,1.0,0.591927,0.812526,1.0
0.474739,0.441925,1.0,0.474155,0.280451,1.0,0.474350,0.334276,1.0,0.473961,0.226626,1.0,0.465482,0.165307,1.0,0.469348,0.183145,1.0,0.469348,0.183145,1.0,0.455566,0.183031,1.0,0.455566,0.183031,1.0,0.457850,0.226619,1.0,0.441740,0.226611,1.0,0.380433,0.223944,1.0,0.421784,0.185677,1.0,0.429356,0.190245,1.0,0.443529,0.171448,1.0,0.448704,0.169449,1.0,0.440830,0.161050,1.0,0.448929,0.162250,1.0,0.452528,0.165849,1.0,0.437905,0.161450,1.0,0.446904,0.171448,1.0,0.450728,0.178247,1.0,0.434531,0.166249,1.0,0.443304,0.177847,1.0,0.446679,0.186246,1.0,0.432056,0.175848,1.0,0.439930,0.183446,1.0,0.442405,0.189446,1.0,0.491576,0.226659,1.0,0.509191,0.226692,1.0,0.572078,0.207452,1.0,0.512275,0.202126,1.0,0.502059,0.204707,1.0,0.493028,0.202104,1.0,0.484973,0.169994,1.0,0.494736,0.170862,1.0,0.485461,0.166523,1.0,0.479604,0.164354,1.0,0.495469,0.170862,1.0,0.482533,0.172164,1.0,0.476187,0.173031,1.0,0.494981,0.171731,1.0,0.483509,0.177805,1.0,0.477652,0.180408,1.0,0.495713,0.175202,1.0,0.484485,0.182578,1.0,0.481801,0.184314,1.0,0.452495,0.447338,1.0,0.452495,0.447338,1.0,0.435664,0.649113,1.0,0.420253,0.801656,1.0,0.420253,0.801656,1.0,0.496983,0.436513,1.0,0.496983,0.436513,1.0,0.530630,0.654502,1.0,0.576667,0.798994,1.0,0.576667,0.798994,1.0
0.473978,0.433787,1.0,0.476258,0.272293,1.0,0.475498,0.326124,1.0,0.477018,0.218462,1.0,0.467801,0.158464,1.0,0.472356,0.166655,1.0,0.472356,0.166655,1.0,0.457076,0.164081,1.0,0.457076,0.164081,1.0,0.461643,0.217133,1.0,0.446269,0.215805,1.0,0.378912,0.207665,1.0,0.423396,0.172140,1.0,0.431636,0.190356,1.0,0.439067,0.180669,1.0,0.451450,0.158215,1.0,0.443524,0.150289,1.0,0.452193,0.151610,1.0,0.456156,0.156013,1.0,0.440800,0.151169,1.0,0.450459,0.161296,1.0,0.454422,0.168781,1.0,0.437581,0.154692,1.0,0.446744,0.166580,1.0,0.449221,0.175826,1.0,0.435352,0.162177,1.0,0.442782,0.170543,1.0,0.445010,0.177588,1.0,0.493885,0.219815,1.0,0.510753,0.221169,1.0,0.572068,0.204737,1.0,0.512245,0.185910,1.0,0.501915,0.198186,1.0,0.491267,0.189381,1.0,0.486562,0.177936,1.0,0.498695,0.162088,1.0,0.488047,0.157245,1.0,0.482105,0.155044,1.0,0.499191,0.162529,1.0,0.488047,0.160768,1.0,0.479629,0.163408,1.0,0.500429,0.163849,1.0,0.488791,0.167811,1.0,0.481609,0.170452,1.0,0.501915,0.169572,1.0,0.497457,0.163408,1.0,0.485571,0.174855,1.0,0.450971,0.439204,1.0,0.450971,0.439204,1.0,0.446253,0.643750,1.0,0.435594,0.796158,1.0,0.435594,0.796158,1.0,0.496985,0.428369,1.0,0.496985,0.428369,1.0,0.521411,0.643692,1.0,0.558193,0.798938,1.0,0.558193,0.798938,1.0
0.473978,0.433787,1.0,0.476258,0.272293,1.0,0.475498,0.326124,1.0,0.477018,0.218462,1.0,0.467801,0.158464,1.0,0.472356,0.166655,1.0,0.472356,0.166655,1.0,0.457076,0.164081,1.0,0.457076,0.164081,1.0,0.461643,0.217133,1.0,0.446269,0.215805,1.0,0.378912,0.207665,1.0,0.423396,0.172140,1.0,0.431636,0.190356,1.0,0.439067,0.180669,1.0,0.451450,0.158215,1.0,0.443524,0.150289,1.0,0.452193,0.151610,1.0,0.456156,0.156013,1.0,0.440800,0.151169,1.0,0.450459,0.161296,1.0,0.454422,0.168781,1.0,0.437581,0.154692,1.0,0.446744,0.166580,1.0,0.449221,0.175826,1.0,0.435352,0.162177,1.0,0.442782,0.170543,1.0,0.445010,0.177588,1.0,0.493885,0.219815,1.0,0.510753,0.221169,1.0,0.572068,0.204737,1.0,0.512245,0.185910,1.0,0.501915,0.198186,1.0,0.491267,0.189381,1.0,0.486562,0.177936,1.0,0.498695,0.162088,1.0,0.488047,0.157245,1.0,0.482105,0.155044,1.0,0.499191,0.162529,1.0,0.488047,0.160768,1.0,0.479629,0.163408,1.0,0.500429,0.163849,1.0,0.488791,0.167811,1.0,0.481609,0.170452,1.0,0.501915,0.169572,1.0,0.497457,0.163408,1.0,0.485571,0.174855,1.0,0.450971,0.439204,1.0,0.450971,0.439204,1.0,0.446253,0.643750,1.0,0.435594,0.796158,1.0,0.435594,0.796158,1.0,0.496985,0.428369,1.0,0.496985,0.428369,1.0,0.521411,0.643692,1.0,0.558193,0.798938,1.0,0.558193,0.798938,1.0
0.473979,0.437821,1.0,0.478523,0.271241,1.0,0.477008,0.326768,1.0,0.480038,0.215715,1.0,0.471637,0.158472,1.0,0.477018,0.166685,1.0,0.477018,0.166685,1.0,0.460145,0.166693,1.0,0.460145,0.166693,1.0,0.462436,0.214361,1.0,0.444834,0.213006,1.0,0.378915,0.207671,1.0,0.423329,0.172170,1.0,0.435081,0.178530,1.0,0.442827,0.174656,1.0,0.455899,0.155721,1.0,0.446216,0.147974,1.0,0.454447,0.147544,1.0,0.458562,0.151847,1.0,0.443553,0.147544,1.0,0.453962,0.155291,1.0,0.458078,0.163037,1.0,0.441132,0.150556,1.0,0.450573,0.161316,1.0,0.453962,0.169062,1.0,0.439196,0.157012,1.0,0.446700,0.165189,1.0,0.449363,0.171644,1.0,0.496914,0.217093,1.0,0.513790,0.218471,1.0,0.575135,0.204825,1.0,0.519931,0.188450,1.0,0.503766,0.193996,1.0,0.493729,0.187913,1.0,0.490079,0.177774,1.0,0.502169,0.161957,1.0,0.490991,0.155468,1.0,0.485060,0.152223,1.0,0.501485,0.162363,1.0,0.490991,0.158712,1.0,0.482779,0.160335,1.0,0.501941,0.161957,1.0,0.492132,0.161957,1.0,0.483919,0.161957,1.0,0.503310,0.162769,1.0,0.495326,0.163580,1.0,0.488254,0.168852,1.0,0.450971,0.441894,1.0,0.450971,0.441894,1.0,0.449402,0.643633,1.0,0.458571,0.793435,1.0,0.458571,0.793435,1.0,0.496986,0.433749,1.0,0.496986,0.433749,1.0,0.515348,0.643511,1.0,0.533667,0.812631,1.0,0.533667,0.812631,1.0
0.475488,0.435119,1.0,0.480058,0.274683,1.0,0.478535,0.328162,1.0,0.481581,0.221205,1.0,0.474678,0.161309,1.0,0.480078,0.166713,1.0,0.480078,0.166713,1.0,0.461659,0.166758,1.0,0.461659,0.166758,1.0,0.463982,0.221189,1.0,0.446383,0.221173,1.0,0.381931,0.218452,1.0,0.432519,0.166806,1.0,0.442318,0.175126,1.0,0.446122,0.175549,1.0,0.453731,0.151877,1.0,0.448024,0.150608,1.0,0.457060,0.150608,1.0,0.461340,0.154835,1.0,0.446122,0.150608,1.0,0.455871,0.157794,1.0,0.459914,0.164981,1.0,0.444457,0.153568,1.0,0.453493,0.162868,1.0,0.456822,0.171321,1.0,0.442793,0.159063,1.0,0.449927,0.166671,1.0,0.452304,0.172590,1.0,0.499205,0.221226,1.0,0.516828,0.221248,1.0,0.579714,0.207528,1.0,0.521505,0.196663,1.0,0.506356,0.195197,1.0,0.496336,0.189684,1.0,0.490373,0.174418,1.0,0.502777,0.164240,1.0,0.494667,0.159574,1.0,0.488465,0.155333,1.0,0.505640,0.159998,1.0,0.504685,0.143035,1.0,0.487272,0.162968,1.0,0.510888,0.160847,1.0,0.516374,0.146852,1.0,0.518283,0.147700,1.0,0.516374,0.165088,1.0,0.518521,0.147276,1.0,0.520668,0.154485,1.0,0.453983,0.439193,1.0,0.453983,0.439193,1.0,0.458640,0.649075,1.0,0.481580,0.790773,1.0,0.481580,0.790773,1.0,0.496992,0.431045,1.0,0.496992,0.431045,1.0,0.509172,0.654495,1.0,0.504561,0.820807,1.0,0.504561,0.820807,1.0
0.478510,0.455583,1.0,0.480815,0.285987,1.0,0.480046,0.342519,1.0,0.481583,0.229456,1.0,0.475495,0.172154,1.0,0.481603,0.182931,1.0,0.481603,0.182931,1.0,0.463205,0.182963,1.0,0.463205,0.182963,1.0,0.463968,0.229475,1.0,0.446354,0.229494,1.0,0.380414,0.229310,1.0,0.432548,0.183145,1.0,0.442495,0.193283,1.0,0.448785,0.186832,1.0,0.460154,0.171351,1.0,0.451446,0.159740,1.0,0.459428,0.159310,1.0,0.463782,0.164900,1.0,0.448785,0.159310,1.0,0.458703,0.166191,1.0,0.463057,0.175652,1.0,0.446849,0.162750,1.0,0.456283,0.171351,1.0,0.459912,0.180381,1.0,0.444914,0.169201,1.0,0.452655,0.175652,1.0,0.455558,0.182102,1.0,0.498455,0.229494,1.0,0.515327,0.229533,1.0,0.579672,0.221221,1.0,0.522969,0.204919,1.0,0.506860,0.204590,1.0,0.498577,0.200803,1.0,0.497630,0.201223,1.0,0.506860,0.167984,1.0,0.496920,0.168405,1.0,0.491003,0.165460,1.0,0.508990,0.168826,1.0,0.497867,0.170930,1.0,0.490293,0.172613,1.0,0.512067,0.170508,1.0,0.499996,0.172192,1.0,0.492896,0.175137,1.0,0.509936,0.180606,1.0,0.508990,0.174295,1.0,0.500470,0.173454,1.0,0.457031,0.458296,1.0,0.457031,0.458296,1.0,0.469351,0.662670,1.0,0.497001,0.801695,1.0,0.497001,0.801695,1.0,0.499988,0.452870,1.0,0.499988,0.452870,1.0,0.503064,0.657237,1.0,0.470929,0.845264,1.0,0.470929,0.845264,1.0
0.479321,0.467852,1.0,0.481018,0.303245,1.0,0.480452,0.358114,1.0,0.481584,0.248376,1.0,0.476974,0.187120,1.0,0.483087,0.196651,1.0,0.483087,0.196651,1.0,0.464734,0.199392,1.0,0.464734,0.199392,1.0,0.463947,0.248434,1.0,0.446309,0.248493,1.0,0.378886,0.229503,1.0,0.435580,0.188595,1.0,0.441017,0.200028,1.0,0.449531,0.194685,1.0,0.461552,0.183556,1.0,0.453037,0.171980,1.0,0.461301,0.170199,1.0,0.465809,0.175987,1.0,0.451284,0.170644,1.0,0.461051,0.176877,1.0,0.465308,0.186671,1.0,0.449281,0.173761,1.0,0.458546,0.181329,1.0,0.461552,0.191123,1.0,0.447528,0.179548,1.0,0.454790,0.185781,1.0,0.457294,0.191569,1.0,0.499207,0.248368,1.0,0.516829,0.248360,1.0,0.579661,0.226694,1.0,0.526073,0.207630,1.0,0.509801,0.215947,1.0,0.500409,0.213025,1.0,0.497592,0.214278,1.0,0.509331,0.180469,1.0,0.499940,0.183807,1.0,0.508861,0.155842,1.0,0.510505,0.178799,1.0,0.517783,0.163355,1.0,0.492427,0.185894,1.0,0.511914,0.180051,1.0,0.522479,0.166277,1.0,0.526469,0.172538,1.0,0.518488,0.183390,1.0,0.527646,0.173372,1.0,0.530932,0.175042,1.0,0.457092,0.469169,1.0,0.457092,0.469169,1.0,0.478525,0.668123,1.0,0.509151,0.818154,1.0,0.509151,0.818154,1.0,0.501549,0.466534,1.0,0.501549,0.466534,1.0,0.495342,0.665405,1.0,0.467778,0.858911,1.0,0.467778,0.858911,1.0
0.481557,0.481453,1.0,0.481556,0.312844,1.0,0.481556,0.369047,1.0,0.481555,0.256641,1.0,0.477759,0.193962,1.0,0.484679,0.202062,1.0,0.484679,0.202062,1.0,0.469355,0.202119,1.0,0.469355,0.202119,1.0,0.463917,0.257983,1.0,0.446279,0.259326,1.0,0.377393,0.229511,1.0,0.435660,0.191185,1.0,0.441104,0.200732,1.0,0.449686,0.198882,1.0,0.454889,0.197495,1.0,0.453588,0.176226,1.0,0.462171,0.175764,1.0,0.467113,0.180387,1.0,0.452028,0.176226,1.0,0.461911,0.182237,1.0,0.466332,0.191022,1.0,0.449686,0.177613,1.0,0.459570,0.185936,1.0,0.462431,0.194721,1.0,0.447606,0.183162,1.0,0.454628,0.188710,1.0,0.457229,0.194721,1.0,0.497671,0.256639,1.0,0.513786,0.256638,1.0,0.581187,0.229364,1.0,0.530630,0.213012,1.0,0.516734,0.224296,1.0,0.508873,0.223846,1.0,0.502026,0.222043,1.0,0.511663,0.185074,1.0,0.501265,0.184624,1.0,0.494672,0.181468,1.0,0.512423,0.187329,1.0,0.502533,0.188231,1.0,0.494672,0.191386,1.0,0.512931,0.188231,1.0,0.503547,0.187329,1.0,0.495433,0.190033,1.0,0.511409,0.190935,1.0,0.497969,0.180116,1.0,0.493404,0.180566,1.0,0.458522,0.482794,1.0,0.458522,0.482794,1.0,0.473946,0.673574,1.0,0.507586,0.817938,1.0,0.507586,0.817938,1.0,0.504592,0.480112,1.0,0.504592,0.480112,1.0,0.496946,0.668161,1.0,0.475470,0.837174,1.0,0.475470,0.837174,1.0
0.481557,0.481453,1.0,0.481556,0.312844,1.0,0.481556,0.369047,1.0,0.481555,0.256641,1.0,0.477759,0.193962,1.0,0.484679,0.202062,1.0,0.484679,0.202062,1.0,0.469355,0.202119,1.0,0.469355,0.202119,1.0,0.463917,0.257983,1.0,0.446279,0.259326,1.0,0.377393,0.229511,1.0,0.435660,0.191185,1.0,0.441104,0.200732,1.0,0.449686,0.198882,1.0,0.454889,0.197495,1.0,0.453588,0.176226,1.0,0.462171,0.175764,1.0,0.467113,0.180387,1.0,0.452028,0.176226,1.0,0.461911,0.182237,1.0,0.466332,0.191022,1.0,0.449686,0.177613,1.0,0.459570,0.185936,1.0,0.462431,0.194721,1.0,0.447606,0.183162,1.0,0.454628,0.188710,1.0,0.457229,0.194721,1.0,0.497671,0.256639,1.0,0.513786,0.256638,1.0,0.581187,0.229364,1.0,0.530630,0.213012,1.0,0.516734,0.224296,1.0,0.508873,0.223846,1.0,0.502026,0.222043,1.0,0.511663,0.185074,1.0,0.501265,0.184624,1.0,0.494672,0.181468,1.0,0.512423,0.187329,1.0,0.502533,0.188231,1.0,0.494672,0.191386,1.0,0.512931,0.188231,1.0,0.503547,0.187329,1.0,0.495433,0.190033,1.0,0.511409,0.190935,1.0,0.497969,0.180116,1.0,0.493404,0.180566,1.0,0.458522,0.482794,1.0,0.458522,0.482794,1.0,0.473946,0.673574,1.0,0.507586,0.817938,1.0,0.507586,0.817938,1.0,0.504592,0.480112,1.0,0.504592,0.480112,1.0,0.496946,0.668161,1.0,0.475470,0.837174,1.0,0.475470,0.837174,1.0
0.481564,0.467842,1.0,0.479304,0.303249,1.0,0.480057,0.358114,1.0,0.478550,0.248385,1.0,0.480032,0.185765,1.0,0.489259,0.188604,1.0,0.489259,0.188604,1.0,0.472348,0.191278,1.0,0.472348,0.191278,1.0,0.462427,0.248418,1.0,0.446304,0.248450,1.0,0.377356,0.223967,1.0,0.434028,0.185844,1.0,0.438801,0.196190,1.0,0.447571,0.195731,1.0,0.451956,0.196190,1.0,0.451956,0.171429,1.0,0.459952,0.171429,1.0,0.464336,0.174638,1.0,0.450924,0.171429,1.0,0.459435,0.177848,1.0,0.464078,0.184726,1.0,0.448086,0.172804,1.0,0.457114,0.180141,1.0,0.461499,0.187019,1.0,0.445765,0.177390,1.0,0.451697,0.183351,1.0,0.454793,0.190229,1.0,0.494651,0.248385,1.0,0.510753,0.248384,1.0,0.581229,0.226707,1.0,0.529109,0.207460,1.0,0.516633,0.213704,1.0,0.507449,0.210439,1.0,0.501939,0.211838,1.0,0.508499,0.191780,1.0,0.501939,0.176853,1.0,0.496429,0.173587,1.0,0.511122,0.189447,1.0,0.502989,0.180584,1.0,0.496166,0.181518,1.0,0.513222,0.187581,1.0,0.505350,0.180584,1.0,0.498528,0.182450,1.0,0.516108,0.185249,1.0,0.508761,0.181051,1.0,0.504563,0.183383,1.0,0.457054,0.469207,1.0,0.457054,0.469207,1.0,0.461678,0.679011,1.0,0.495398,0.807093,1.0,0.495398,0.807093,1.0,0.506075,0.466477,1.0,0.506075,0.466477,1.0,0.509143,0.665312,1.0,0.493829,0.834372,1.0,0.493829,0.834372,1.0
0.481563,0.452829,1.0,0.480416,0.297470,1.0,0.480799,0.349256,1.0,0.480034,0.245683,1.0,0.478579,0.182982,1.0,0.486262,0.196642,1.0,0.486262,0.196642,1.0,0.472420,0.196688,1.0,0.472420,0.196688,1.0,0.462415,0.245703,1.0,0.444796,0.245722,1.0,0.377378,0.204753,1.0,0.423341,0.182971,1.0,0.431190,0.188794,1.0,0.439815,0.198552,1.0,0.446350,0.205522,1.0,0.447918,0.188330,1.0,0.454975,0.184612,1.0,0.459941,0.173925,1.0,0.445565,0.180894,1.0,0.454452,0.177178,1.0,0.460202,0.172995,1.0,0.443735,0.173925,1.0,0.452361,0.170672,1.0,0.458372,0.170207,1.0,0.441383,0.166490,1.0,0.448440,0.166490,1.0,0.453929,0.167884,1.0,0.496912,0.241609,1.0,0.513790,0.237535,1.0,0.582797,0.213015,1.0,0.533677,0.202063,1.0,0.521859,0.205792,1.0,0.511273,0.206709,1.0,0.503271,0.204415,1.0,0.509208,0.186975,1.0,0.503787,0.177796,1.0,0.498366,0.173666,1.0,0.512048,0.184221,1.0,0.504561,0.175043,1.0,0.498108,0.171371,1.0,0.514630,0.180091,1.0,0.506885,0.173666,1.0,0.500431,0.172289,1.0,0.518760,0.175961,1.0,0.511532,0.173666,1.0,0.506627,0.173666,1.0,0.458522,0.455570,1.0,0.458522,0.455570,1.0,0.458560,0.668141,1.0,0.463223,0.790815,1.0,0.463223,0.790815,1.0,0.504603,0.450088,1.0,0.504603,0.450088,1.0,0.509186,0.659872,1.0,0.529094,0.812551,1.0,0.529094,0.812551,1.0
0.479284,0.461006,1.0,0.477598,0.291428,1.0,0.478160,0.347954,1.0,0.477036,0.234902,1.0,0.478580,0.183070,1.0,0.486266,0.196642,1.0,0.486266,0.196642,1.0,0.472399,0.193990,1.0,0.472399,0.193990,1.0,0.459400,0.233549,1.0,0.441765,0.232196,1.0,0.381946,0.188544,1.0,0.418745,0.166711,1.0,0.422823,0.168784,1.0,0.437767,0.157819,1.0,0.437293,0.160350,1.0,0.420451,0.164567,1.0,0.421874,0.167519,1.0,0.453898,0.174267,1.0,0.433023,0.197039,1.0,0.441326,0.173844,1.0,0.452237,0.173423,1.0,0.433023,0.197039,1.0,0.441326,0.175953,1.0,0.444884,0.177640,1.0,0.432074,0.189869,1.0,0.450577,0.167941,1.0,0.433023,0.198304,1.0,0.495418,0.236223,1.0,0.513801,0.237544,1.0,0.582786,0.204801,1.0,0.535302,0.188539,1.0,0.525396,0.206920,1.0,0.512300,0.210646,1.0,0.504180,0.212508,1.0,0.510467,0.199005,1.0,0.503918,0.178050,1.0,0.498156,0.175721,1.0,0.514133,0.188294,1.0,0.505752,0.177584,1.0,0.498418,0.174324,1.0,0.518062,0.182706,1.0,0.509681,0.174790,1.0,0.501822,0.171996,1.0,0.523042,0.177119,1.0,0.518324,0.173393,1.0,0.510205,0.172462,1.0,0.457032,0.463723,1.0,0.457032,0.463723,1.0,0.460135,0.665564,1.0,0.435702,0.801685,1.0,0.435702,0.801685,1.0,0.501535,0.458289,1.0,0.501535,0.458289,1.0,0.509244,0.665316,1.0,0.555167,0.815356,1.0,0.555167,0.815356,1.0
0.477015,0.463740,1.0,0.479324,0.300240,1.0,0.478554,0.354740,1.0,0.480093,0.245740,1.0,0.476240,0.181668,1.0,0.486181,0.199346,1.0,0.486181,0.199346,1.0,0.470860,0.199417,1.0,0.470860,0.199417,1.0,0.462465,0.245710,1.0,0.444838,0.245680,1.0,0.386556,0.180349,1.0,0.411070,0.161145,1.0,0.413852,0.157504,1.0,0.433062,0.167389,1.0,0.438622,0.143125,1.0,0.424468,0.151213,1.0,0.432556,0.166940,1.0,0.423204,0.149865,1.0,0.420930,0.163794,1.0,0.420171,0.167839,1.0,0.432304,0.167389,1.0,0.422193,0.191205,1.0,0.422699,0.179521,1.0,0.434073,0.167389,1.0,0.422699,0.197945,1.0,0.429270,0.201540,1.0,0.431545,0.199293,1.0,0.497713,0.244356,1.0,0.515333,0.242972,1.0,0.582771,0.191286,1.0,0.544417,0.188497,1.0,0.531760,0.206256,1.0,0.522062,0.212482,1.0,0.514247,0.217272,1.0,0.514786,0.200509,1.0,0.506973,0.188056,1.0,0.502662,0.178477,1.0,0.513978,0.188535,1.0,0.506973,0.182308,1.0,0.500238,0.178477,1.0,0.515594,0.181351,1.0,0.506973,0.178956,1.0,0.500507,0.177519,1.0,0.516133,0.175124,1.0,0.509129,0.173687,1.0,0.502662,0.175124,1.0,0.455536,0.463781,1.0,0.455536,0.463781,1.0,0.458648,0.673614,1.0,0.421742,0.815352,1.0,0.421742,0.815352,1.0,0.498495,0.463699,1.0,0.498495,0.463699,1.0,0.518348,0.668248,1.0,0.570573,0.831684,1.0,0.570573,0.831684,1.0
0.481585,0.466456,1.0,0.481591,0.302928,1.0,0.481589,0.357437,1.0,0.481593,0.248419,1.0,0.476284,0.184442,1.0,0.486180,0.193971,1.0,0.486180,0.193971,1.0,0.470874,0.193990,1.0,0.470874,0.193990,1.0,0.463984,0.248421,1.0,0.446376,0.248423,1.0,0.400353,0.191276,1.0,0.398851,0.166741,1.0,0.403298,0.171825,1.0,0.404328,0.174387,1.0,0.405769,0.154251,1.0,0.410506,0.135945,1.0,0.402063,0.145464,1.0,0.407211,0.146929,1.0,0.413801,0.150590,1.0,0.406387,0.145831,1.0,0.410506,0.149126,1.0,0.412771,0.148027,1.0,0.407417,0.156448,1.0,0.412359,0.156814,1.0,0.384352,0.180611,1.0,0.402474,0.142902,1.0,0.409477,0.168895,1.0,0.497697,0.248403,1.0,0.513800,0.248388,1.0,0.582844,0.185838,1.0,0.553646,0.191206,1.0,0.541167,0.207127,1.0,0.531219,0.213192,1.0,0.522693,0.216224,1.0,0.526953,0.195504,1.0,0.520132,0.186406,1.0,0.515299,0.181353,1.0,0.527240,0.186912,1.0,0.519847,0.182363,1.0,0.513593,0.177309,1.0,0.527807,0.180342,1.0,0.520416,0.176298,1.0,0.515015,0.174277,1.0,0.529510,0.174277,1.0,0.522406,0.172256,1.0,0.517857,0.171244,1.0,0.457093,0.466525,1.0,0.457093,0.466525,1.0,0.455559,0.681693,1.0,0.423396,0.817945,1.0,0.423396,0.817945,1.0,0.506078,0.466386,1.0,0.506078,0.466386,1.0,0.521396,0.668134,1.0,0.567406,0.831680,1.0,0.567406,0.831680,1.0
0.481585,0.466456,1.0,0.481591,0.302928,1.0,0.481589,0.357437,1.0,0.481593,0.248419,1.0,0.476284,0.184442,1.0,0.486180,0.193971,1.0,0.486180,0.193971,1.0,0.470874,0.193990,1.0,0.470874,0.193990,1.0,0.463984,0.248421,1.0,0.446376,0.248423,1.0,0.400353,0.191276,1.0,0.398851,0.166741,1.0,0.403298,0.171825,1.0,0.404328,0.174387,1.0,0.405769,0.154251,1.0,0.410506,0.135945,1.0,0.402063,0.145464,1.0,0.407211,0.146929,1.0,0.413801,0.150590,1.0,0.406387,0.145831,1.0,0.410506,0.149126,1.0,0.412771,0.148027,1.0,0.407417,0.156448,1.0,0.412359,0.156814,1.0,0.384352,0.180611,1.0,0.402474,0.142902,1.0,0.409477,0.168895,1.0,0.497697,0.248403,1.0,0.513800,0.248388,1.0,0.582844,0.185838,1.0,0.553646,0.191206,1.0,0.541167,0.207127,1.0,0.531219,0.213192,1.0,0.522693,0.216224,1.0,0.526953,0.195504,1.0,0.520132,0.186406,1.0,0.515299,0.181353,1.0,0.527240,0.186912,1.0,0.519847,0.182363,1.0,0.513593,0.177309,1.0,0.527807,0.180342,1.0,0.520416,0.176298,1.0,0.515015,0.174277,1.0,0.529510,0.174277,1.0,0.522406,0.172256,1.0,0.517857,0.171244,1.0,0.457093,0.466525,1.0,0.457093,0.466525,1.0,0.455559,0.681693,1.0,0.423396,0.817945,1.0,0.423396,0.817945,1.0,0.506078,0.466386,1.0,0.506078,0.466386,1.0,0.521396,0.668134,1.0,0.567406,0.831680,1.0,0.567406,0.831680,1.0
0.482317,0.462381,1.0,0.481738,0.299865,1.0,0.481931,0.354037,1.0,0.481545,0.245693,1.0,0.477043,0.181612,1.0,0.486189,0.183156,1.0,0.486189,0.183156,1.0,0.470858,0.185669,1.0,0.470858,0.185669,1.0,0.463954,0.245731,1.0,0.446364,0.245769,1.0,0.388104,0.204719,1.0,0.395743,0.177615,1.0,0.404931,0.187880,1.0,0.408839,0.185019,1.0,0.399643,0.189106,1.0,0.410218,0.176844,1.0,0.408609,0.180931,1.0,0.399183,0.183384,1.0,0.409989,0.170306,1.0,0.405850,0.171531,1.0,0.399413,0.182567,1.0,0.406540,0.162949,1.0,0.404701,0.163766,1.0,0.398723,0.185019,1.0,0.404701,0.163766,1.0,0.397344,0.154366,1.0,0.397344,0.184610,1.0,0.496907,0.244340,1.0,0.512269,0.242987,1.0,0.590411,0.204876,1.0,0.561302,0.204898,1.0,0.557344,0.198564,1.0,0.553182,0.182181,1.0,0.540401,0.176897,1.0,0.537427,0.206492,1.0,0.533266,0.190108,1.0,0.532375,0.179540,1.0,0.539802,0.203320,1.0,0.532375,0.199093,1.0,0.540401,0.180596,1.0,0.543370,0.203320,1.0,0.534156,0.196450,1.0,0.536240,0.185353,1.0,0.543667,0.204906,1.0,0.538911,0.185881,1.0,0.533266,0.189581,1.0,0.458542,0.463777,1.0,0.458542,0.463777,1.0,0.458672,0.670916,1.0,0.437122,0.804419,1.0,0.437122,0.804419,1.0,0.506092,0.460986,1.0,0.506092,0.460986,1.0,0.518399,0.665384,1.0,0.553656,0.837028,1.0,0.553656,0.837028,1.0
0.482367,0.454206,1.0,0.482914,0.291719,1.0,0.482731,0.345881,1.0,0.483096,0.237556,1.0,0.478540,0.169477,1.0,0.486218,0.177580,1.0,0.486218,0.177580,1.0,0.470912,0.180236,1.0,0.470912,0.180236,1.0,0.465460,0.240259,1.0,0.447823,0.242961,1.0,0.374335,0.229441,1.0,0.391191,0.207574,1.0,0.401903,0.194576,1.0,0.399464,0.187349,1.0,0.397567,0.192167,1.0,0.397838,0.194094,1.0,0.395669,0.192167,1.0,0.408949,0.218186,1.0,0.407866,0.190240,1.0,0.397567,0.217704,1.0,0.400819,0.220113,1.0,0.402445,0.190721,1.0,0.398651,0.220595,1.0,0.399735,0.220595,1.0,0.414641,0.216740,1.0,0.414370,0.215294,1.0,0.408679,0.219149,1.0,0.499226,0.234844,1.0,0.515355,0.232131,1.0,0.562865,0.226768,1.0,0.552141,0.183069,1.0,0.550521,0.172995,1.0,0.549297,0.170512,1.0,0.559599,0.191933,1.0,0.549474,0.168028,1.0,0.550870,0.182309,1.0,0.553490,0.186656,1.0,0.551745,0.172685,1.0,0.553312,0.171444,1.0,0.557333,0.186966,1.0,0.554885,0.171754,1.0,0.553490,0.170822,1.0,0.560125,0.189760,1.0,0.555583,0.171444,1.0,0.550521,0.182930,1.0,0.561349,0.195038,1.0,0.458587,0.455554,1.0,0.458587,0.455554,1.0,0.466266,0.668164,1.0,0.460128,0.798995,1.0,0.460128,0.798995,1.0,0.506147,0.452858,1.0,0.506147,0.452858,1.0,0.510741,0.665413,1.0,0.533724,0.837136,1.0,0.533724,0.837136,1.0
0.483134,0.458318,1.0,0.481980,0.298916,1.0,0.482364,0.352050,1.0,0.481595,0.245782,1.0,0.479316,0.172173,1.0,0.487727,0.174853,1.0,0.487727,0.174853,1.0,0.472341,0.174878,1.0,0.472341,0.174878,1.0,0.463196,0.247093,1.0,0.444796,0.248404,1.0,0.375867,0.289365,1.0,0.398816,0.248444,1.0,0.411721,0.230199,1.0,0.417854,0.229251,1.0,0.424519,0.240627,1.0,0.417587,0.226407,1.0,0.421586,0.255321,1.0,0.420520,0.255794,1.0,0.409588,0.227830,1.0,0.418120,0.278546,1.0,0.415720,0.253425,1.0,0.407455,0.234465,1.0,0.418120,0.297032,1.0,0.412255,0.254373,1.0,0.402923,0.238731,1.0,0.400790,0.248685,1.0,0.401056,0.250581,1.0,0.499238,0.243047,1.0,0.516881,0.240311,1.0,0.559812,0.251311,1.0,0.559807,0.226664,1.0,0.565375,0.254738,1.0,0.569031,0.230977,1.0,0.565849,0.215136,1.0,0.567599,0.228431,1.0,0.561234,0.208065,1.0,0.561078,0.207781,1.0,0.558052,0.220228,1.0,0.558849,0.222491,1.0,0.558693,0.223622,1.0,0.550578,0.229562,1.0,0.552010,0.225602,1.0,0.553281,0.219662,1.0,0.549146,0.231825,1.0,0.549302,0.232674,1.0,0.550417,0.239745,1.0,0.458645,0.461037,1.0,0.458645,0.461037,1.0,0.470832,0.676307,1.0,0.484730,0.809857,1.0,0.484730,0.809857,1.0,0.507622,0.455599,1.0,0.507622,0.455599,1.0,0.509261,0.665440,1.0,0.507598,0.839747,1.0,0.507598,0.839747,1.0
0.484633,0.466456,1.0,0.483527,0.305073,1.0,0.483896,0.358867,1.0,0.483158,0.251279,1.0,0.480075,0.178971,1.0,0.489263,0.177631,1.0,0.489263,0.177631,1.0,0.472394,0.177647,1.0,0.472394,0.177647,1.0,0.463997,0.252604,1.0,0.444836,0.253929,1.0,0.397235,0.354657,1.0,0.417209,0.283932,1.0,0.427058,0.281345,1.0,0.433302,0.258180,1.0,0.435745,0.250458,1.0,0.428959,0.245149,1.0,0.435745,0.243219,1.0,0.440904,0.247080,1.0,0.424886,0.247080,1.0,0.435203,0.254319,1.0,0.440632,0.262523,1.0,0.422443,0.251423,1.0,0.431673,0.258662,1.0,0.434117,0.266867,1.0,0.419729,0.258662,1.0,0.425158,0.259628,1.0,0.427873,0.265902,1.0,0.502300,0.251211,1.0,0.521443,0.251143,1.0,0.568974,0.346534,1.0,0.558234,0.289306,1.0,0.559687,0.276031,1.0,0.568099,0.264344,1.0,0.568625,0.250786,1.0,0.560214,0.241436,1.0,0.563630,0.236761,1.0,0.563896,0.248448,1.0,0.555740,0.243774,1.0,0.560214,0.238631,1.0,0.562844,0.242371,1.0,0.551271,0.251254,1.0,0.556531,0.241904,1.0,0.561792,0.243774,1.0,0.549432,0.252656,1.0,0.555740,0.238164,1.0,0.556531,0.241904,1.0,0.460124,0.469129,1.0,0.460124,0.469129,1.0,0.472474,0.679032,1.0,0.509179,0.826261,1.0,0.509179,0.826261,1.0,0.509143,0.463783,1.0,0.509143,0.463783,1.0,0.507581,0.668186,1.0,0.476983,0.861698,1.0,0.476983,0.861698,1.0
0.484710,0.473296,1.0,0.483569,0.320925,1.0,0.483949,0.371715,1.0,0.483189,0.270134,1.0,0.480837,0.183053,1.0,0.490808,0.180354,1.0,0.490808,0.180354,1.0,0.472453,0.182906,1.0,0.472453,0.182906,1.0,0.465523,0.270227,1.0,0.447857,0.270319,1.0,0.423372,0.384781,1.0,0.423283,0.302998,1.0,0.430329,0.285444,1.0,0.435889,0.270619,1.0,0.431845,0.246809,1.0,0.422496,0.253099,1.0,0.426539,0.241419,1.0,0.432604,0.240520,1.0,0.420474,0.255794,1.0,0.429824,0.245911,1.0,0.436899,0.248157,1.0,0.419716,0.259837,1.0,0.428560,0.252650,1.0,0.434878,0.256693,1.0,0.419969,0.265229,1.0,0.425781,0.262532,1.0,0.429824,0.262982,1.0,0.501579,0.267491,1.0,0.519969,0.264848,1.0,0.544458,0.379277,1.0,0.556625,0.294905,1.0,0.556854,0.277842,1.0,0.571760,0.251343,1.0,0.569990,0.250894,1.0,0.574031,0.270656,1.0,0.568729,0.249995,1.0,0.565948,0.254486,1.0,0.569234,0.280087,1.0,0.562411,0.260774,1.0,0.561906,0.264368,1.0,0.563677,0.287273,1.0,0.555844,0.267960,1.0,0.557609,0.269308,1.0,0.557609,0.292663,1.0,0.552307,0.293112,1.0,0.555339,0.293561,1.0,0.460199,0.474650,1.0,0.460199,0.474650,1.0,0.475476,0.681710,1.0,0.509217,0.834334,1.0,0.509217,0.834334,1.0,0.509220,0.471943,1.0,0.509220,0.471943,1.0,0.500037,0.681812,1.0,0.477010,0.861689,1.0,0.477010,0.861689,1.0
0.484710,0.473296,1.0,0.483569,0.320925,1.0,0.483949,0.371715,1.0,0.483189,0.270134,1.0,0.480837,0.183053,1.0,0.490808,0.180354,1.0,0.490808,0.180354,1.0,0.472453,0.182906,1.0,0.472453,0.182906,1.0,0.465523,0.270227,1.0,0.447857,0.270319,1.0,0.423372,0.384781,1.0,0.423283,0.302998,1.0,0.430329,0.285444,1.0,0.435889,0.270619,1.0,0.431845,0.246809,1.0,0.422496,0.253099,1.0,0.426539,0.241419,1.0,0.432604,0.240520,1.0,0.420474,0.255794,1.0,0.429824,0.245911,1.0,0.436899,0.248157,1.0,0.419716,0.259837,1.0,0.428560,0.252650,1.0,0.434878,0.256693,1.0,0.419969,0.265229,1.0,0.425781,0.262532,1.0,0.429824,0.262982,1.0,0.501579,0.267491,1.0,0.519969,0.264848,1.0,0.544458,0.379277,1.0,0.556625,0.294905,1.0,0.556854,0.277842,1.0,0.571760,0.251343,1.0,0.569990,0.250894,1.0,0.574031,0.270656,1.0,0.568729,0.249995,1.0,0.565948,0.254486,1.0,0.569234,0.280087,1.0,0.562411,0.260774,1.0,0.561906,0.264368,1.0,0.563677,0.287273,1.0,0.555844,0.267960,1.0,0.557609,0.269308,1.0,0.557609,0.292663,1.0,0.552307,0.293112,1.0,0.555339,0.293561,1.0,0.460199,0.474650,1.0,0.460199,0.474650,1.0,0.475476,0.681710,1.0,0.509217,0.834334,1.0,0.509217,0.834334,1.0,0.509220,0.471943,1.0,0.509220,0.471943,1.0,0.500037,0.681812,1.0,0.477010,0.861689,1.0,0.477010,0.861689,1.0
0.485482,0.470550,1.0,0.484835,0.320233,1.0,0.485051,0.370339,1.0,0.484620,0.270127,1.0,0.482357,0.181626,1.0,0.492329,0.177577,1.0,0.492329,0.177577,1.0,0.472470,0.177537,1.0,0.472470,0.177537,1.0,0.465501,0.271513,1.0,0.446383,0.272900,1.0,0.434133,0.390194,1.0,0.420289,0.294810,1.0,0.422614,0.279526,1.0,0.418921,0.263332,1.0,0.413752,0.239262,1.0,0.404643,0.240575,1.0,0.406858,0.234010,1.0,0.411043,0.234010,1.0,0.403166,0.247578,1.0,0.408828,0.238825,1.0,0.414982,0.237949,1.0,0.404396,0.257644,1.0,0.410797,0.244076,1.0,0.418429,0.245389,1.0,0.406612,0.266396,1.0,0.414736,0.254580,1.0,0.420152,0.257206,1.0,0.503023,0.266113,1.0,0.521427,0.262099,1.0,0.532141,0.382026,1.0,0.556766,0.297545,1.0,0.559130,0.289712,1.0,0.556125,0.289267,1.0,0.557125,0.289267,1.0,0.584437,0.282139,1.0,0.589948,0.282139,1.0,0.593708,0.281248,1.0,0.582182,0.283476,1.0,0.586193,0.271003,1.0,0.587193,0.264320,1.0,0.578672,0.282139,1.0,0.580677,0.271448,1.0,0.578672,0.277239,1.0,0.574667,0.277684,1.0,0.578927,0.271003,1.0,0.577922,0.272784,1.0,0.461695,0.471940,1.0,0.461695,0.471940,1.0,0.472352,0.678994,1.0,0.506158,0.818079,1.0,0.506158,0.818079,1.0,0.509269,0.469161,1.0,0.509269,0.469161,1.0,0.510758,0.668146,1.0,0.493803,0.839768,1.0,0.493803,0.839768,1.0
0.486984,0.465121,1.0,0.485200,0.310837,1.0,0.485794,0.362265,1.0,0.484605,0.259409,1.0,0.483122,0.170771,1.0,0.493875,0.166792,1.0,0.493875,0.166792,1.0,0.473974,0.166741,1.0,0.473974,0.166741,1.0,0.465492,0.263468,1.0,0.446380,0.267527,1.0,0.423400,0.379171,1.0,0.411063,0.281167,1.0,0.407973,0.261908,1.0,0.406256,0.245336,1.0,0.392763,0.229199,1.0,0.396197,0.247081,1.0,0.392272,0.223530,1.0,0.394480,0.227455,1.0,0.396688,0.245336,1.0,0.392518,0.223530,1.0,0.393499,0.229635,1.0,0.397179,0.246644,1.0,0.392272,0.226146,1.0,0.397179,0.240539,1.0,0.397915,0.250133,1.0,0.399877,0.239667,1.0,0.400613,0.240975,1.0,0.503016,0.256678,1.0,0.521427,0.253946,1.0,0.544458,0.368351,1.0,0.565906,0.278506,1.0,0.568724,0.270254,1.0,0.592292,0.269808,1.0,0.589786,0.258219,1.0,0.592292,0.268025,1.0,0.591792,0.255098,1.0,0.585526,0.256881,1.0,0.587781,0.272483,1.0,0.578505,0.253761,1.0,0.579255,0.256435,1.0,0.569979,0.277832,1.0,0.572484,0.257773,1.0,0.575745,0.262231,1.0,0.564464,0.272483,1.0,0.564464,0.272483,1.0,0.565714,0.273820,1.0,0.463232,0.466505,1.0,0.463232,0.466505,1.0,0.464739,0.673625,1.0,0.487720,0.804373,1.0,0.487720,0.804373,1.0,0.510736,0.463737,1.0,0.510736,0.463737,1.0,0.519957,0.662696,1.0,0.519907,0.826201,1.0,0.519907,0.826201,1.0
0.491567,0.458317,1.0,0.486452,0.307049,1.0,0.488157,0.357472,1.0,0.484746,0.256627,1.0,0.484639,0.174813,1.0,0.495377,0.169435,1.0,0.495377,0.169435,1.0,0.477018,0.166762,1.0,0.477018,0.166762,1.0,0.466296,0.259351,1.0,0.447845,0.262076,1.0,0.404933,0.357536,1.0,0.400337,0.251237,1.0,0.405881,0.240367,1.0,0.407646,0.224676,1.0,0.408402,0.213469,1.0,0.402855,0.189710,1.0,0.406637,0.187917,1.0,0.408150,0.195538,1.0,0.399072,0.195090,1.0,0.404872,0.195538,1.0,0.407898,0.204952,1.0,0.395794,0.203158,1.0,0.402855,0.200918,1.0,0.405629,0.209883,1.0,0.393777,0.213918,1.0,0.399577,0.205848,1.0,0.402603,0.209883,1.0,0.503873,0.253952,1.0,0.523000,0.251277,1.0,0.561354,0.354634,1.0,0.570500,0.256631,1.0,0.566620,0.243368,1.0,0.569938,0.225197,1.0,0.572750,0.214750,1.0,0.572750,0.222926,1.0,0.580417,0.210207,1.0,0.587057,0.203847,1.0,0.580161,0.225652,1.0,0.584505,0.211116,1.0,0.581182,0.213841,1.0,0.587828,0.233374,1.0,0.590635,0.222018,1.0,0.587313,0.224289,1.0,0.589359,0.229286,1.0,0.591656,0.218383,1.0,0.588849,0.204302,1.0,0.467797,0.463734,1.0,0.467797,0.463734,1.0,0.470845,0.670930,1.0,0.469351,0.793570,1.0,0.469351,0.793570,1.0,0.515338,0.452899,1.0,0.515338,0.452899,1.0,0.521396,0.662717,1.0,0.544365,0.804372,1.0,0.544365,0.804372,1.0
0.493837,0.471944,1.0,0.486975,0.316544,1.0,0.489262,0.368344,1.0,0.484688,0.264744,1.0,0.486194,0.182987,1.0,0.496862,0.180356,1.0,0.496862,0.180356,1.0,0.481554,0.180321,1.0,0.481554,0.180321,1.0,0.466317,0.267425,1.0,0.447947,0.270106,1.0,0.386541,0.335539,1.0,0.397258,0.242994,1.0,0.406048,0.227862,1.0,0.412877,0.217123,1.0,0.418917,0.204050,1.0,0.409725,0.190509,1.0,0.417604,0.184440,1.0,0.422594,0.194712,1.0,0.406310,0.189576,1.0,0.417079,0.186307,1.0,0.418917,0.202649,1.0,0.403684,0.192377,1.0,0.413927,0.190977,1.0,0.414715,0.203583,1.0,0.401321,0.199381,1.0,0.408675,0.194244,1.0,0.412089,0.204050,1.0,0.502323,0.259332,1.0,0.519959,0.253920,1.0,0.579651,0.332886,1.0,0.572089,0.242977,1.0,0.566594,0.218644,1.0,0.565229,0.201176,1.0,0.565771,0.186132,1.0,0.573417,0.189530,1.0,0.572870,0.176913,1.0,0.571776,0.169148,1.0,0.576693,0.194381,1.0,0.576146,0.179339,1.0,0.570687,0.187588,1.0,0.578875,0.201176,1.0,0.579422,0.183706,1.0,0.574234,0.190985,1.0,0.581604,0.206998,1.0,0.582698,0.195353,1.0,0.578328,0.194867,1.0,0.470817,0.474650,1.0,0.470817,0.474650,1.0,0.480085,0.676370,1.0,0.447861,0.799033,1.0,0.447861,0.799033,1.0,0.516857,0.469237,1.0,0.516857,0.469237,1.0,0.519871,0.668112,1.0,0.556792,0.801740,1.0,0.556792,0.801740,1.0
0.493869,0.478774,1.0,0.486995,0.322462,1.0,0.489286,0.374566,1.0,0.484704,0.270357,1.0,0.486994,0.194019,1.0,0.496940,0.193952,1.0,0.496940,0.193952,1.0,0.481634,0.191271,1.0,0.481634,0.191271,1.0,0.467055,0.271696,1.0,0.449407,0.273035,1.0,0.374285,0.311040,1.0,0.397295,0.229430,1.0,0.408041,0.228476,1.0,0.421221,0.216251,1.0,0.424372,0.222363,1.0,0.420361,0.198423,1.0,0.429244,0.205044,1.0,0.431249,0.219307,1.0,0.417209,0.196894,1.0,0.426378,0.208101,1.0,0.425519,0.222363,1.0,0.413485,0.199442,1.0,0.422080,0.208610,1.0,0.421507,0.220835,1.0,0.410046,0.204535,1.0,0.415777,0.209629,1.0,0.417209,0.217269,1.0,0.502335,0.270271,1.0,0.519966,0.270184,1.0,0.588891,0.300282,1.0,0.575109,0.229352,1.0,0.567432,0.224921,1.0,0.558844,0.216128,1.0,0.555979,0.206870,1.0,0.563531,0.197613,1.0,0.561708,0.185116,1.0,0.558323,0.196224,1.0,0.568474,0.196687,1.0,0.563271,0.184190,1.0,0.561188,0.196687,1.0,0.571599,0.199927,1.0,0.568474,0.184190,1.0,0.565094,0.196224,1.0,0.576026,0.199927,1.0,0.573682,0.189281,1.0,0.569516,0.195761,1.0,0.470861,0.482862,1.0,0.470861,0.482862,1.0,0.489243,0.687232,1.0,0.435581,0.826250,1.0,0.435581,0.826250,1.0,0.516878,0.474686,1.0,0.516878,0.474686,1.0,0.518372,0.684534,1.0,0.567401,0.815307,1.0,0.567401,0.815307,1.0
0.493869,0.478774,1.0,0.486995,0.322462,1.0,0.489286,0.374566,1.0,0.484704,0.270357,1.0,0.486994,0.194019,1.0,0.496940,0.193952,1.0,0.496940,0.193952,1.0,0.481634,0.191271,1.0,0.481634,0.191271,1.0,0.467055,0.271696,1.0,0.449407,0.273035,1.0,0.374285,0.311040,1.0,0.397295,0.229430,1.0,0.408041,0.228476,1.0,0.421221,0.216251,1.0,0.424372,0.222363,1.0,0.420361,0.198423,1.0,0.429244,0.205044,1.0,0.431249,0.219307,1.0,0.417209,0.196894,1.0,0.426378,0.208101,1.0,0.425519,0.222363,1.0,0.413485,0.199442,1.0,0.422080,0.208610,1.0,0.421507,0.220835,1.0,0.410046,0.204535,1.0,0.415777,0.209629,1.0,0.417209,0.217269,1.0,0.502335,0.270271,1.0,0.519966,0.270184,1.0,0.588891,0.300282,1.0,0.575109,0.229352,1.0,0.567432,0.224921,1.0,0.558844,0.216128,1.0,0.555979,0.206870,1.0,0.563531,0.197613,1.0,0.561708,0.185116,1.0,0.558323,0.196224,1.0,0.568474,0.196687,1.0,0.563271,0.184190,1.0,0.561188,0.196687,1.0,0.571599,0.199927,1.0,0.568474,0.184190,1.0,0.565094,0.196224,1.0,0.576026,0.199927,1.0,0.573682,0.189281,1.0,0.569516,0.195761,1.0,0.470861,0.482862,1.0,0.470861,0.482862,1.0,0.489243,0.687232,1.0,0.435581,0.826250,1.0,0.435581,0.826250,1.0,0.516878,0.474686,1.0,0.516878,0.474686,1.0,0.518372,0.684534,1.0,0.567401,0.815307,1.0,0.567401,0.815307,1.0
0.494647,0.499213,1.0,0.487215,0.341766,1.0,0.489692,0.394248,1.0,0.484737,0.289283,1.0,0.489252,0.210348,1.0,0.496950,0.207667,1.0,0.496950,0.207667,1.0,0.483071,0.207676,1.0,0.483071,0.207676,1.0,0.467095,0.290626,1.0,0.449454,0.291968,1.0,0.374315,0.281156,1.0,0.398859,0.229271,1.0,0.407512,0.236239,1.0,0.423552,0.225915,1.0,0.422998,0.249021,1.0,0.427699,0.220015,1.0,0.430465,0.235747,1.0,0.428806,0.248530,1.0,0.423275,0.217556,1.0,0.425487,0.236239,1.0,0.421339,0.246071,1.0,0.418297,0.217065,1.0,0.420233,0.231814,1.0,0.416638,0.241156,1.0,0.412490,0.217556,1.0,0.414702,0.228864,1.0,0.413043,0.236731,1.0,0.503113,0.286563,1.0,0.521490,0.283843,1.0,0.593490,0.272981,1.0,0.572089,0.226684,1.0,0.571125,0.232142,1.0,0.565292,0.231199,1.0,0.559724,0.228843,1.0,0.557604,0.212820,1.0,0.553099,0.209522,1.0,0.553365,0.212820,1.0,0.561849,0.204339,1.0,0.557870,0.199626,1.0,0.560786,0.213292,1.0,0.566089,0.199626,1.0,0.563172,0.196799,1.0,0.565292,0.209522,1.0,0.570594,0.196328,1.0,0.569005,0.194443,1.0,0.568740,0.202925,1.0,0.470905,0.501944,1.0,0.470905,0.501944,1.0,0.484733,0.706409,1.0,0.430998,0.837082,1.0,0.430998,0.837082,1.0,0.518390,0.496483,1.0,0.518390,0.496483,1.0,0.521547,0.703619,1.0,0.568974,0.826218,1.0,0.568974,0.826218,1.0
0.495366,0.511397,1.0,0.488499,0.348960,1.0,0.490788,0.403106,1.0,0.486210,0.294815,1.0,0.489248,0.222545,1.0,0.497007,0.218457,1.0,0.497007,0.218457,1.0,0.483071,0.215728,1.0,0.483071,0.215728,1.0,0.469336,0.297529,1.0,0.452462,0.300244,1.0,0.380443,0.270128,1.0,0.404985,0.226543,1.0,0.407384,0.244488,1.0,0.429097,0.229530,1.0,0.420412,0.245453,1.0,0.431540,0.225669,1.0,0.429369,0.238697,1.0,0.426926,0.247382,1.0,0.427197,0.217950,1.0,0.425841,0.232907,1.0,0.420684,0.243040,1.0,0.421769,0.214090,1.0,0.422583,0.223257,1.0,0.416341,0.236768,1.0,0.415527,0.213124,1.0,0.417698,0.217467,1.0,0.415798,0.227600,1.0,0.503852,0.293427,1.0,0.521495,0.292039,1.0,0.591932,0.248581,1.0,0.572068,0.213014,1.0,0.575359,0.211003,1.0,0.572625,0.199819,1.0,0.566880,0.195442,1.0,0.573448,0.202736,1.0,0.569344,0.195928,1.0,0.562776,0.192524,1.0,0.568797,0.208085,1.0,0.559224,0.197873,1.0,0.558401,0.199331,1.0,0.567427,0.214406,1.0,0.558130,0.209057,1.0,0.555667,0.207598,1.0,0.564969,0.222187,1.0,0.560318,0.220728,1.0,0.556760,0.218782,1.0,0.470859,0.512765,1.0,0.470859,0.512765,1.0,0.478517,0.709169,1.0,0.424917,0.842564,1.0,0.424917,0.842564,1.0,0.519873,0.510030,1.0,0.519873,0.510030,1.0,0.533672,0.706396,1.0,0.570479,0.837108,1.0,0.570479,0.837108,1.0
0.495371,0.496458,1.0,0.487340,0.341035,1.0,0.490017,0.392843,1.0,0.484664,0.289228,1.0,0.488473,0.208989,1.0,0.497024,0.207556,1.0,0.497024,0.207556,1.0,0.483090,0.207520,1.0,0.483090,0.207520,1.0,0.467803,0.290605,1.0,0.450943,0.291981,1.0,0.380454,0.270106,1.0,0.408050,0.213007,1.0,0.414007,0.225897,1.0,0.426082,0.218431,1.0,0.425819,0.228231,1.0,0.435007,0.206764,1.0,0.435269,0.216564,1.0,0.433694,0.224964,1.0,0.430544,0.200231,1.0,0.430807,0.213297,1.0,0.427394,0.223097,1.0,0.425294,0.196031,1.0,0.426869,0.204897,1.0,0.423194,0.217964,1.0,0.419519,0.196031,1.0,0.422144,0.199297,1.0,0.421094,0.210964,1.0,0.502281,0.283842,1.0,0.519898,0.278456,1.0,0.591974,0.243031,1.0,0.570458,0.204825,1.0,0.566651,0.220991,1.0,0.557875,0.220991,1.0,0.558422,0.217577,1.0,0.551016,0.205385,1.0,0.551292,0.205385,1.0,0.557052,0.207335,1.0,0.552938,0.196119,1.0,0.551839,0.191730,1.0,0.559521,0.202458,1.0,0.556776,0.187340,1.0,0.556776,0.185389,1.0,0.563911,0.194168,1.0,0.563359,0.182951,1.0,0.563089,0.181488,1.0,0.569120,0.186852,1.0,0.470859,0.499175,1.0,0.470859,0.499175,1.0,0.472416,0.703556,1.0,0.424896,0.839734,1.0,0.424896,0.839734,1.0,0.519882,0.493741,1.0,0.519882,0.493741,1.0,0.538344,0.692662,1.0,0.570453,0.834404,1.0,0.570453,0.834404,1.0
0.495375,0.473290,1.0,0.487400,0.318981,1.0,0.490058,0.370417,1.0,0.484741,0.267544,1.0,0.489228,0.194005,1.0,0.498461,0.188612,1.0,0.498461,0.188612,1.0,0.483115,0.188497,1.0,0.483115,0.188497,1.0,0.467852,0.268957,1.0,0.450963,0.270369,1.0,0.375879,0.270306,1.0,0.406503,0.204803,1.0,0.414957,0.201305,1.0,0.419639,0.200815,1.0,0.433687,0.196407,1.0,0.430657,0.175351,1.0,0.439747,0.184166,1.0,0.441399,0.193469,1.0,0.426801,0.173393,1.0,0.435615,0.184656,1.0,0.436166,0.197877,1.0,0.423495,0.176331,1.0,0.430657,0.185144,1.0,0.430932,0.198367,1.0,0.419364,0.179758,1.0,0.424046,0.186614,1.0,0.426250,0.195918,1.0,0.503128,0.262118,1.0,0.521516,0.256691,1.0,0.595073,0.234895,1.0,0.570458,0.185826,1.0,0.563427,0.193950,1.0,0.554672,0.191032,1.0,0.544005,0.184223,1.0,0.548109,0.169632,1.0,0.544005,0.177901,1.0,0.542635,0.183251,1.0,0.552484,0.166228,1.0,0.548380,0.174982,1.0,0.552214,0.183251,1.0,0.556589,0.163796,1.0,0.553031,0.169632,1.0,0.556313,0.181792,1.0,0.561240,0.164769,1.0,0.559052,0.165742,1.0,0.559052,0.179846,1.0,0.470886,0.474689,1.0,0.470886,0.474689,1.0,0.461728,0.684584,1.0,0.424904,0.837094,1.0,0.424904,0.837094,1.0,0.519864,0.471891,1.0,0.519864,0.471891,1.0,0.544521,0.681666,1.0,0.568896,0.823542,1.0,0.568896,0.823542,1.0
0.496131,0.466441,1.0,0.488708,0.304987,1.0,0.491182,0.358805,1.0,0.486233,0.251169,1.0,0.489292,0.181709,1.0,0.498518,0.180368,1.0,0.498518,0.180368,1.0,0.483151,0.180256,1.0,0.483151,0.180256,1.0,0.467841,0.252590,1.0,0.449448,0.254011,1.0,0.378885,0.278432,1.0,0.400374,0.191233,1.0,0.414323,0.182618,1.0,0.420124,0.175585,1.0,0.430409,0.163865,1.0,0.423289,0.151675,1.0,0.430937,0.149331,1.0,0.435684,0.156832,1.0,0.420652,0.150269,1.0,0.429618,0.153081,1.0,0.432519,0.167146,1.0,0.417223,0.152613,1.0,0.425662,0.156832,1.0,0.428300,0.170897,1.0,0.414586,0.156832,1.0,0.421443,0.160583,1.0,0.424344,0.169959,1.0,0.504630,0.249807,1.0,0.523026,0.248444,1.0,0.595115,0.245623,1.0,0.570453,0.180298,1.0,0.559406,0.175670,1.0,0.549354,0.162973,1.0,0.543802,0.156390,1.0,0.552000,0.143222,1.0,0.546448,0.147925,1.0,0.543802,0.153098,1.0,0.554911,0.142752,1.0,0.550943,0.146514,1.0,0.550943,0.159681,1.0,0.559141,0.145104,1.0,0.554646,0.148866,1.0,0.554646,0.161092,1.0,0.562844,0.148866,1.0,0.559141,0.152157,1.0,0.556760,0.161092,1.0,0.472351,0.469151,1.0,0.472351,0.469151,1.0,0.452502,0.676319,1.0,0.435592,0.834341,1.0,0.435592,0.834341,1.0,0.519911,0.463731,1.0,0.519911,0.463731,1.0,0.545943,0.662784,1.0,0.559807,0.834337,1.0,0.559807,0.834337,1.0
0.496131,0.466441,1.0,0.488708,0.304987,1.0,0.491182,0.358805,1.0,0.486233,0.251169,1.0,0.489292,0.181709,1.0,0.498518,0.180368,1.0,0.498518,0.180368,1.0,0.483151,0.180256,1.0,0.483151,0.180256,1.0,0.467841,0.252590,1.0,0.449448,0.254011,1.0,0.378885,0.278432,1.0,0.400374,0.191233,1.0,0.414323,0.182618,1.0,0.420124,0.175585,1.0,0.430409,0.163865,1.0,0.423289,0.151675,1.0,0.430937,0.149331,1.0,0.435684,0.156832,1.0,0.420652,0.150269,1.0,0.429618,0.153081,1.0,0.432519,0.167146,1.0,0.417223,0.152613,1.0,0.425662,0.156832,1.0,0.428300,0.170897,1.0,0.414586,0.156832,1.0,0.421443,0.160583,1.0,0.424344,0.169959,1.0,0.504630,0.249807,1.0,0.523026,0.248444,1.0,0.595115,0.245623,1.0,0.570453,0.180298,1.0,0.559406,0.175670,1.0,0.549354,0.162973,1.0,0.543802,0.156390,1.0,0.552000,0.143222,1.0,0.546448,0.147925,1.0,0.543802,0.153098,1.0,0.554911,0.142752,1.0,0.550943,0.146514,1.0,0.550943,0.159681,1.0,0.559141,0.145104,1.0,0.554646,0.148866,1.0,0.554646,0.161092,1.0,0.562844,0.148866,1.0,0.559141,0.152157,1.0,0.556760,0.161092,1.0,0.472351,0.469151,1.0,0.472351,0.469151,1.0,0.452502,0.676319,1.0,0.435592,0.834341,1.0,0.435592,0.834341,1.0,0.519911,0.463731,1.0,0.519911,0.463731,1.0,0.545943,0.662784,1.0,0.559807,0.834337,1.0,0.559807,0.834337,1.0
0.496178,0.463732,1.0,0.489850,0.304252,1.0,0.491960,0.357412,1.0,0.487741,0.251093,1.0,0.490063,0.177567,1.0,0.499983,0.166819,1.0,0.499983,0.166819,1.0,0.483195,0.166694,1.0,0.483195,0.166694,1.0,0.468583,0.251214,1.0,0.449424,0.251335,1.0,0.384989,0.292123,1.0,0.397363,0.191278,1.0,0.402450,0.178964,1.0,0.402701,0.157552,1.0,0.416502,0.162013,1.0,0.406716,0.155768,1.0,0.415999,0.142386,1.0,0.420265,0.134803,1.0,0.406716,0.153538,1.0,0.414996,0.140601,1.0,0.419512,0.138371,1.0,0.407468,0.157998,1.0,0.413992,0.139263,1.0,0.416752,0.144170,1.0,0.403454,0.159336,1.0,0.406465,0.144616,1.0,0.413240,0.144170,1.0,0.506894,0.249786,1.0,0.526047,0.248479,1.0,0.596563,0.251188,1.0,0.570547,0.174888,1.0,0.562479,0.166729,1.0,0.554458,0.155689,1.0,0.546953,0.140049,1.0,0.555234,0.135909,1.0,0.549542,0.129469,1.0,0.546693,0.132230,1.0,0.559891,0.132690,1.0,0.552385,0.130390,1.0,0.551094,0.140969,1.0,0.562995,0.133149,1.0,0.555490,0.132230,1.0,0.554974,0.143730,1.0,0.565323,0.139589,1.0,0.559630,0.136369,1.0,0.557042,0.143730,1.0,0.472402,0.466447,1.0,0.472402,0.466447,1.0,0.447832,0.662649,1.0,0.444833,0.837101,1.0,0.444833,0.837101,1.0,0.519955,0.461017,1.0,0.519955,0.461017,1.0,0.539849,0.662743,1.0,0.559818,0.826254,1.0,0.559818,0.826254,1.0
0.495388,0.465085,1.0,0.488527,0.304756,1.0,0.490814,0.358199,1.0,0.486240,0.251313,1.0,0.490072,0.176167,1.0,0.500020,0.166782,1.0,0.500020,0.166782,1.0,0.484623,0.164120,1.0,0.484623,0.164120,1.0,0.467818,0.253983,1.0,0.449397,0.256654,1.0,0.386609,0.313722,1.0,0.397229,0.204843,1.0,0.395819,0.189608,1.0,0.395560,0.171672,1.0,0.398406,0.155576,1.0,0.408236,0.170752,1.0,0.410564,0.159255,1.0,0.411858,0.147757,1.0,0.408236,0.174892,1.0,0.405649,0.151436,1.0,0.411858,0.145918,1.0,0.408236,0.176271,1.0,0.404873,0.150517,1.0,0.410305,0.146837,1.0,0.403838,0.177191,1.0,0.399440,0.157875,1.0,0.405390,0.149597,1.0,0.505386,0.251200,1.0,0.524531,0.251086,1.0,0.595089,0.270231,1.0,0.570552,0.174854,1.0,0.563766,0.166653,1.0,0.555391,0.137794,1.0,0.554078,0.131277,1.0,0.559318,0.130345,1.0,0.555391,0.126156,1.0,0.551724,0.125691,1.0,0.561411,0.130345,1.0,0.555391,0.131743,1.0,0.553557,0.140586,1.0,0.563766,0.133139,1.0,0.560365,0.130811,1.0,0.556698,0.144310,1.0,0.567693,0.136397,1.0,0.567693,0.134069,1.0,0.559839,0.141518,1.0,0.472357,0.466397,1.0,0.472357,0.466397,1.0,0.457063,0.668156,1.0,0.435620,0.842590,1.0,0.435620,0.842590,1.0,0.518419,0.463773,1.0,0.518419,0.463773,1.0,0.535307,0.665514,1.0,0.565932,0.834332,1.0,0.565932,0.834332,1.0
0.495415,0.482812,1.0,0.489639,0.321363,1.0,0.491565,0.375179,1.0,0.487714,0.267547,1.0,0.490817,0.184310,1.0,0.503036,0.180236,1.0,0.503036,0.180236,1.0,0.484661,0.177573,1.0,0.484661,0.177573,1.0,0.469332,0.268925,1.0,0.450949,0.270303,1.0,0.397205,0.327489,1.0,0.395782,0.221198,1.0,0.393606,0.208225,1.0,0.391168,0.186122,1.0,0.396288,0.173988,1.0,0.405063,0.184822,1.0,0.406526,0.170521,1.0,0.407745,0.162720,1.0,0.407501,0.190456,1.0,0.409939,0.174421,1.0,0.408476,0.166188,1.0,0.409207,0.195223,1.0,0.410670,0.180922,1.0,0.409451,0.173121,1.0,0.409695,0.201291,1.0,0.410670,0.187856,1.0,0.409695,0.182656,1.0,0.505375,0.264803,1.0,0.523036,0.262058,1.0,0.595010,0.286552,1.0,0.572099,0.182931,1.0,0.563198,0.170243,1.0,0.558625,0.152560,1.0,0.557552,0.142524,1.0,0.561849,0.140613,1.0,0.562120,0.135356,1.0,0.555938,0.131055,1.0,0.567229,0.146825,1.0,0.564807,0.136311,1.0,0.560240,0.142046,1.0,0.573141,0.155428,1.0,0.573141,0.143002,1.0,0.563198,0.146347,1.0,0.573948,0.161162,1.0,0.570990,0.145869,1.0,0.565885,0.146347,1.0,0.470937,0.482791,1.0,0.470937,0.482791,1.0,0.457060,0.676301,1.0,0.434066,0.850704,1.0,0.434066,0.850704,1.0,0.519893,0.482832,1.0,0.519893,0.482832,1.0,0.542880,0.681709,1.0,0.569016,0.837034,1.0,0.569016,0.837034,1.0
0.495365,0.485540,1.0,0.489635,0.326239,1.0,0.491545,0.379339,1.0,0.487725,0.273139,1.0,0.490847,0.187144,1.0,0.503079,0.185669,1.0,0.503079,0.185669,1.0,0.484707,0.183144,1.0,0.484707,0.183144,1.0,0.469341,0.278514,1.0,0.450958,0.283890,1.0,0.398846,0.335533,1.0,0.397280,0.229283,1.0,0.396519,0.219781,1.0,0.390670,0.202453,1.0,0.399443,0.184690,1.0,0.409191,0.192055,1.0,0.403099,0.185123,1.0,0.396763,0.185123,1.0,0.406023,0.192921,1.0,0.397981,0.185990,1.0,0.397981,0.178625,1.0,0.405292,0.201586,1.0,0.390183,0.191189,1.0,0.396519,0.185123,1.0,0.407242,0.201586,1.0,0.390183,0.189889,1.0,0.394570,0.185990,1.0,0.506120,0.271725,1.0,0.524516,0.270312,1.0,0.593453,0.294842,1.0,0.572109,0.183167,1.0,0.564792,0.174198,1.0,0.562089,0.157371,1.0,0.560198,0.143430,1.0,0.566958,0.148719,1.0,0.563713,0.147276,1.0,0.560198,0.141988,1.0,0.567500,0.153526,1.0,0.568578,0.149199,1.0,0.566146,0.149680,1.0,0.570474,0.159776,1.0,0.576693,0.155930,1.0,0.566958,0.153526,1.0,0.567229,0.158814,1.0,0.575068,0.156410,1.0,0.568036,0.154487,1.0,0.470841,0.485529,1.0,0.470841,0.485529,1.0,0.454031,0.673620,1.0,0.432551,0.847991,1.0,0.432551,0.847991,1.0,0.519889,0.485551,1.0,0.519889,0.485551,1.0,0.544495,0.676278,1.0,0.570474,0.834396,1.0,0.570474,0.834396,1.0
0.495353,0.484161,1.0,0.489671,0.327803,1.0,0.491565,0.379922,1.0,0.487778,0.275683,1.0,0.492314,0.187101,1.0,0.506081,0.183100,1.0,0.506081,0.183100,1.0,0.486188,0.183023,1.0,0.486188,0.183023,1.0,0.470116,0.279792,1.0,0.452455,0.283900,1.0,0.398852,0.335549,1.0,0.397342,0.229298,1.0,0.395868,0.220662,1.0,0.391482,0.201600,1.0,0.391969,0.188604,1.0,0.409271,0.195102,1.0,0.405372,0.176040,1.0,0.394650,0.186870,1.0,0.405859,0.196401,1.0,0.402448,0.178639,1.0,0.391726,0.194669,1.0,0.406347,0.201167,1.0,0.391726,0.189469,1.0,0.391969,0.195102,1.0,0.407565,0.202033,1.0,0.391726,0.185570,1.0,0.393919,0.184705,1.0,0.506907,0.273010,1.0,0.526036,0.270337,1.0,0.593500,0.300237,1.0,0.573557,0.188611,1.0,0.575839,0.178508,1.0,0.576646,0.163231,1.0,0.569661,0.156548,1.0,0.576912,0.161800,1.0,0.565099,0.150819,1.0,0.560802,0.145569,1.0,0.562948,0.164664,1.0,0.564026,0.153206,1.0,0.562682,0.152252,1.0,0.560266,0.163231,1.0,0.562682,0.157503,1.0,0.564026,0.162755,1.0,0.561339,0.161322,1.0,0.564026,0.147478,1.0,0.559995,0.144614,1.0,0.470840,0.482844,1.0,0.470840,0.482844,1.0,0.453985,0.681742,1.0,0.434055,0.842545,1.0,0.434055,0.842545,1.0,0.519866,0.485477,1.0,0.519866,0.485477,1.0,0.549036,0.668198,1.0,0.570495,0.834407,1.0,0.570495,0.834407,1.0
0.495353,0.484161,1.0,0.489671,0.327803,1.0,0.491565,0.379922,1.0,0.487778,0.275683,1.0,0.492314,0.187101,1.0,0.506081,0.183100,1.0,0.506081,0.183100,1.0,0.486188,0.183023,1.0,0.486188,0.183023,1.0,0.470116,0.279792,1.0,0.452455,0.283900,1.0,0.398852,0.335549,1.0,0.397342,0.229298,1.0,0.395868,0.220662,1.0,0.391482,0.201600,1.0,0.391969,0.188604,1.0,0.409271,0.195102,1.0,0.405372,0.176040,1.0,0.394650,0.186870,1.0,0.405859,0.196401,1.0,0.402448,0.178639,1.0,0.391726,0.194669,1.0,0.406347,0.201167,1.0,0.391726,0.189469,1.0,0.391969,0.195102,1.0,0.407565,0.202033,1.0,0.391726,0.185570,1.0,0.393919,0.184705,1.0,0.506907,0.273010,1.0,0.526036,0.270337,1.0,0.593500,0.300237,1.0,0.573557,0.188611,1.0,0.575839,0.178508,1.0,0.576646,0.163231,1.0,0.569661,0.156548,1.0,0.576912,0.161800,1.0,0.565099,0.150819,1.0,0.560802,0.145569,1.0,0.562948,0.164664,1.0,0.564026,0.153206,1.0,0.562682,0.152252,1.0,0.560266,0.163231,1.0,0.562682,0.157503,1.0,0.564026,0.162755,1.0,0.561339,0.161322,1.0,0.564026,0.147478,1.0,0.559995,0.144614,1.0,0.470840,0.482844,1.0,0.470840,0.482844,1.0,0.453985,0.681742,1.0,0.434055,0.842545,1.0,0.434055,0.842545,1.0,0.519866,0.485477,1.0,0.519866,0.485477,1.0,0.549036,0.668198,1.0,0.570495,0.834407,1.0,0.570495,0.834407,1.0
0.494614,0.481478,1.0,0.492915,0.329189,1.0,0.493481,0.379952,1.0,0.492349,0.278426,1.0,0.494611,0.192570,1.0,0.507580,0.185840,1.0,0.507580,0.185840,1.0,0.487730,0.185749,1.0,0.487730,0.185749,1.0,0.473935,0.282493,1.0,0.455520,0.286560,1.0,0.397257,0.327534,1.0,0.398778,0.218504,1.0,0.396779,0.208753,1.0,0.394778,0.186969,1.0,0.396029,0.173189,1.0,0.406031,0.187414,1.0,0.409782,0.168298,1.0,0.405031,0.166076,1.0,0.407781,0.191860,1.0,0.408532,0.176745,1.0,0.405781,0.172300,1.0,0.408031,0.200306,1.0,0.408532,0.186969,1.0,0.404281,0.183413,1.0,0.408031,0.206085,1.0,0.407031,0.194971,1.0,0.406531,0.193638,1.0,0.510745,0.275737,1.0,0.529141,0.273048,1.0,0.595068,0.292115,1.0,0.572068,0.185697,1.0,0.573625,0.173814,1.0,0.572318,0.156156,1.0,0.572318,0.154297,1.0,0.559510,0.144539,1.0,0.575714,0.156156,1.0,0.555589,0.140821,1.0,0.559510,0.148721,1.0,0.561599,0.148256,1.0,0.563167,0.155692,1.0,0.558984,0.158015,1.0,0.561339,0.151974,1.0,0.562906,0.156621,1.0,0.561339,0.156156,1.0,0.573885,0.153832,1.0,0.567349,0.150115,1.0,0.470827,0.482830,1.0,0.470827,0.482830,1.0,0.461666,0.681740,1.0,0.434055,0.839777,1.0,0.434055,0.839777,1.0,0.518400,0.480126,1.0,0.518400,0.480126,1.0,0.547490,0.678994,1.0,0.572068,0.815231,1.0,0.572068,0.815231,1.0
0.494600,0.491000,1.0,0.495146,0.341681,1.0,0.494964,0.391454,1.0,0.495329,0.291907,1.0,0.494620,0.206146,1.0,0.507617,0.204731,1.0,0.507617,0.204731,1.0,0.489246,0.202174,1.0,0.489246,0.202174,1.0,0.476981,0.291991,1.0,0.458633,0.292075,1.0,0.391145,0.313755,1.0,0.400394,0.202173,1.0,0.404222,0.193855,1.0,0.404222,0.175006,1.0,0.404222,0.155697,1.0,0.416118,0.172707,1.0,0.422841,0.154778,1.0,0.414566,0.145583,1.0,0.416377,0.171329,1.0,0.417411,0.149261,1.0,0.413532,0.145124,1.0,0.414566,0.171329,1.0,0.416635,0.148802,1.0,0.412756,0.147882,1.0,0.410946,0.170869,1.0,0.404740,0.152939,1.0,0.410946,0.148342,1.0,0.512972,0.289250,1.0,0.530615,0.286592,1.0,0.599641,0.275748,1.0,0.572057,0.182996,1.0,0.563974,0.175888,1.0,0.556349,0.165042,1.0,0.551266,0.151936,1.0,0.558380,0.141543,1.0,0.552792,0.134312,1.0,0.547703,0.136119,1.0,0.562193,0.140186,1.0,0.553552,0.135668,1.0,0.548724,0.141994,1.0,0.565500,0.141543,1.0,0.557620,0.141994,1.0,0.554568,0.152840,1.0,0.568802,0.143350,1.0,0.561943,0.146061,1.0,0.559651,0.152388,1.0,0.470852,0.491073,1.0,0.470852,0.491073,1.0,0.473933,0.687131,1.0,0.429462,0.848019,1.0,0.429462,0.848019,1.0,0.518348,0.490927,1.0,0.518348,0.490927,1.0,0.542896,0.692625,1.0,0.582714,0.818143,1.0,0.582714,0.818143,1.0
0.494653,0.500544,1.0,0.494052,0.346233,1.0,0.494252,0.397670,1.0,0.493852,0.294795,1.0,0.493887,0.211727,1.0,0.507583,0.210288,1.0,0.507583,0.210288,1.0,0.489285,0.210267,1.0,0.489285,0.210267,1.0,0.475454,0.294859,1.0,0.457057,0.294922,1.0,0.386589,0.292079,1.0,0.408053,0.185757,1.0,0.408402,0.188428,1.0,0.413581,0.177837,1.0,0.423423,0.144685,1.0,0.419279,0.148830,1.0,0.421610,0.145146,1.0,0.421869,0.177837,1.0,0.418243,0.164945,1.0,0.420056,0.148830,1.0,0.420833,0.159419,1.0,0.418761,0.164484,1.0,0.419279,0.159881,1.0,0.417466,0.160801,1.0,0.424200,0.169549,1.0,0.418761,0.174614,1.0,0.420056,0.176917,1.0,0.511491,0.293483,1.0,0.529130,0.292171,1.0,0.596583,0.264761,1.0,0.570458,0.182956,1.0,0.559552,0.178975,1.0,0.552698,0.171755,1.0,0.541021,0.152350,1.0,0.550156,0.139263,1.0,0.543557,0.144227,1.0,0.542036,0.156863,1.0,0.554979,0.139263,1.0,0.546349,0.146483,1.0,0.545589,0.160924,1.0,0.558786,0.139714,1.0,0.550411,0.147837,1.0,0.550156,0.160924,1.0,0.562849,0.145130,1.0,0.555490,0.148288,1.0,0.554219,0.157314,1.0,0.470902,0.504591,1.0,0.470902,0.504591,1.0,0.481540,0.700819,1.0,0.426430,0.853395,1.0,0.426430,0.853395,1.0,0.518404,0.496498,1.0,0.518404,0.496498,1.0,0.539839,0.698070,1.0,0.585823,0.834289,1.0,0.585823,0.834289,1.0
0.494595,0.499165,1.0,0.492875,0.343802,1.0,0.493448,0.395589,1.0,0.492302,0.292014,1.0,0.493083,0.210283,1.0,0.506161,0.207646,1.0,0.506161,0.207646,1.0,0.487743,0.207560,1.0,0.487743,0.207560,1.0,0.473166,0.291998,1.0,0.454029,0.291982,1.0,0.386582,0.272886,1.0,0.414140,0.188529,1.0,0.424236,0.195433,1.0,0.442276,0.173608,1.0,0.446285,0.183407,1.0,0.443529,0.169599,1.0,0.449542,0.186525,1.0,0.450043,0.198552,1.0,0.440772,0.169154,1.0,0.446535,0.188753,1.0,0.448039,0.201224,1.0,0.436514,0.172272,1.0,0.443028,0.187416,1.0,0.444280,0.200333,1.0,0.432505,0.175835,1.0,0.436012,0.187862,1.0,0.435761,0.193652,1.0,0.509190,0.291991,1.0,0.526078,0.291968,1.0,0.593531,0.245675,1.0,0.561328,0.188529,1.0,0.553620,0.190419,1.0,0.543271,0.190419,1.0,0.535318,0.189947,1.0,0.543010,0.175801,1.0,0.534786,0.186646,1.0,0.540620,0.205038,1.0,0.545927,0.171556,1.0,0.539823,0.185704,1.0,0.542745,0.202208,1.0,0.549109,0.169670,1.0,0.543802,0.179573,1.0,0.545396,0.197021,1.0,0.553620,0.167784,1.0,0.549906,0.179102,1.0,0.549109,0.188061,1.0,0.470798,0.501907,1.0,0.470798,0.501907,1.0,0.480053,0.698126,1.0,0.434006,0.845344,1.0,0.434006,0.845344,1.0,0.518391,0.496423,1.0,0.518391,0.496423,1.0,0.544516,0.684548,1.0,0.582833,0.831640,1.0,0.582833,0.831640,1.0
0.493097,0.485496,1.0,0.486809,0.324052,1.0,0.488905,0.377867,1.0,0.484713,0.270237,1.0,0.491560,0.196651,1.0,0.506120,0.199382,1.0,0.506120,0.199382,1.0,0.486219,0.193956,1.0,0.486219,0.193956,1.0,0.467842,0.270219,1.0,0.450971,0.270201,1.0,0.385029,0.267579,1.0,0.421879,0.218482,1.0,0.425570,0.217767,1.0,0.448073,0.225509,1.0,0.450493,0.242286,1.0,0.451219,0.220778,1.0,0.453639,0.251750,1.0,0.450977,0.264224,1.0,0.448557,0.219918,1.0,0.450009,0.248308,1.0,0.449283,0.261644,1.0,0.444686,0.219487,1.0,0.447347,0.245297,1.0,0.444928,0.256912,1.0,0.438879,0.221207,1.0,0.442266,0.237984,1.0,0.441056,0.245727,1.0,0.502344,0.270217,1.0,0.519976,0.270196,1.0,0.593464,0.240246,1.0,0.558193,0.226686,1.0,0.557344,0.249255,1.0,0.532172,0.240405,1.0,0.534661,0.282198,1.0,0.530792,0.244830,1.0,0.527750,0.263022,1.0,0.526089,0.277281,1.0,0.534938,0.242863,1.0,0.532448,0.255155,1.0,0.534661,0.278265,1.0,0.538813,0.236962,1.0,0.536875,0.247288,1.0,0.536875,0.263514,1.0,0.544620,0.229587,1.0,0.542130,0.240405,1.0,0.542406,0.251221,1.0,0.469368,0.488212,1.0,0.469368,0.488212,1.0,0.483084,0.687137,1.0,0.443265,0.837097,1.0,0.443265,0.837097,1.0,0.516826,0.482781,1.0,0.516826,0.482781,1.0,0.544380,0.679069,1.0,0.576656,0.820772,1.0,0.576656,0.820772,1.0
0.493097,0.485496,1.0,0.486809,0.324052,1.0,0.488905,0.377867,1.0,0.484713,0.270237,1.0,0.491560,0.196651,1.0,0.506120,0.199382,1.0,0.506120,0.199382,1.0,0.486219,0.193956,1.0,0.486219,0.193956,1.0,0.467842,0.270219,1.0,0.450971,0.270201,1.0,0.385029,0.267579,1.0,0.421879,0.218482,1.0,0.425570,0.217767,1.0,0.448073,0.225509,1.0,0.450493,0.242286,1.0,0.451219,0.220778,1.0,0.453639,0.251750,1.0,0.450977,0.264224,1.0,0.448557,0.219918,1.0,0.450009,0.248308,1.0,0.449283,0.261644,1.0,0.444686,0.219487,1.0,0.447347,0.245297,1.0,0.444928,0.256912,1.0,0.438879,0.221207,1.0,0.442266,0.237984,1.0,0.441056,0.245727,1.0,0.502344,0.270217,1.0,0.519976,0.270196,1.0,0.593464,0.240246,1.0,0.558193,0.226686,1.0,0.557344,0.249255,1.0,0.532172,0.240405,1.0,0.534661,0.282198,1.0,0.530792,0.244830,1.0,0.527750,0.263022,1.0,0.526089,0.277281,1.0,0.534938,0.242863,1.0,0.532448,0.255155,1.0,0.534661,0.278265,1.0,0.538813,0.236962,1.0,0.536875,0.247288,1.0,0.536875,0.263514,1.0,0.544620,0.229587,1.0,0.542130,0.240405,1.0,0.542406,0.251221,1.0,0.469368,0.488212,1.0,0.469368,0.488212,1.0,0.483084,0.687137,1.0,0.443265,0.837097,1.0,0.443265,0.837097,1.0,0.516826,0.482781,1.0,0.516826,0.482781,1.0,0.544380,0.679069,1.0,0.576656,0.820772,1.0,0.576656,0.820772,1.0
0.489297,0.469214,1.0,0.485818,0.309826,1.0,0.486978,0.362956,1.0,0.484658,0.256697,1.0,0.490050,0.188439,1.0,0.503061,0.185917,1.0,0.503061,0.185917,1.0,0.484712,0.185837,1.0,0.484712,0.185837,1.0,0.467055,0.258010,1.0,0.449451,0.259323,1.0,0.391144,0.286597,1.0,0.437190,0.264765,1.0,0.447519,0.266996,1.0,0.458578,0.292948,1.0,0.455260,0.318506,1.0,0.460126,0.289016,1.0,0.460569,0.301599,1.0,0.458357,0.321259,1.0,0.457693,0.289803,1.0,0.458799,0.301599,1.0,0.457030,0.322045,1.0,0.453048,0.289409,1.0,0.455260,0.303958,1.0,0.455039,0.322045,1.0,0.447740,0.292948,1.0,0.450173,0.309463,1.0,0.451058,0.318506,1.0,0.502300,0.255319,1.0,0.519942,0.253942,1.0,0.591927,0.248555,1.0,0.544474,0.273144,1.0,0.531984,0.294414,1.0,0.524318,0.312269,1.0,0.509254,0.236149,1.0,0.520885,0.312739,1.0,0.511897,0.242257,1.0,0.515862,0.244607,1.0,0.508726,0.256824,1.0,0.512690,0.244137,1.0,0.515333,0.244607,1.0,0.508726,0.257764,1.0,0.510840,0.252595,1.0,0.509519,0.256354,1.0,0.526698,0.312269,1.0,0.520885,0.313209,1.0,0.506347,0.267631,1.0,0.467810,0.471964,1.0,0.467810,0.471964,1.0,0.484699,0.673606,1.0,0.466277,0.837101,1.0,0.466277,0.837101,1.0,0.510783,0.466465,1.0,0.510783,0.466465,1.0,0.533708,0.681658,1.0,0.556667,0.820827,1.0,0.556667,0.820827,1.0
0.487740,0.467834,1.0,0.484296,0.309474,1.0,0.485444,0.362261,1.0,0.483148,0.256687,1.0,0.487766,0.184452,1.0,0.498513,0.183077,1.0,0.498513,0.183077,1.0,0.483129,0.183009,1.0,0.483129,0.183009,1.0,0.465497,0.259411,1.0,0.447845,0.262134,1.0,0.409578,0.332894,1.0,0.450949,0.332993,1.0,0.462779,0.331224,1.0,0.467032,0.350309,1.0,0.467843,0.351390,1.0,0.473514,0.353910,1.0,0.474932,0.354270,1.0,0.475134,0.352109,1.0,0.466627,0.356791,1.0,0.460348,0.360031,1.0,0.457512,0.362912,1.0,0.463386,0.358592,1.0,0.456094,0.359311,1.0,0.455892,0.361472,1.0,0.460551,0.371915,1.0,0.458120,0.371194,1.0,0.454069,0.363993,1.0,0.500776,0.253967,1.0,0.518404,0.251247,1.0,0.579687,0.294708,1.0,0.532115,0.319276,1.0,0.516656,0.329535,1.0,0.518834,0.324371,1.0,0.517382,0.308020,1.0,0.519803,0.313614,1.0,0.517382,0.315335,1.0,0.520771,0.365679,1.0,0.511573,0.352770,1.0,0.514236,0.356213,1.0,0.518108,0.308451,1.0,0.521740,0.322650,1.0,0.516656,0.357073,1.0,0.517624,0.341153,1.0,0.513752,0.358794,1.0,0.516172,0.358364,1.0,0.521255,0.368261,1.0,0.464772,0.471902,1.0,0.464772,0.471902,1.0,0.484751,0.673589,1.0,0.496872,0.828943,1.0,0.496872,0.828943,1.0,0.510709,0.463767,1.0,0.510709,0.463767,1.0,0.524510,0.668207,1.0,0.529135,0.809831,1.0,0.529135,0.809831,1.0
0.486969,0.477381,1.0,0.484135,0.322068,1.0,0.485080,0.373839,1.0,0.483191,0.270297,1.0,0.483902,0.187143,1.0,0.496884,0.183098,1.0,0.496884,0.183098,1.0,0.480079,0.182994,1.0,0.480079,0.182994,1.0,0.464783,0.271600,1.0,0.446376,0.272903,1.0,0.424914,0.381927,1.0,0.461655,0.420168,1.0,0.469013,0.418804,1.0,0.479500,0.436177,1.0,0.484029,0.453127,1.0,0.483791,0.441262,1.0,0.488319,0.464568,1.0,0.489511,0.481941,1.0,0.480215,0.446770,1.0,0.482837,0.474737,1.0,0.483791,0.484906,1.0,0.474018,0.450584,1.0,0.478308,0.477703,1.0,0.479500,0.484483,1.0,0.467106,0.454821,1.0,0.470920,0.472194,1.0,0.472827,0.481094,1.0,0.501562,0.270254,1.0,0.519934,0.270211,1.0,0.564406,0.357576,1.0,0.509149,0.357446,1.0,0.512554,0.349191,1.0,0.498209,0.350056,1.0,0.478514,0.395874,1.0,0.474867,0.391119,1.0,0.477298,0.395009,1.0,0.480946,0.391983,1.0,0.501370,0.362591,1.0,0.480946,0.375991,1.0,0.500154,0.373397,1.0,0.495778,0.369506,1.0,0.481918,0.375126,1.0,0.503315,0.372532,1.0,0.482648,0.374261,1.0,0.482405,0.374694,1.0,0.505503,0.370804,1.0,0.463219,0.482835,1.0,0.463219,0.482835,1.0,0.486228,0.679090,1.0,0.530625,0.837028,1.0,0.530625,0.837028,1.0,0.510720,0.471928,1.0,0.510720,0.471928,1.0,0.519962,0.684366,1.0,0.496981,0.785305,1.0,0.496981,0.785305,1.0
0.483927,0.484195,1.0,0.483299,0.340158,1.0,0.483509,0.388170,1.0,0.483090,0.292145,1.0,0.481590,0.196631,1.0,0.493896,0.188531,1.0,0.493896,0.188531,1.0,0.475464,0.188503,1.0,0.475464,0.188503,1.0,0.463197,0.293501,1.0,0.443304,0.294856,1.0,0.440236,0.422784,1.0,0.460234,0.499182,1.0,0.458643,0.507012,1.0,0.461813,0.504664,1.0,0.462078,0.504664,1.0,0.463663,0.504194,1.0,0.462870,0.509831,1.0,0.471061,0.514528,1.0,0.478459,0.536135,1.0,0.475289,0.533787,1.0,0.465777,0.547408,1.0,0.480308,0.534257,1.0,0.475553,0.538484,1.0,0.465777,0.548348,1.0,0.485065,0.528619,1.0,0.485593,0.528619,1.0,0.465777,0.556333,1.0,0.501523,0.292045,1.0,0.519955,0.291944,1.0,0.532125,0.420036,1.0,0.498481,0.362872,1.0,0.484429,0.357352,1.0,0.473439,0.361641,1.0,0.473975,0.360687,1.0,0.472903,0.360687,1.0,0.475583,0.360687,1.0,0.468882,0.363070,1.0,0.472098,0.361164,1.0,0.477996,0.359734,1.0,0.471830,0.365453,1.0,0.473707,0.362594,1.0,0.478532,0.360687,1.0,0.495152,0.356398,1.0,0.480141,0.361641,1.0,0.483893,0.364500,1.0,0.495956,0.356875,1.0,0.460177,0.488290,1.0,0.460177,0.488290,1.0,0.484752,0.681720,1.0,0.535271,0.839918,1.0,0.535271,0.839918,1.0,0.507678,0.480100,1.0,0.507678,0.480100,1.0,0.518385,0.684483,1.0,0.480092,0.798916,1.0,0.480092,0.798916,1.0
0.480864,0.485587,1.0,0.479121,0.352723,1.0,0.479702,0.397011,1.0,0.478541,0.308434,1.0,0.480111,0.206277,1.0,0.493873,0.199400,1.0,0.493873,0.199400,1.0,0.473933,0.196719,1.0,0.473933,0.196719,1.0,0.460149,0.309789,1.0,0.441757,0.311144,1.0,0.438664,0.425681,1.0,0.454000,0.529207,1.0,0.460779,0.550717,1.0,0.464215,0.565117,1.0,0.453170,0.573844,1.0,0.453906,0.592608,1.0,0.454888,0.592171,1.0,0.455133,0.590863,1.0,0.456115,0.589554,1.0,0.456360,0.590863,1.0,0.457097,0.591735,1.0,0.456360,0.589118,1.0,0.461515,0.594790,1.0,0.461270,0.594790,1.0,0.452679,0.596099,1.0,0.452433,0.594790,1.0,0.451942,0.602644,1.0,0.498446,0.305680,1.0,0.518352,0.302925,1.0,0.506141,0.425537,1.0,0.490787,0.338331,1.0,0.486748,0.318232,1.0,0.483151,0.320973,1.0,0.501394,0.317775,1.0,0.499082,0.282145,1.0,0.505248,0.283972,1.0,0.507561,0.274836,1.0,0.503707,0.294479,1.0,0.509873,0.299960,1.0,0.512186,0.311380,1.0,0.505505,0.305898,1.0,0.511415,0.300417,1.0,0.511672,0.311837,1.0,0.507818,0.307726,1.0,0.513214,0.319603,1.0,0.511672,0.325084,1.0,0.460168,0.488332,1.0,0.460168,0.488332,1.0,0.484617,0.684474,1.0,0.533677,0.837198,1.0,0.533677,0.837198,1.0,0.501560,0.482843,1.0,0.501560,0.482843,1.0,0.512236,0.687209,1.0,0.472439,0.815170,1.0,0.472439,0.815170,1.0
0.480864,0.485587,1.0,0.479121,0.352723,1.0,0.479702,0.397011,1.0,0.478541,0.308434,1.0,0.480111,0.206277,1.0,0.493873,0.199400,1.0,0.493873,0.199400,1.0,0.473933,0.196719,1.0,0.473933,0.196719,1.0,0.460149,0.309789,1.0,0.441757,0.311144,1.0,0.438664,0.425681,1.0,0.454000,0.529207,1.0,0.460779,0.550717,1.0,0.464215,0.565117,1.0,0.453170,0.573844,1.0,0.453906,0.592608,1.0,0.454888,0.592171,1.0,0.455133,0.590863,1.0,0.456115,0.589554,1.0,0.456360,0.590863,1.0,0.457097,0.591735,1.0,0.456360,0.589118,1.0,0.461515,0.594790,1.0,0.461270,0.594790,1.0,0.452679,0.596099,1.0,0.452433,0.594790,1.0,0.451942,0.602644,1.0,0.498446,0.305680,1.0,0.518352,0.302925,1.0,0.506141,0.425537,1.0,0.490787,0.338331,1.0,0.486748,0.318232,1.0,0.483151,0.320973,1.0,0.501394,0.317775,1.0,0.499082,0.282145,1.0,0.505248,0.283972,1.0,0.507561,0.274836,1.0,0.503707,0.294479,1.0,0.509873,0.299960,1.0,0.512186,0.311380,1.0,0.505505,0.305898,1.0,0.511415,0.300417,1.0,0.511672,0.311837,1.0,0.507818,0.307726,1.0,0.513214,0.319603,1.0,0.511672,0.325084,1.0,0.460168,0.488332,1.0,0.460168,0.488332,1.0,0.484617,0.684474,1.0,0.533677,0.837198,1.0,0.533677,0.837198,1.0,0.501560,0.482843,1.0,0.501560,0.482843,1.0,0.512236,0.687209,1.0,0.472439,0.815170,1.0,0.472439,0.815170,1.0
0.477765,0.486942,1.0,0.474937,0.344928,1.0,0.475880,0.392266,1.0,0.473995,0.297590,1.0,0.479308,0.199361,1.0,0.493835,0.185845,1.0,0.493835,0.185845,1.0,0.473936,0.185844,1.0,0.473936,0.185844,1.0,0.454835,0.300296,1.0,0.435676,0.303002,1.0,0.432499,0.422869,1.0,0.438674,0.529124,1.0,0.441703,0.543057,1.0,0.445912,0.555823,1.0,0.435759,0.566829,1.0,0.437245,0.558905,1.0,0.435759,0.581796,1.0,0.447398,0.580035,1.0,0.434026,0.568150,1.0,0.435759,0.581796,1.0,0.445417,0.587519,1.0,0.433779,0.571231,1.0,0.435512,0.583997,1.0,0.441455,0.585319,1.0,0.434026,0.571671,1.0,0.433531,0.585319,1.0,0.440464,0.597204,1.0,0.494648,0.296234,1.0,0.515301,0.294878,1.0,0.504601,0.420055,1.0,0.504584,0.316575,1.0,0.497002,0.287536,1.0,0.497785,0.318656,1.0,0.501182,0.320514,1.0,0.499876,0.314011,1.0,0.501966,0.318192,1.0,0.510065,0.319120,1.0,0.510588,0.307044,1.0,0.511633,0.311689,1.0,0.516597,0.311689,1.0,0.517642,0.297755,1.0,0.514246,0.294039,1.0,0.519732,0.297755,1.0,0.517642,0.284284,1.0,0.526005,0.292645,1.0,0.522604,0.289394,1.0,0.457054,0.488337,1.0,0.457054,0.488337,1.0,0.483131,0.681672,1.0,0.532224,0.837177,1.0,0.532224,0.837177,1.0,0.498477,0.485547,1.0,0.498477,0.485547,1.0,0.507608,0.684431,1.0,0.473915,0.812496,1.0,0.473915,0.812496,1.0
0.471633,0.469228,1.0,0.469930,0.322157,1.0,0.470497,0.371181,1.0,0.469362,0.273133,1.0,0.476231,0.176192,1.0,0.487748,0.164106,1.0,0.487748,0.164106,1.0,0.472399,0.163986,1.0,0.472399,0.163986,1.0,0.450936,0.278523,1.0,0.432509,0.283913,1.0,0.421754,0.384743,1.0,0.421817,0.490911,1.0,0.424516,0.498683,1.0,0.423542,0.499981,1.0,0.427193,0.512964,1.0,0.424272,0.503444,1.0,0.424759,0.516426,1.0,0.426463,0.516426,1.0,0.420378,0.537631,1.0,0.415509,0.526379,1.0,0.429871,0.535467,1.0,0.419160,0.540660,1.0,0.412831,0.531139,1.0,0.413074,0.532438,1.0,0.417456,0.541958,1.0,0.412831,0.534168,1.0,0.412588,0.544987,1.0,0.487751,0.271705,1.0,0.506139,0.270276,1.0,0.507701,0.384765,1.0,0.521396,0.291973,1.0,0.527807,0.269754,1.0,0.534187,0.261351,1.0,0.523552,0.230682,1.0,0.536552,0.242026,1.0,0.538443,0.240766,1.0,0.538443,0.245806,1.0,0.532297,0.239505,1.0,0.533005,0.245806,1.0,0.536078,0.253789,1.0,0.526151,0.241606,1.0,0.528750,0.241606,1.0,0.533948,0.256310,1.0,0.522609,0.244126,1.0,0.524500,0.236564,1.0,0.526859,0.252529,1.0,0.447852,0.471920,1.0,0.447852,0.471920,1.0,0.475515,0.662740,1.0,0.521474,0.820847,1.0,0.521474,0.820847,1.0,0.495413,0.466536,1.0,0.495413,0.466536,1.0,0.504565,0.665347,1.0,0.478564,0.796200,1.0,0.478564,0.796200,1.0
0.464741,0.451520,1.0,0.462478,0.301270,1.0,0.463232,0.351353,1.0,0.461723,0.251187,1.0,0.471599,0.153104,1.0,0.484679,0.142202,1.0,0.484679,0.142202,1.0,0.470796,0.142122,1.0,0.470796,0.142122,1.0,0.442573,0.253894,1.0,0.423422,0.256600,1.0,0.411050,0.349261,1.0,0.408048,0.439251,1.0,0.409331,0.447268,1.0,0.410778,0.460496,1.0,0.412431,0.475929,1.0,0.399617,0.470050,1.0,0.402097,0.487687,1.0,0.403544,0.491362,1.0,0.399203,0.471152,1.0,0.403751,0.489892,1.0,0.406437,0.495036,1.0,0.399823,0.473356,1.0,0.402510,0.487319,1.0,0.406644,0.491362,1.0,0.399617,0.473724,1.0,0.400650,0.484380,1.0,0.407057,0.482910,1.0,0.483157,0.249815,1.0,0.504590,0.248444,1.0,0.518334,0.352016,1.0,0.535307,0.259364,1.0,0.546943,0.233556,1.0,0.540240,0.216476,1.0,0.543813,0.209327,1.0,0.549625,0.208135,1.0,0.550964,0.218462,1.0,0.549625,0.220051,1.0,0.552750,0.240705,1.0,0.550964,0.241499,1.0,0.538453,0.239910,1.0,0.554318,0.240705,1.0,0.543813,0.248648,1.0,0.538229,0.254209,1.0,0.534432,0.249840,1.0,0.536667,0.254606,1.0,0.540240,0.258975,1.0,0.443260,0.455607,1.0,0.443260,0.455607,1.0,0.467819,0.654481,1.0,0.501527,0.809882,1.0,0.501527,0.809882,1.0,0.486222,0.447432,1.0,0.486222,0.447432,1.0,0.498497,0.646387,1.0,0.484706,0.788029,1.0,0.484706,0.788029,1.0
0.460121,0.441907,1.0,0.458982,0.282620,1.0,0.459361,0.335716,1.0,0.458602,0.229524,1.0,0.464765,0.138111,1.0,0.480044,0.128507,1.0,0.480044,0.128507,1.0,0.461647,0.123176,1.0,0.461647,0.123176,1.0,0.439424,0.233537,1.0,0.420247,0.237551,1.0,0.408044,0.308426,1.0,0.397230,0.382082,1.0,0.397153,0.400494,1.0,0.398898,0.408561,1.0,0.398200,0.420352,1.0,0.386681,0.417559,1.0,0.389997,0.430591,1.0,0.396280,0.431212,1.0,0.386157,0.422213,1.0,0.389473,0.434315,1.0,0.395233,0.433073,1.0,0.389647,0.424695,1.0,0.390520,0.433694,1.0,0.394709,0.432453,1.0,0.391742,0.425937,1.0,0.391917,0.432143,1.0,0.396455,0.432143,1.0,0.477770,0.228121,1.0,0.496938,0.226719,1.0,0.521448,0.327510,1.0,0.546021,0.248492,1.0,0.550505,0.239737,1.0,0.552771,0.243362,1.0,0.548464,0.243362,1.0,0.564099,0.199052,1.0,0.550276,0.243765,1.0,0.544839,0.239334,1.0,0.556167,0.204691,1.0,0.565911,0.213150,1.0,0.560698,0.215165,1.0,0.556167,0.206706,1.0,0.568177,0.215568,1.0,0.568630,0.233292,1.0,0.564099,0.200663,1.0,0.571125,0.230069,1.0,0.569766,0.233292,1.0,0.435639,0.444622,1.0,0.435639,0.444622,1.0,0.455534,0.640890,1.0,0.477032,0.796294,1.0,0.477032,0.796294,1.0,0.484603,0.439193,1.0,0.484603,0.439193,1.0,0.501560,0.627250,1.0,0.496986,0.777124,1.0,0.496986,0.777124,1.0
0.454011,0.420115,1.0,0.449464,0.272969,1.0,0.450979,0.322018,1.0,0.447948,0.223920,1.0,0.457802,0.125865,1.0,0.470914,0.120265,1.0,0.470914,0.120265,1.0,0.457040,0.120247,1.0,0.457040,0.120247,1.0,0.428777,0.225298,1.0,0.409605,0.226675,1.0,0.398809,0.278512,1.0,0.385086,0.341224,1.0,0.384569,0.358628,1.0,0.388735,0.369325,1.0,0.388735,0.380844,1.0,0.376084,0.378376,1.0,0.382409,0.391542,1.0,0.386112,0.389347,1.0,0.373770,0.386605,1.0,0.381175,0.398124,1.0,0.384723,0.394284,1.0,0.373615,0.390719,1.0,0.379786,0.400044,1.0,0.383027,0.397027,1.0,0.375158,0.392639,1.0,0.378707,0.398124,1.0,0.381021,0.396479,1.0,0.467847,0.221187,1.0,0.487747,0.218454,1.0,0.526052,0.311144,1.0,0.558219,0.251103,1.0,0.558630,0.243104,1.0,0.577854,0.241838,1.0,0.573823,0.219475,1.0,0.578568,0.239306,1.0,0.581177,0.205974,1.0,0.574771,0.215678,1.0,0.586161,0.229602,1.0,0.580943,0.210193,1.0,0.583786,0.222851,1.0,0.580943,0.238884,1.0,0.575005,0.214834,1.0,0.571682,0.221163,1.0,0.578094,0.240572,1.0,0.572396,0.217366,1.0,0.568839,0.222429,1.0,0.432557,0.425545,1.0,0.432557,0.425545,1.0,0.443239,0.640839,1.0,0.460156,0.799054,1.0,0.460156,0.799054,1.0,0.475464,0.414684,1.0,0.475464,0.414684,1.0,0.500020,0.619128,1.0,0.506123,0.771614,1.0,0.506123,0.771614,1.0
0.454011,0.420115,1.0,0.449464,0.272969,1.0,0.450979,0.322018,1.0,0.447948,0.223920,1.0,0.457802,0.125865,1.0,0.470914,0.120265,1.0,0.470914,0.120265,1.0,0.457040,0.120247,1.0,0.457040,0.120247,1.0,0.428777,0.225298,1.0,0.409605,0.226675,1.0,0.398809,0.278512,1.0,0.385086,0.341224,1.0,0.384569,0.358628,1.0,0.388735,0.369325,1.0,0.388735,0.380844,1.0,0.376084,0.378376,1.0,0.382409,0.391542,1.0,0.386112,0.389347,1.0,0.373770,0.386605,1.0,0.381175,0.398124,1.0,0.384723,0.394284,1.0,0.373615,0.390719,1.0,0.379786,0.400044,1.0,0.383027,0.397027,1.0,0.375158,0.392639,1.0,0.378707,0.398124,1.0,0.381021,0.396479,1.0,0.467847,0.221187,1.0,0.487747,0.218454,1.0,0.526052,0.311144,1.0,0.558219,0.251103,1.0,0.558630,0.243104,1.0,0.577854,0.241838,1.0,0.573823,0.219475,1.0,0.578568,0.239306,1.0,0.581177,0.205974,1.0,0.574771,0.215678,1.0,0.586161,0.229602,1.0,0.580943,0.210193,1.0,0.583786,0.222851,1.0,0.580943,0.238884,1.0,0.575005,0.214834,1.0,0.571682,0.221163,1.0,0.578094,0.240572,1.0,0.572396,0.217366,1.0,0.568839,0.222429,1.0,0.432557,0.425545,1.0,0.432557,0.425545,1.0,0.443239,0.640839,1.0,0.460156,0.799054,1.0,0.460156,0.799054,1.0,0.475464,0.414684,1.0,0.475464,0.414684,1.0,0.500020,0.619128,1.0,0.506123,0.771614,1.0,0.506123,0.771614,1.0
0.447899,0.414698,1.0,0.445576,0.267513,1.0,0.446350,0.316575,1.0,0.444801,0.218452,1.0,0.450177,0.124465,1.0,0.461664,0.117691,1.0,0.461664,0.117691,1.0,0.446399,0.117604,1.0,0.446399,0.117604,1.0,0.425640,0.219818,1.0,0.406478,0.221183,1.0,0.394236,0.270356,1.0,0.374386,0.322087,1.0,0.374154,0.333032,1.0,0.377600,0.346049,1.0,0.378892,0.362385,1.0,0.366114,0.354218,1.0,0.372861,0.368766,1.0,0.375733,0.364427,1.0,0.364247,0.360088,1.0,0.369559,0.370553,1.0,0.374010,0.367745,1.0,0.364103,0.359322,1.0,0.369703,0.368766,1.0,0.374010,0.367234,1.0,0.367262,0.356515,1.0,0.373148,0.368256,1.0,0.374154,0.366724,1.0,0.463969,0.214431,1.0,0.483136,0.210410,1.0,0.526078,0.294945,1.0,0.568917,0.270314,1.0,0.567542,0.264693,1.0,0.588464,0.248396,1.0,0.589401,0.250486,1.0,0.590578,0.262604,1.0,0.590109,0.253411,1.0,0.593635,0.276810,1.0,0.586818,0.274721,1.0,0.578828,0.264275,1.0,0.579063,0.273468,1.0,0.570599,0.269289,1.0,0.571776,0.270124,1.0,0.572479,0.276810,1.0,0.564958,0.270124,1.0,0.565661,0.268871,1.0,0.566839,0.282660,1.0,0.424890,0.420159,1.0,0.424890,0.420159,1.0,0.431035,0.640828,1.0,0.435615,0.812544,1.0,0.435615,0.812544,1.0,0.470908,0.409236,1.0,0.470908,0.409236,1.0,0.498485,0.618987,1.0,0.512268,0.766273,1.0,0.512268,0.766273,1.0
0.445578,0.431013,1.0,0.439240,0.273660,1.0,0.441353,0.326111,1.0,0.437127,0.221208,1.0,0.446381,0.120380,1.0,0.455555,0.120431,1.0,0.455555,0.120431,1.0,0.437206,0.120329,1.0,0.437206,0.120329,1.0,0.418759,0.221187,1.0,0.400391,0.221166,1.0,0.389658,0.270265,1.0,0.369721,0.313770,1.0,0.367387,0.332244,1.0,0.370732,0.340021,1.0,0.368803,0.348942,1.0,0.357223,0.337734,1.0,0.361855,0.351230,1.0,0.365329,0.350772,1.0,0.353620,0.341851,1.0,0.359024,0.356490,1.0,0.362884,0.356490,1.0,0.351948,0.346426,1.0,0.357352,0.358320,1.0,0.361083,0.358549,1.0,0.352463,0.350772,1.0,0.356580,0.358778,1.0,0.359410,0.359006,1.0,0.455544,0.219855,1.0,0.473961,0.218501,1.0,0.521531,0.294868,1.0,0.572031,0.313744,1.0,0.576703,0.317465,1.0,0.589870,0.307851,1.0,0.601625,0.315375,1.0,0.591750,0.301581,1.0,0.600687,0.309105,1.0,0.604682,0.322063,1.0,0.591984,0.301999,1.0,0.602099,0.319555,1.0,0.602802,0.335856,1.0,0.591984,0.307851,1.0,0.601859,0.322481,1.0,0.602802,0.335856,1.0,0.592458,0.305343,1.0,0.597161,0.327079,1.0,0.599042,0.336693,1.0,0.421832,0.436479,1.0,0.421832,0.436479,1.0,0.420284,0.646400,1.0,0.409605,0.815403,1.0,0.409605,0.815403,1.0,0.469324,0.425548,1.0,0.469324,0.425548,1.0,0.498454,0.619184,1.0,0.521406,0.771729,1.0,0.521406,0.771729,1.0
0.437914,0.444687,1.0,0.433859,0.283177,1.0,0.435210,0.337013,1.0,0.432507,0.229340,1.0,0.432522,0.143624,1.0,0.446369,0.139338,1.0,0.446369,0.139338,1.0,0.432495,0.136720,1.0,0.432495,0.136720,1.0,0.414893,0.229348,1.0,0.397279,0.229356,1.0,0.385083,0.289251,1.0,0.360560,0.308435,1.0,0.357988,0.315701,1.0,0.361274,0.322711,1.0,0.359303,0.332292,1.0,0.357068,0.312663,1.0,0.359171,0.320842,1.0,0.359434,0.323179,1.0,0.350102,0.317337,1.0,0.350102,0.319440,1.0,0.354045,0.333460,1.0,0.344844,0.320608,1.0,0.349839,0.337900,1.0,0.350890,0.338368,1.0,0.342346,0.327151,1.0,0.345632,0.339769,1.0,0.347210,0.340237,1.0,0.448627,0.229301,1.0,0.464747,0.229263,1.0,0.518364,0.308445,1.0,0.570464,0.368322,1.0,0.573339,0.382626,1.0,0.582036,0.391264,1.0,0.589703,0.405356,1.0,0.593031,0.376262,1.0,0.604536,0.389900,1.0,0.605302,0.403992,1.0,0.594563,0.379899,1.0,0.600958,0.409447,1.0,0.599167,0.419448,1.0,0.592005,0.388991,1.0,0.596609,0.411266,1.0,0.595844,0.423084,1.0,0.594563,0.400810,1.0,0.591240,0.411720,1.0,0.590984,0.417630,1.0,0.415673,0.450131,1.0,0.415673,0.450131,1.0,0.407994,0.662731,1.0,0.385092,0.820739,1.0,0.385092,0.820739,1.0,0.460154,0.439242,1.0,0.460154,0.439242,1.0,0.497007,0.632748,1.0,0.530682,0.777161,1.0,0.530682,0.777161,1.0
0.434059,0.467813,1.0,0.426051,0.305349,1.0,0.428720,0.359504,1.0,0.423382,0.251194,1.0,0.422617,0.165381,1.0,0.435697,0.161209,1.0,0.435697,0.161209,1.0,0.421810,0.158487,1.0,0.421810,0.158487,1.0,0.408033,0.252560,1.0,0.392685,0.253926,1.0,0.386597,0.332991,1.0,0.357430,0.308449,1.0,0.349452,0.301229,1.0,0.357521,0.298302,1.0,0.356533,0.306792,1.0,0.351922,0.290105,1.0,0.354886,0.305328,1.0,0.352745,0.312939,1.0,0.346487,0.289812,1.0,0.347640,0.305328,1.0,0.347146,0.312939,1.0,0.340559,0.293910,1.0,0.339407,0.304449,1.0,0.340889,0.310597,1.0,0.335619,0.297423,1.0,0.334631,0.305328,1.0,0.334467,0.310597,1.0,0.440222,0.249853,1.0,0.457063,0.248511,1.0,0.507672,0.327538,1.0,0.561312,0.414672,1.0,0.571016,0.427631,1.0,0.565979,0.408677,1.0,0.581677,0.424472,1.0,0.561240,0.436056,1.0,0.560354,0.433950,1.0,0.566870,0.433423,1.0,0.565979,0.452905,1.0,0.558578,0.452378,1.0,0.560948,0.449745,1.0,0.570422,0.466068,1.0,0.559760,0.463434,1.0,0.563609,0.458169,1.0,0.573089,0.473965,1.0,0.587302,0.465014,1.0,0.552354,0.471859,1.0,0.411068,0.471954,1.0,0.411068,0.471954,1.0,0.389618,0.679059,1.0,0.362130,0.834365,1.0,0.362130,0.834365,1.0,0.457049,0.463673,1.0,0.457049,0.463673,1.0,0.497004,0.640941,1.0,0.538344,0.788051,1.0,0.538344,0.788051,1.0
0.430229,0.488319,1.0,0.423901,0.328871,1.0,0.426010,0.382021,1.0,0.421791,0.275722,1.0,0.417212,0.196643,1.0,0.432546,0.183105,1.0,0.432546,0.183105,1.0,0.414163,0.182914,1.0,0.414163,0.182914,1.0,0.404973,0.275751,1.0,0.388155,0.275781,1.0,0.371254,0.343905,1.0,0.351318,0.297494,1.0,0.346122,0.267975,1.0,0.351346,0.295835,1.0,0.346583,0.269614,1.0,0.341667,0.284910,1.0,0.351193,0.296382,1.0,0.354727,0.295835,1.0,0.348427,0.293924,1.0,0.347966,0.295835,1.0,0.349964,0.297474,1.0,0.347505,0.291739,1.0,0.345815,0.296108,1.0,0.355188,0.289827,1.0,0.341514,0.286003,1.0,0.340438,0.286549,1.0,0.356417,0.292012,1.0,0.435616,0.274391,1.0,0.449441,0.273059,1.0,0.504579,0.357568,1.0,0.552125,0.444522,1.0,0.546687,0.464319,1.0,0.549469,0.486069,1.0,0.550021,0.489530,1.0,0.567542,0.478655,1.0,0.578104,0.486563,1.0,0.580328,0.488046,1.0,0.570875,0.468769,1.0,0.582000,0.475689,1.0,0.580885,0.478655,1.0,0.571708,0.459377,1.0,0.581719,0.467285,1.0,0.582276,0.469263,1.0,0.572266,0.451468,1.0,0.580328,0.458388,1.0,0.580328,0.460859,1.0,0.407999,0.491101,1.0,0.407999,0.491101,1.0,0.385088,0.687170,1.0,0.362048,0.837015,1.0,0.362048,0.837015,1.0,0.452458,0.485537,1.0,0.452458,0.485537,1.0,0.499994,0.660021,1.0,0.545979,0.793564,1.0,0.545979,0.793564,1.0
0.430229,0.488319,1.0,0.423901,0.328871,1.0,0.426010,0.382021,1.0,0.421791,0.275722,1.0,0.417212,0.196643,1.0,0.432546,0.183105,1.0,0.432546,0.183105,1.0,0.414163,0.182914,1.0,0.414163,0.182914,1.0,0.404973,0.275751,1.0,0.388155,0.275781,1.0,0.371254,0.343905,1.0,0.351318,0.297494,1.0,0.346122,0.267975,1.0,0.351346,0.295835,1.0,0.346583,0.269614,1.0,0.341667,0.284910,1.0,0.351193,0.296382,1.0,0.354727,0.295835,1.0,0.348427,0.293924,1.0,0.347966,0.295835,1.0,0.349964,0.297474,1.0,0.347505,0.291739,1.0,0.345815,0.296108,1.0,0.355188,0.289827,1.0,0.341514,0.286003,1.0,0.340438,0.286549,1.0,0.356417,0.292012,1.0,0.435616,0.274391,1.0,0.449441,0.273059,1.0,0.504579,0.357568,1.0,0.552125,0.444522,1.0,0.546687,0.464319,1.0,0.549469,0.486069,1.0,0.550021,0.489530,1.0,0.567542,0.478655,1.0,0.578104,0.486563,1.0,0.580328,0.488046,1.0,0.570875,0.468769,1.0,0.582000,0.475689,1.0,0.580885,0.478655,1.0,0.571708,0.459377,1.0,0.581719,0.467285,1.0,0.582276,0.469263,1.0,0.572266,0.451468,1.0,0.580328,0.458388,1.0,0.580328,0.460859,1.0,0.407999,0.491101,1.0,0.407999,0.491101,1.0,0.385088,0.687170,1.0,0.362048,0.837015,1.0,0.362048,0.837015,1.0,0.452458,0.485537,1.0,0.452458,0.485537,1.0,0.499994,0.660021,1.0,0.545979,0.793564,1.0,0.545979,0.793564,1.0
0.433320,0.488315,1.0,0.423518,0.334987,1.0,0.426785,0.386096,1.0,0.420251,0.283878,1.0,0.416426,0.200788,1.0,0.431009,0.185864,1.0,0.431009,0.185864,1.0,0.412642,0.185666,1.0,0.412642,0.185666,1.0,0.403429,0.286620,1.0,0.386607,0.289362,1.0,0.365096,0.362897,1.0,0.354386,0.302946,1.0,0.346405,0.277385,1.0,0.344695,0.260054,1.0,0.354957,0.261270,1.0,0.351707,0.288940,1.0,0.361969,0.271000,1.0,0.358548,0.266744,1.0,0.351365,0.288940,1.0,0.361969,0.278906,1.0,0.361114,0.277081,1.0,0.353760,0.277081,1.0,0.362141,0.279210,1.0,0.358720,0.286507,1.0,0.349826,0.299278,1.0,0.357522,0.300190,1.0,0.357865,0.300494,1.0,0.434102,0.279806,1.0,0.447953,0.275734,1.0,0.497004,0.360139,1.0,0.542932,0.447326,1.0,0.544943,0.466360,1.0,0.550693,0.481941,1.0,0.558359,0.488269,1.0,0.557266,0.484375,1.0,0.561646,0.487296,1.0,0.563563,0.484862,1.0,0.558911,0.474637,1.0,0.564115,0.475611,1.0,0.563292,0.473663,1.0,0.558635,0.467333,1.0,0.563563,0.470742,1.0,0.563016,0.470256,1.0,0.558911,0.458083,1.0,0.562198,0.459544,1.0,0.563839,0.460518,1.0,0.409557,0.491088,1.0,0.409557,0.491088,1.0,0.386544,0.684481,1.0,0.362031,0.837006,1.0,0.362031,0.837006,1.0,0.457084,0.485542,1.0,0.457084,0.485542,1.0,0.501534,0.662671,1.0,0.545953,0.796161,1.0,0.545953,0.796161,1.0
0.441719,0.477325,1.0,0.427920,0.322109,1.0,0.432519,0.373848,1.0,0.423320,0.270370,1.0,0.417225,0.185795,1.0,0.432572,0.177615,1.0,0.432572,0.177615,1.0,0.414171,0.169480,1.0,0.414171,0.169480,1.0,0.406461,0.274411,1.0,0.389603,0.278451,1.0,0.372811,0.376482,1.0,0.360417,0.308448,1.0,0.356327,0.299530,1.0,0.360133,0.295019,1.0,0.366900,0.281485,1.0,0.363517,0.276598,1.0,0.362459,0.257049,1.0,0.362248,0.265696,1.0,0.358653,0.275470,1.0,0.357384,0.255169,1.0,0.357807,0.266448,1.0,0.353789,0.272463,1.0,0.353155,0.258553,1.0,0.353789,0.266072,1.0,0.348714,0.271335,1.0,0.346811,0.261936,1.0,0.348291,0.264193,1.0,0.440188,0.266248,1.0,0.457056,0.262126,1.0,0.504618,0.338346,1.0,0.529141,0.428281,1.0,0.526661,0.447103,1.0,0.531125,0.465478,1.0,0.536057,0.478842,1.0,0.537703,0.463390,1.0,0.545219,0.472994,1.0,0.548276,0.478842,1.0,0.539818,0.458379,1.0,0.546396,0.467566,1.0,0.547802,0.472577,1.0,0.540521,0.452531,1.0,0.545687,0.458796,1.0,0.546630,0.465478,1.0,0.540755,0.446268,1.0,0.544047,0.452114,1.0,0.545927,0.455872,1.0,0.420247,0.485492,1.0,0.420247,0.485492,1.0,0.398894,0.668236,1.0,0.372722,0.823539,1.0,0.372722,0.823539,1.0,0.463191,0.469158,1.0,0.463191,0.469158,1.0,0.509141,0.657204,1.0,0.533724,0.793442,1.0,0.533724,0.793442,1.0
0.450165,0.465120,1.0,0.434654,0.308749,1.0,0.439824,0.360873,1.0,0.429484,0.256626,1.0,0.421077,0.178953,1.0,0.435575,0.163934,1.0,0.435575,0.163934,1.0,0.420253,0.161302,1.0,0.420253,0.161302,1.0,0.413367,0.263455,1.0,0.397250,0.270284,1.0,0.381964,0.379145,1.0,0.362038,0.313731,1.0,0.362640,0.253042,1.0,0.370511,0.278973,1.0,0.356389,0.264979,1.0,0.371206,0.276092,1.0,0.365649,0.306963,1.0,0.362408,0.306140,1.0,0.365418,0.271153,1.0,0.365186,0.290498,1.0,0.360324,0.301200,1.0,0.365418,0.264567,1.0,0.358472,0.279796,1.0,0.354305,0.285559,1.0,0.354536,0.271565,1.0,0.349905,0.272388,1.0,0.350832,0.272799,1.0,0.445592,0.252539,1.0,0.461699,0.248453,1.0,0.509159,0.313715,1.0,0.515331,0.403869,1.0,0.509444,0.418750,1.0,0.506362,0.430489,1.0,0.503721,0.444576,1.0,0.511645,0.435184,1.0,0.512966,0.446141,1.0,0.511425,0.453576,1.0,0.516708,0.434794,1.0,0.517808,0.441837,1.0,0.517588,0.448489,1.0,0.520449,0.430489,1.0,0.521990,0.439097,1.0,0.522870,0.446924,1.0,0.523974,0.425793,1.0,0.526172,0.434794,1.0,0.527495,0.441055,1.0,0.427935,0.469247,1.0,0.427935,0.469247,1.0,0.411055,0.665512,1.0,0.397231,0.831696,1.0,0.397231,0.831696,1.0,0.472394,0.460993,1.0,0.472394,0.460993,1.0,0.513807,0.654486,1.0,0.516855,0.774326,1.0,0.516855,0.774326,1.0
0.459350,0.459655,1.0,0.441564,0.305364,1.0,0.447492,0.356794,1.0,0.435635,0.253933,1.0,0.429463,0.176269,1.0,0.444764,0.161305,1.0,0.444764,0.161305,1.0,0.424899,0.161213,1.0,0.424899,0.161213,1.0,0.419518,0.262039,1.0,0.403401,0.270144,1.0,0.389618,0.384781,1.0,0.374294,0.297535,1.0,0.380847,0.296266,1.0,0.387137,0.273474,1.0,0.367543,0.270464,1.0,0.367543,0.272614,1.0,0.368027,0.271323,1.0,0.387621,0.267883,1.0,0.365124,0.291966,1.0,0.364398,0.284655,1.0,0.374316,0.294546,1.0,0.364398,0.291106,1.0,0.364640,0.291966,1.0,0.375284,0.294546,1.0,0.358835,0.288525,1.0,0.383992,0.255842,1.0,0.376252,0.313468,1.0,0.453260,0.251124,1.0,0.470886,0.248314,1.0,0.512291,0.294878,1.0,0.509131,0.392938,1.0,0.496828,0.404479,1.0,0.493000,0.429301,1.0,0.495027,0.443314,1.0,0.501783,0.430102,1.0,0.502008,0.450920,1.0,0.502683,0.458928,1.0,0.507187,0.428901,1.0,0.506512,0.446517,1.0,0.503809,0.444115,1.0,0.510791,0.425298,1.0,0.510115,0.436507,1.0,0.508539,0.435306,1.0,0.513944,0.419693,1.0,0.514619,0.427700,1.0,0.514394,0.431704,1.0,0.435639,0.466488,1.0,0.435639,0.466488,1.0,0.415667,0.662669,1.0,0.434139,0.812620,1.0,0.434139,0.812620,1.0,0.483060,0.452822,1.0,0.483060,0.452822,1.0,0.518380,0.662550,1.0,0.493899,0.747098,1.0,0.493899,0.747098,1.0
0.464730,0.465131,1.0,0.450883,0.314860,1.0,0.455498,0.364950,1.0,0.446267,0.264769,1.0,0.439421,0.180260,1.0,0.452497,0.166706,1.0,0.452497,0.166706,1.0,0.435664,0.163956,1.0,0.435664,0.163956,1.0,0.428662,0.268857,1.0,0.411057,0.272944,1.0,0.400329,0.392888,1.0,0.397325,0.294884,1.0,0.394830,0.278137,1.0,0.392825,0.257197,1.0,0.405105,0.244722,1.0,0.392324,0.257197,1.0,0.391071,0.264771,1.0,0.392825,0.271008,1.0,0.391572,0.260761,1.0,0.390068,0.261653,1.0,0.392574,0.276356,1.0,0.391822,0.262098,1.0,0.390820,0.272345,1.0,0.391572,0.275464,1.0,0.395081,0.284820,1.0,0.405356,0.242940,1.0,0.405606,0.242940,1.0,0.463153,0.257944,1.0,0.480040,0.251119,1.0,0.519921,0.292081,1.0,0.506146,0.381975,1.0,0.494337,0.399867,1.0,0.495405,0.415437,1.0,0.498823,0.423032,1.0,0.502455,0.418476,1.0,0.502028,0.428350,1.0,0.502455,0.433667,1.0,0.505659,0.416197,1.0,0.503950,0.426831,1.0,0.503523,0.433286,1.0,0.507795,0.412779,1.0,0.507795,0.421134,1.0,0.504805,0.428730,1.0,0.509718,0.409741,1.0,0.509504,0.418856,1.0,0.509077,0.423793,1.0,0.443253,0.469251,1.0,0.443253,0.469251,1.0,0.431042,0.665527,1.0,0.467775,0.826191,1.0,0.467775,0.826191,1.0,0.486208,0.461010,1.0,0.486208,0.461010,1.0,0.519878,0.662562,1.0,0.473933,0.719881,1.0,0.473933,0.719881,1.0
0.464730,0.465131,1.0,0.450883,0.314860,1.0,0.455498,0.364950,1.0,0.446267,0.264769,1.0,0.439421,0.180260,1.0,0.452497,0.166706,1.0,0.452497,0.166706,1.0,0.435664,0.163956,1.0,0.435664,0.163956,1.0,0.428662,0.268857,1.0,0.411057,0.272944,1.0,0.400329,0.392888,1.0,0.397325,0.294884,1.0,0.394830,0.278137,1.0,0.392825,0.257197,1.0,0.405105,0.244722,1.0,0.392324,0.257197,1.0,0.391071,0.264771,1.0,0.392825,0.271008,1.0,0.391572,0.260761,1.0,0.390068,0.261653,1.0,0.392574,0.276356,1.0,0.391822,0.262098,1.0,0.390820,0.272345,1.0,0.391572,0.275464,1.0,0.395081,0.284820,1.0,0.405356,0.242940,1.0,0.405606,0.242940,1.0,0.463153,0.257944,1.0,0.480040,0.251119,1.0,0.519921,0.292081,1.0,0.506146,0.381975,1.0,0.494337,0.399867,1.0,0.495405,0.415437,1.0,0.498823,0.423032,1.0,0.502455,0.418476,1.0,0.502028,0.428350,1.0,0.502455,0.433667,1.0,0.505659,0.416197,1.0,0.503950,0.426831,1.0,0.503523,0.433286,1.0,0.507795,0.412779,1.0,0.507795,0.421134,1.0,0.504805,0.428730,1.0,0.509718,0.409741,1.0,0.509504,0.418856,1.0,0.509077,0.423793,1.0,0.443253,0.469251,1.0,0.443253,0.469251,1.0,0.431042,0.665527,1.0,0.467775,0.826191,1.0,0.467775,0.826191,1.0,0.486208,0.461010,1.0,0.486208,0.461010,1.0,0.519878,0.662562,1.0,0.473933,0.719881,1.0,0.473933,0.719881,1.0
0.466254,0.459650,1.0,0.457082,0.305397,1.0,0.460140,0.356815,1.0,0.454025,0.253980,1.0,0.452463,0.177614,1.0,0.467820,0.169494,1.0,0.467820,0.169494,1.0,0.447970,0.164065,1.0,0.447970,0.164065,1.0,0.437932,0.259387,1.0,0.421839,0.264794,1.0,0.411099,0.384749,1.0,0.418723,0.292001,1.0,0.418983,0.280108,1.0,0.413970,0.251145,1.0,0.421991,0.236886,1.0,0.411965,0.246690,1.0,0.411213,0.249808,1.0,0.427755,0.252928,1.0,0.415724,0.254710,1.0,0.411965,0.250255,1.0,0.419735,0.237778,1.0,0.416477,0.261840,1.0,0.420988,0.257830,1.0,0.422241,0.257830,1.0,0.416978,0.264068,1.0,0.425499,0.263176,1.0,0.427755,0.252482,1.0,0.470108,0.252533,1.0,0.486192,0.251087,1.0,0.527573,0.289292,1.0,0.509233,0.379184,1.0,0.500332,0.391700,1.0,0.497701,0.406900,1.0,0.496824,0.418983,1.0,0.502524,0.413137,1.0,0.506032,0.422101,1.0,0.506471,0.420931,1.0,0.507567,0.409629,1.0,0.507786,0.415865,1.0,0.507786,0.413526,1.0,0.510636,0.403782,1.0,0.508224,0.407290,1.0,0.507786,0.406121,1.0,0.512171,0.399106,1.0,0.510198,0.397936,1.0,0.510198,0.397936,1.0,0.446258,0.466463,1.0,0.446258,0.466463,1.0,0.447900,0.670918,1.0,0.470931,0.834329,1.0,0.470931,0.834329,1.0,0.486251,0.452837,1.0,0.486251,0.452837,1.0,0.521495,0.662606,1.0,0.472460,0.709137,1.0,0.472460,0.709137,1.0
0.471699,0.463777,1.0,0.467619,0.304243,1.0,0.468979,0.357421,1.0,0.466259,0.251065,1.0,0.467795,0.173586,1.0,0.483128,0.164127,1.0,0.483128,0.164127,1.0,0.466301,0.161322,1.0,0.466301,0.161322,1.0,0.449412,0.251194,1.0,0.432565,0.251324,1.0,0.420291,0.379317,1.0,0.434027,0.291914,1.0,0.433201,0.302605,1.0,0.429449,0.242113,1.0,0.432665,0.245447,1.0,0.441239,0.234492,1.0,0.430521,0.245923,1.0,0.439631,0.240684,1.0,0.439363,0.256879,1.0,0.431057,0.247353,1.0,0.435612,0.270216,1.0,0.438023,0.254497,1.0,0.433468,0.252592,1.0,0.436683,0.269263,1.0,0.418197,0.294031,1.0,0.430253,0.244019,1.0,0.444185,0.261166,1.0,0.482375,0.248391,1.0,0.498491,0.245717,1.0,0.533682,0.278406,1.0,0.519947,0.365665,1.0,0.511883,0.383011,1.0,0.514584,0.404432,1.0,0.511052,0.414035,1.0,0.512714,0.407757,1.0,0.508974,0.415513,1.0,0.506066,0.413667,1.0,0.511260,0.407019,1.0,0.509390,0.413667,1.0,0.506481,0.411450,1.0,0.513337,0.407019,1.0,0.510429,0.412189,1.0,0.506481,0.409234,1.0,0.515000,0.406649,1.0,0.512922,0.414405,1.0,0.512091,0.418837,1.0,0.447949,0.466494,1.0,0.447949,0.466494,1.0,0.447899,0.668164,1.0,0.470864,0.831649,1.0,0.470864,0.831649,1.0,0.495448,0.461059,1.0,0.495448,0.461059,1.0,0.527620,0.660004,1.0,0.484644,0.728036,1.0,0.484644,0.728036,1.0
0.476270,0.452892,1.0,0.481372,0.291393,1.0,0.479671,0.345226,1.0,0.483073,0.237560,1.0,0.484665,0.164018,1.0,0.497009,0.155756,1.0,0.497009,0.155756,1.0,0.483131,0.147630,1.0,0.483131,0.147630,1.0,0.465451,0.241615,1.0,0.447828,0.245669,1.0,0.423430,0.363022,1.0,0.446353,0.308415,1.0,0.448495,0.299115,1.0,0.449270,0.264233,1.0,0.459597,0.269741,1.0,0.461404,0.252300,1.0,0.465277,0.276166,1.0,0.463469,0.281215,1.0,0.459855,0.284887,1.0,0.455208,0.287641,1.0,0.464244,0.278461,1.0,0.459597,0.284428,1.0,0.462695,0.283969,1.0,0.463985,0.280756,1.0,0.460887,0.287181,1.0,0.466051,0.273412,1.0,0.461662,0.272035,1.0,0.499196,0.233521,1.0,0.515320,0.229481,1.0,0.538339,0.272884,1.0,0.527620,0.362873,1.0,0.519021,0.374572,1.0,0.514803,0.388070,1.0,0.512694,0.397069,1.0,0.517334,0.391444,1.0,0.513959,0.396693,1.0,0.512061,0.405693,1.0,0.520497,0.392944,1.0,0.519654,0.399319,1.0,0.515014,0.410192,1.0,0.522818,0.394069,1.0,0.522818,0.401193,1.0,0.519443,0.411317,1.0,0.524927,0.394819,1.0,0.524714,0.403443,1.0,0.521974,0.411692,1.0,0.455521,0.455604,1.0,0.455521,0.455604,1.0,0.435642,0.659916,1.0,0.460094,0.812497,1.0,0.460094,0.812497,1.0,0.497019,0.450180,1.0,0.497019,0.450180,1.0,0.533682,0.651784,1.0,0.506153,0.752644,1.0,0.506153,0.752644,1.0
0.483917,0.454220,1.0,0.492518,0.291707,1.0,0.489651,0.345878,1.0,0.495385,0.237536,1.0,0.506161,0.142260,1.0,0.515300,0.142301,1.0,0.515300,0.142301,1.0,0.497022,0.142219,1.0,0.497022,0.142219,1.0,0.477777,0.241640,1.0,0.460169,0.245744,1.0,0.435572,0.357492,1.0,0.457046,0.335617,1.0,0.450018,0.318273,1.0,0.452990,0.350408,1.0,0.459428,0.344685,1.0,0.455466,0.346886,1.0,0.449523,0.349968,1.0,0.450514,0.349528,1.0,0.456952,0.330158,1.0,0.459428,0.329278,1.0,0.450018,0.348207,1.0,0.456209,0.330599,1.0,0.459428,0.330158,1.0,0.459180,0.333240,1.0,0.449771,0.347327,1.0,0.448780,0.349528,1.0,0.449276,0.349528,1.0,0.512245,0.233458,1.0,0.529104,0.229381,1.0,0.541391,0.294739,1.0,0.536828,0.357499,1.0,0.530099,0.361186,1.0,0.526760,0.361186,1.0,0.526615,0.376663,1.0,0.528792,0.374857,1.0,0.524437,0.385175,1.0,0.522990,0.389818,1.0,0.532562,0.379243,1.0,0.528214,0.393171,1.0,0.524875,0.401168,1.0,0.536047,0.382080,1.0,0.532422,0.398588,1.0,0.528068,0.407616,1.0,0.539385,0.382854,1.0,0.538516,0.383885,1.0,0.533870,0.403231,1.0,0.460147,0.450170,1.0,0.460147,0.450170,1.0,0.426455,0.646383,1.0,0.437134,0.796335,1.0,0.437134,0.796335,1.0,0.507686,0.458269,1.0,0.507686,0.458269,1.0,0.541391,0.654506,1.0,0.532250,0.782653,1.0,0.532250,0.782653,1.0
0.494593,0.458294,1.0,0.503271,0.298865,1.0,0.500378,0.352008,1.0,0.506164,0.245722,1.0,0.520700,0.142309,1.0,0.530609,0.142336,1.0,0.530609,0.142336,1.0,0.510791,0.142281,1.0,0.510791,0.142281,1.0,0.489319,0.247114,1.0,0.472474,0.248506,1.0,0.447874,0.349266,1.0,0.450957,0.382069,1.0,0.453335,0.359045,1.0,0.460135,0.395311,1.0,0.461721,0.397326,1.0,0.449255,0.413846,1.0,0.445629,0.415861,1.0,0.452428,0.416667,1.0,0.450615,0.413041,1.0,0.450842,0.424323,1.0,0.451068,0.425531,1.0,0.449255,0.413444,1.0,0.450615,0.429158,1.0,0.451295,0.423920,1.0,0.447215,0.416667,1.0,0.442909,0.418279,1.0,0.445629,0.417473,1.0,0.520704,0.241624,1.0,0.535245,0.237526,1.0,0.546073,0.319393,1.0,0.550609,0.357450,1.0,0.546203,0.339466,1.0,0.538917,0.354582,1.0,0.537177,0.366306,1.0,0.552625,0.360444,1.0,0.546724,0.373711,1.0,0.544292,0.385435,1.0,0.555052,0.365690,1.0,0.550193,0.379573,1.0,0.546203,0.385744,1.0,0.556094,0.370934,1.0,0.552797,0.381732,1.0,0.548458,0.383893,1.0,0.556271,0.374019,1.0,0.554359,0.382967,1.0,0.551234,0.382967,1.0,0.470807,0.450194,1.0,0.470807,0.450194,1.0,0.426392,0.643545,1.0,0.406468,0.798923,1.0,0.406468,0.798923,1.0,0.518380,0.466395,1.0,0.518380,0.466395,1.0,0.545974,0.660019,1.0,0.558187,0.809823,1.0,0.558187,0.809823,1.0
0.494593,0.458294,1.0,0.503271,0.298865,1.0,0.500378,0.352008,1.0,0.506164,0.245722,1.0,0.520700,0.142309,1.0,0.530609,0.142336,1.0,0.530609,0.142336,1.0,0.510791,0.142281,1.0,0.510791,0.142281,1.0,0.489319,0.247114,1.0,0.472474,0.248506,1.0,0.447874,0.349266,1.0,0.450957,0.382069,1.0,0.453335,0.359045,1.0,0.460135,0.395311,1.0,0.461721,0.397326,1.0,0.449255,0.413846,1.0,0.445629,0.415861,1.0,0.452428,0.416667,1.0,0.450615,0.413041,1.0,0.450842,0.424323,1.0,0.451068,0.425531,1.0,0.449255,0.413444,1.0,0.450615,0.429158,1.0,0.451295,0.423920,1.0,0.447215,0.416667,1.0,0.442909,0.418279,1.0,0.445629,0.417473,1.0,0.520704,0.241624,1.0,0.535245,0.237526,1.0,0.546073,0.319393,1.0,0.550609,0.357450,1.0,0.546203,0.339466,1.0,0.538917,0.354582,1.0,0.537177,0.366306,1.0,0.552625,0.360444,1.0,0.546724,0.373711,1.0,0.544292,0.385435,1.0,0.555052,0.365690,1.0,0.550193,0.379573,1.0,0.546203,0.385744,1.0,0.556094,0.370934,1.0,0.552797,0.381732,1.0,0.548458,0.383893,1.0,0.556271,0.374019,1.0,0.554359,0.382967,1.0,0.551234,0.382967,1.0,0.470807,0.450194,1.0,0.470807,0.450194,1.0,0.426392,0.643545,1.0,0.406468,0.798923,1.0,0.406468,0.798923,1.0,0.518380,0.466395,1.0,0.518380,0.466395,1.0,0.545974,0.660019,1.0,0.558187,0.809823,1.0,0.558187,0.809823,1.0
0.503838,0.465145,1.0,0.512443,0.306697,1.0,0.509575,0.359513,1.0,0.515312,0.253881,1.0,0.526820,0.174876,1.0,0.539875,0.158476,1.0,0.539875,0.158476,1.0,0.523000,0.158579,1.0,0.523000,0.158579,1.0,0.500029,0.256619,1.0,0.484747,0.259356,1.0,0.458633,0.371124,1.0,0.443256,0.447555,1.0,0.445674,0.446582,1.0,0.444925,0.467894,1.0,0.443427,0.485653,1.0,0.438681,0.466562,1.0,0.427193,0.488761,1.0,0.430690,0.488317,1.0,0.432687,0.467006,1.0,0.426944,0.487429,1.0,0.431189,0.488761,1.0,0.427193,0.477661,1.0,0.426944,0.485653,1.0,0.430690,0.488317,1.0,0.426444,0.482545,1.0,0.425945,0.488317,1.0,0.427443,0.488317,1.0,0.529112,0.252495,1.0,0.542911,0.251109,1.0,0.536807,0.335725,1.0,0.558292,0.335615,1.0,0.557464,0.317740,1.0,0.556755,0.328694,1.0,0.555349,0.339333,1.0,0.570490,0.332136,1.0,0.560276,0.352165,1.0,0.557813,0.356233,1.0,0.573656,0.346531,1.0,0.567146,0.353417,1.0,0.562036,0.351226,1.0,0.575417,0.349035,1.0,0.568906,0.359362,1.0,0.567672,0.359675,1.0,0.576297,0.349661,1.0,0.569255,0.360614,1.0,0.568552,0.360927,1.0,0.481618,0.461031,1.0,0.481618,0.461031,1.0,0.429495,0.640940,1.0,0.374335,0.782598,1.0,0.374335,0.782598,1.0,0.526057,0.469259,1.0,0.526057,0.469259,1.0,0.552104,0.670856,1.0,0.579661,0.818066,1.0,0.579661,0.818066,1.0
0.513805,0.484216,1.0,0.519533,0.327878,1.0,0.517624,0.379991,1.0,0.521443,0.275766,1.0,0.539883,0.168116,1.0,0.547521,0.166804,1.0,0.547521,0.166804,1.0,0.532245,0.169429,1.0,0.532245,0.169429,1.0,0.508422,0.277104,1.0,0.495402,0.278443,1.0,0.461648,0.387504,1.0,0.435655,0.488257,1.0,0.436838,0.500957,1.0,0.434269,0.515114,1.0,0.429903,0.524246,1.0,0.421683,0.508720,1.0,0.417830,0.526986,1.0,0.421426,0.528813,1.0,0.420142,0.508264,1.0,0.417316,0.526530,1.0,0.420656,0.526530,1.0,0.419115,0.508264,1.0,0.417573,0.526073,1.0,0.420399,0.525160,1.0,0.419628,0.508264,1.0,0.418087,0.520137,1.0,0.420142,0.519681,1.0,0.533732,0.274433,1.0,0.546021,0.273101,1.0,0.545995,0.357394,1.0,0.567427,0.316706,1.0,0.573453,0.304515,1.0,0.572755,0.298331,1.0,0.563193,0.306989,1.0,0.573802,0.297403,1.0,0.565802,0.315029,1.0,0.562323,0.321213,1.0,0.578495,0.303588,1.0,0.568234,0.317194,1.0,0.563016,0.320286,1.0,0.582672,0.307607,1.0,0.583370,0.307917,1.0,0.581974,0.322141,1.0,0.584760,0.313792,1.0,0.586323,0.313792,1.0,0.585802,0.314410,1.0,0.493824,0.480083,1.0,0.493824,0.480083,1.0,0.421864,0.640887,1.0,0.354391,0.749829,1.0,0.354391,0.749829,1.0,0.533786,0.488348,1.0,0.533786,0.488348,1.0,0.558292,0.681784,1.0,0.579745,0.823510,1.0,0.579745,0.823510,1.0
0.516076,0.492311,1.0,0.522402,0.342077,1.0,0.520293,0.392155,1.0,0.524510,0.291999,1.0,0.540586,0.189858,1.0,0.555125,0.172175,1.0,0.555125,0.172175,1.0,0.535313,0.180249,1.0,0.535313,0.180249,1.0,0.511503,0.290667,1.0,0.498495,0.289335,1.0,0.467796,0.395565,1.0,0.437167,0.488149,1.0,0.437903,0.502053,1.0,0.434453,0.516949,1.0,0.430264,0.523521,1.0,0.424102,0.509939,1.0,0.421884,0.519578,1.0,0.423856,0.523083,1.0,0.422131,0.507310,1.0,0.420898,0.516511,1.0,0.424102,0.519578,1.0,0.422131,0.505558,1.0,0.422131,0.511692,1.0,0.425334,0.513882,1.0,0.423856,0.505996,1.0,0.424349,0.506434,1.0,0.424842,0.512568,1.0,0.536042,0.292065,1.0,0.547573,0.292131,1.0,0.553630,0.379342,1.0,0.567474,0.316705,1.0,0.568594,0.319889,1.0,0.571677,0.318600,1.0,0.561885,0.316344,1.0,0.575484,0.289265,1.0,0.575667,0.287331,1.0,0.571859,0.298613,1.0,0.580198,0.293456,1.0,0.578750,0.300225,1.0,0.579292,0.305060,1.0,0.581286,0.294422,1.0,0.580198,0.297969,1.0,0.584911,0.299581,1.0,0.585641,0.297324,1.0,0.574031,0.286363,1.0,0.585641,0.299581,1.0,0.495334,0.488182,1.0,0.495334,0.488182,1.0,0.418722,0.630029,1.0,0.351278,0.717231,1.0,0.351278,0.717231,1.0,0.536818,0.496439,1.0,0.536818,0.496439,1.0,0.558333,0.670849,1.0,0.579740,0.826192,1.0,0.579740,0.826192,1.0
0.512246,0.474636,1.0,0.523749,0.323485,1.0,0.519915,0.373868,1.0,0.527583,0.273101,1.0,0.541414,0.180343,1.0,0.556646,0.163873,1.0,0.556646,0.163873,1.0,0.538333,0.164118,1.0,0.538333,0.164118,1.0,0.513807,0.273049,1.0,0.500030,0.272997,1.0,0.472360,0.379168,1.0,0.446410,0.452874,1.0,0.444849,0.488787,1.0,0.447746,0.492221,1.0,0.444124,0.461315,1.0,0.444849,0.460027,1.0,0.448712,0.472046,1.0,0.444366,0.464749,1.0,0.444849,0.466037,1.0,0.449195,0.471617,1.0,0.450644,0.472476,1.0,0.446298,0.475051,1.0,0.448230,0.474622,1.0,0.449195,0.478485,1.0,0.446056,0.485353,1.0,0.433500,0.490933,1.0,0.435191,0.495226,1.0,0.539862,0.274418,1.0,0.552141,0.275734,1.0,0.549062,0.373851,1.0,0.576630,0.313818,1.0,0.573563,0.308787,1.0,0.582078,0.284273,1.0,0.589177,0.269493,1.0,0.582281,0.280307,1.0,0.589380,0.269131,1.0,0.593437,0.263364,1.0,0.586339,0.282110,1.0,0.593234,0.274900,1.0,0.599115,0.272377,1.0,0.589786,0.286075,1.0,0.596073,0.281389,1.0,0.600125,0.276342,1.0,0.592422,0.291483,1.0,0.596677,0.288959,1.0,0.598099,0.288239,1.0,0.490809,0.466493,1.0,0.490809,0.466493,1.0,0.424943,0.627233,1.0,0.362099,0.684525,1.0,0.362099,0.684525,1.0,0.533682,0.482779,1.0,0.533682,0.482779,1.0,0.549089,0.662732,1.0,0.572089,0.820855,1.0,0.572089,0.820855,1.0
0.506117,0.461016,1.0,0.522209,0.315837,1.0,0.516845,0.364230,1.0,0.527573,0.267444,1.0,0.542937,0.169480,1.0,0.556719,0.155837,1.0,0.556719,0.155837,1.0,0.541411,0.158569,1.0,0.541411,0.158569,1.0,0.512290,0.260712,1.0,0.497006,0.253979,1.0,0.470910,0.354668,1.0,0.450960,0.439198,1.0,0.455586,0.438218,1.0,0.449639,0.437811,1.0,0.452612,0.445131,1.0,0.443004,0.459367,1.0,0.443461,0.458959,1.0,0.459476,0.458553,1.0,0.443461,0.469533,1.0,0.452155,0.467906,1.0,0.459247,0.457740,1.0,0.444834,0.474414,1.0,0.452384,0.476855,1.0,0.459476,0.459773,1.0,0.450554,0.481328,1.0,0.452612,0.480921,1.0,0.457874,0.472787,1.0,0.542104,0.268906,1.0,0.556635,0.270367,1.0,0.550609,0.381956,1.0,0.582797,0.297505,1.0,0.582193,0.287931,1.0,0.585932,0.277120,1.0,0.590375,0.272962,1.0,0.590141,0.270883,1.0,0.594589,0.260905,1.0,0.600901,0.257162,1.0,0.593651,0.277536,1.0,0.599500,0.266309,1.0,0.604875,0.261320,1.0,0.596224,0.284189,1.0,0.601839,0.275042,1.0,0.606281,0.270883,1.0,0.598094,0.291257,1.0,0.602302,0.286268,1.0,0.605578,0.281694,1.0,0.483129,0.452820,1.0,0.483129,0.452820,1.0,0.440204,0.627232,1.0,0.385041,0.643705,1.0,0.385041,0.643705,1.0,0.529104,0.469211,1.0,0.529104,0.469211,1.0,0.541370,0.649079,1.0,0.556641,0.818073,1.0,0.556641,0.818073,1.0
0.506117,0.461016,1.0,0.522209,0.315837,1.0,0.516845,0.364230,1.0,0.527573,0.267444,1.0,0.542937,0.169480,1.0,0.556719,0.155837,1.0,0.556719,0.155837,1.0,0.541411,0.158569,1.0,0.541411,0.158569,1.0,0.512290,0.260712,1.0,0.497006,0.253979,1.0,0.470910,0.354668,1.0,0.450960,0.439198,1.0,0.455586,0.438218,1.0,0.449639,0.437811,1.0,0.452612,0.445131,1.0,0.443004,0.459367,1.0,0.443461,0.458959,1.0,0.459476,0.458553,1.0,0.443461,0.469533,1.0,0.452155,0.467906,1.0,0.459247,0.457740,1.0,0.444834,0.474414,1.0,0.452384,0.476855,1.0,0.459476,0.459773,1.0,0.450554,0.481328,1.0,0.452612,0.480921,1.0,0.457874,0.472787,1.0,0.542104,0.268906,1.0,0.556635,0.270367,1.0,0.550609,0.381956,1.0,0.582797,0.297505,1.0,0.582193,0.287931,1.0,0.585932,0.277120,1.0,0.590375,0.272962,1.0,0.590141,0.270883,1.0,0.594589,0.260905,1.0,0.600901,0.257162,1.0,0.593651,0.277536,1.0,0.599500,0.266309,1.0,0.604875,0.261320,1.0,0.596224,0.284189,1.0,0.601839,0.275042,1.0,0.606281,0.270883,1.0,0.598094,0.291257,1.0,0.602302,0.286268,1.0,0.605578,0.281694,1.0,0.483129,0.452820,1.0,0.483129,0.452820,1.0,0.440204,0.627232,1.0,0.385041,0.643705,1.0,0.385041,0.643705,1.0,0.529104,0.469211,1.0,0.529104,0.469211,1.0,0.541370,0.649079,1.0,0.556641,0.818073,1.0,0.556641,0.818073,1.0
0.500789,0.443301,1.0,0.516287,0.301306,1.0,0.511121,0.348637,1.0,0.521453,0.253974,1.0,0.542161,0.172134,1.0,0.556682,0.158522,1.0,0.556682,0.158522,1.0,0.541370,0.161094,1.0,0.541370,0.161094,1.0,0.507644,0.252600,1.0,0.493834,0.251227,1.0,0.460208,0.338379,1.0,0.458594,0.425543,1.0,0.462205,0.427555,1.0,0.462641,0.430656,1.0,0.460678,0.440349,1.0,0.462423,0.440349,1.0,0.460896,0.455469,1.0,0.459152,0.467876,1.0,0.458933,0.439961,1.0,0.457407,0.455469,1.0,0.456753,0.468651,1.0,0.456317,0.439961,1.0,0.455226,0.454306,1.0,0.453699,0.467100,1.0,0.452609,0.439574,1.0,0.452391,0.451593,1.0,0.451519,0.460509,1.0,0.536776,0.256674,1.0,0.552099,0.259374,1.0,0.559781,0.379136,1.0,0.587396,0.292190,1.0,0.587307,0.275879,1.0,0.593026,0.260844,1.0,0.597750,0.253327,1.0,0.597505,0.256865,1.0,0.602229,0.248020,1.0,0.606953,0.244041,1.0,0.599990,0.263940,1.0,0.605214,0.253327,1.0,0.608198,0.247579,1.0,0.601979,0.271456,1.0,0.607453,0.261729,1.0,0.609937,0.256865,1.0,0.603724,0.278974,1.0,0.608448,0.271899,1.0,0.610438,0.267919,1.0,0.480089,0.436480,1.0,0.480089,0.436480,1.0,0.458632,0.621788,1.0,0.412676,0.618958,1.0,0.412676,0.618958,1.0,0.521490,0.450122,1.0,0.521490,0.450122,1.0,0.532260,0.643710,1.0,0.521411,0.804445,1.0,0.521411,0.804445,1.0
0.496900,0.446003,1.0,0.514137,0.306046,1.0,0.508391,0.352698,1.0,0.519882,0.259394,1.0,0.539821,0.180333,1.0,0.553667,0.164056,1.0,0.553667,0.164056,1.0,0.535297,0.163994,1.0,0.535297,0.163994,1.0,0.502308,0.256633,1.0,0.484734,0.253873,1.0,0.457085,0.338278,1.0,0.458533,0.422931,1.0,0.462236,0.423994,1.0,0.463848,0.423277,1.0,0.454778,0.440476,1.0,0.458608,0.442984,1.0,0.456995,0.468067,1.0,0.453166,0.474875,1.0,0.454173,0.440834,1.0,0.454980,0.460542,1.0,0.451957,0.461258,1.0,0.458003,0.446926,1.0,0.456189,0.462333,1.0,0.454375,0.469142,1.0,0.458003,0.446568,1.0,0.457398,0.464483,1.0,0.457197,0.471650,1.0,0.534472,0.263466,1.0,0.549062,0.267539,1.0,0.568901,0.373836,1.0,0.588917,0.289247,1.0,0.586281,0.271194,1.0,0.589745,0.255992,1.0,0.594370,0.246131,1.0,0.598297,0.253937,1.0,0.605229,0.247775,1.0,0.609391,0.242844,1.0,0.601073,0.260511,1.0,0.607313,0.252705,1.0,0.610313,0.246542,1.0,0.603615,0.267495,1.0,0.610313,0.260100,1.0,0.610313,0.254348,1.0,0.604307,0.274480,1.0,0.610313,0.267495,1.0,0.611240,0.262155,1.0,0.473925,0.441894,1.0,0.473925,0.441894,1.0,0.483049,0.610914,1.0,0.440196,0.583732,1.0,0.440196,0.583732,1.0,0.519876,0.450112,1.0,0.519876,0.450112,1.0,0.523026,0.649103,1.0,0.495383,0.790784,1.0,0.495383,0.790784,1.0
0.494629,0.458325,1.0,0.512467,0.317258,1.0,0.506521,0.364281,1.0,0.518413,0.270236,1.0,0.536761,0.185861,1.0,0.546052,0.180288,1.0,0.546052,0.180288,1.0,0.532188,0.177649,1.0,0.532188,0.177649,1.0,0.501523,0.267497,1.0,0.484634,0.264757,1.0,0.452481,0.338285,1.0,0.452471,0.422774,1.0,0.453630,0.441013,1.0,0.452855,0.454444,1.0,0.453048,0.462709,1.0,0.453242,0.459265,1.0,0.454598,0.471319,1.0,0.454598,0.479240,1.0,0.452661,0.459954,1.0,0.452661,0.472696,1.0,0.452468,0.481994,1.0,0.450918,0.458920,1.0,0.450530,0.470974,1.0,0.450143,0.479584,1.0,0.449949,0.457544,1.0,0.449562,0.465808,1.0,0.448981,0.471319,1.0,0.533751,0.272948,1.0,0.549089,0.275660,1.0,0.567432,0.376552,1.0,0.584349,0.289265,1.0,0.584464,0.267850,1.0,0.588620,0.251514,1.0,0.592339,0.242178,1.0,0.599344,0.249957,1.0,0.606562,0.249180,1.0,0.610937,0.246456,1.0,0.601313,0.258515,1.0,0.608094,0.255014,1.0,0.605031,0.255793,1.0,0.602406,0.265517,1.0,0.608094,0.261627,1.0,0.607000,0.260460,1.0,0.602406,0.272907,1.0,0.607656,0.267461,1.0,0.607219,0.265128,1.0,0.473936,0.450114,1.0,0.473936,0.450114,1.0,0.506106,0.578244,1.0,0.457049,0.564604,1.0,0.457049,0.564604,1.0,0.515321,0.466536,1.0,0.515321,0.466536,1.0,0.509281,0.659920,1.0,0.484643,0.809803,1.0,0.484643,0.809803,1.0
0.491559,0.461002,1.0,0.510510,0.319973,1.0,0.504193,0.366983,1.0,0.516827,0.272964,1.0,0.529159,0.187225,1.0,0.544401,0.177564,1.0,0.544401,0.177564,1.0,0.527599,0.177566,1.0,0.527599,0.177566,1.0,0.499215,0.270254,1.0,0.481604,0.267544,1.0,0.454007,0.338408,1.0,0.449436,0.425521,1.0,0.451539,0.438934,1.0,0.450937,0.457835,1.0,0.450135,0.454269,1.0,0.452542,0.460688,1.0,0.453344,0.473883,1.0,0.448530,0.486008,1.0,0.450135,0.458905,1.0,0.451138,0.475309,1.0,0.448730,0.484582,1.0,0.449332,0.459975,1.0,0.450335,0.473169,1.0,0.450135,0.486008,1.0,0.447527,0.458905,1.0,0.445922,0.469247,1.0,0.454748,0.483156,1.0,0.532942,0.277080,1.0,0.549057,0.281196,1.0,0.559812,0.379260,1.0,0.582854,0.289330,1.0,0.583661,0.266501,1.0,0.589099,0.249985,1.0,0.592271,0.241930,1.0,0.597938,0.249582,1.0,0.600203,0.244346,1.0,0.600427,0.242332,1.0,0.600656,0.257236,1.0,0.602922,0.249985,1.0,0.602240,0.246360,1.0,0.601786,0.264486,1.0,0.605641,0.255222,1.0,0.603828,0.254417,1.0,0.601562,0.273751,1.0,0.607224,0.267709,1.0,0.605641,0.264889,1.0,0.472354,0.452811,1.0,0.472354,0.452811,1.0,0.518405,0.542756,1.0,0.460173,0.578252,1.0,0.460173,0.578252,1.0,0.510765,0.469194,1.0,0.510765,0.469194,1.0,0.498500,0.662660,1.0,0.483127,0.812565,1.0,0.483127,0.812565,1.0
0.490827,0.447375,1.0,0.506899,0.314426,1.0,0.501541,0.358742,1.0,0.512256,0.270109,1.0,0.526767,0.177625,1.0,0.536802,0.161365,1.0,0.536802,0.161365,1.0,0.521443,0.161338,1.0,0.521443,0.161338,1.0,0.494629,0.263408,1.0,0.477002,0.256707,1.0,0.457081,0.341086,1.0,0.452463,0.425702,1.0,0.454057,0.427982,1.0,0.456786,0.425211,1.0,0.457176,0.460903,1.0,0.454642,0.439419,1.0,0.456201,0.454665,1.0,0.457371,0.463675,1.0,0.450939,0.441151,1.0,0.453278,0.457784,1.0,0.454837,0.468526,1.0,0.448404,0.443576,1.0,0.452498,0.458131,1.0,0.454447,0.467833,1.0,0.446845,0.444269,1.0,0.453278,0.456051,1.0,0.456006,0.465754,1.0,0.529899,0.271526,1.0,0.547542,0.272943,1.0,0.558177,0.371131,1.0,0.582776,0.289379,1.0,0.583458,0.269203,1.0,0.589833,0.254465,1.0,0.595359,0.247284,1.0,0.600036,0.254843,1.0,0.600464,0.247662,1.0,0.600464,0.246528,1.0,0.601948,0.261267,1.0,0.603651,0.254465,1.0,0.603016,0.251819,1.0,0.602589,0.269581,1.0,0.607052,0.261267,1.0,0.604714,0.258244,1.0,0.601740,0.277517,1.0,0.607479,0.272605,1.0,0.605776,0.268447,1.0,0.472374,0.444564,1.0,0.472374,0.444564,1.0,0.522995,0.531873,1.0,0.470797,0.619069,1.0,0.470797,0.619069,1.0,0.509279,0.450186,1.0,0.509279,0.450186,1.0,0.495417,0.643581,1.0,0.483155,0.809868,1.0,0.483155,0.809868,1.0
0.490827,0.447375,1.0,0.506899,0.314426,1.0,0.501541,0.358742,1.0,0.512256,0.270109,1.0,0.526767,0.177625,1.0,0.536802,0.161365,1.0,0.536802,0.161365,1.0,0.521443,0.161338,1.0,0.521443,0.161338,1.0,0.494629,0.263408,1.0,0.477002,0.256707,1.0,0.457081,0.341086,1.0,0.452463,0.425702,1.0,0.454057,0.427982,1.0,0.456786,0.425211,1.0,0.457176,0.460903,1.0,0.454642,0.439419,1.0,0.456201,0.454665,1.0,0.457371,0.463675,1.0,0.450939,0.441151,1.0,0.453278,0.457784,1.0,0.454837,0.468526,1.0,0.448404,0.443576,1.0,0.452498,0.458131,1.0,0.454447,0.467833,1.0,0.446845,0.444269,1.0,0.453278,0.456051,1.0,0.456006,0.465754,1.0,0.529899,0.271526,1.0,0.547542,0.272943,1.0,0.558177,0.371131,1.0,0.582776,0.289379,1.0,0.583458,0.269203,1.0,0.589833,0.254465,1.0,0.595359,0.247284,1.0,0.600036,0.254843,1.0,0.600464,0.247662,1.0,0.600464,0.246528,1.0,0.601948,0.261267,1.0,0.603651,0.254465,1.0,0.603016,0.251819,1.0,0.602589,0.269581,1.0,0.607052,0.261267,1.0,0.604714,0.258244,1.0,0.601740,0.277517,1.0,0.607479,0.272605,1.0,0.605776,0.268447,1.0,0.472374,0.444564,1.0,0.472374,0.444564,1.0,0.522995,0.531873,1.0,0.470797,0.619069,1.0,0.470797,0.619069,1.0,0.509279,0.450186,1.0,0.509279,0.450186,1.0,0.495417,0.643581,1.0,0.483155,0.809868,1.0,0.483155,0.809868,1.0
0.490041,0.441978,1.0,0.504432,0.303010,1.0,0.499635,0.349332,1.0,0.509230,0.256687,1.0,0.523002,0.170796,1.0,0.533688,0.155845,1.0,0.533688,0.155845,1.0,0.518373,0.155804,1.0,0.518373,0.155804,1.0,0.491592,0.253937,1.0,0.473954,0.251187,1.0,0.458529,0.338369,1.0,0.449433,0.425497,1.0,0.448259,0.430049,1.0,0.447853,0.475561,1.0,0.449885,0.473032,1.0,0.455168,0.435106,1.0,0.449072,0.472671,1.0,0.447650,0.479534,1.0,0.455168,0.452805,1.0,0.455371,0.454972,1.0,0.449072,0.481340,1.0,0.455371,0.453888,1.0,0.456590,0.460751,1.0,0.454558,0.470143,1.0,0.448666,0.435467,1.0,0.458621,0.461835,1.0,0.458215,0.462196,1.0,0.527599,0.263404,1.0,0.545969,0.270121,1.0,0.553651,0.365643,1.0,0.582724,0.289363,1.0,0.583234,0.269073,1.0,0.589359,0.256304,1.0,0.594854,0.247666,1.0,0.600135,0.256680,1.0,0.603307,0.255553,1.0,0.603307,0.255929,1.0,0.601828,0.265318,1.0,0.605839,0.262689,1.0,0.604359,0.260811,1.0,0.602458,0.272454,1.0,0.608375,0.266820,1.0,0.613443,0.265694,1.0,0.601615,0.280717,1.0,0.606687,0.277336,1.0,0.605839,0.274707,1.0,0.470918,0.439200,1.0,0.470918,0.439200,1.0,0.522979,0.537394,1.0,0.478562,0.679019,1.0,0.478562,0.679019,1.0,0.509164,0.444756,1.0,0.509164,0.444756,1.0,0.496960,0.578242,1.0,0.483082,0.708957,1.0,0.483082,0.708957,1.0
0.489270,0.443300,1.0,0.503085,0.305311,1.0,0.498480,0.351307,1.0,0.507690,0.259315,1.0,0.515343,0.168079,1.0,0.527609,0.150301,1.0,0.527609,0.150301,1.0,0.509227,0.147597,1.0,0.509227,0.147597,1.0,0.490054,0.255248,1.0,0.472418,0.251181,1.0,0.457058,0.338362,1.0,0.447858,0.425592,1.0,0.452352,0.435205,1.0,0.457031,0.474274,1.0,0.455404,0.473912,1.0,0.450520,0.437737,1.0,0.448892,0.476806,1.0,0.448282,0.483318,1.0,0.454183,0.441717,1.0,0.449909,0.476444,1.0,0.449706,0.485127,1.0,0.452148,0.440631,1.0,0.451130,0.477530,1.0,0.448078,0.483680,1.0,0.449096,0.440269,1.0,0.445840,0.481871,1.0,0.447061,0.484765,1.0,0.526035,0.264756,1.0,0.544380,0.270196,1.0,0.546078,0.365712,1.0,0.581198,0.292067,1.0,0.581495,0.272486,1.0,0.587031,0.257139,1.0,0.592120,0.249661,1.0,0.596328,0.256745,1.0,0.598542,0.255958,1.0,0.597875,0.255565,1.0,0.599203,0.266190,1.0,0.602745,0.263435,1.0,0.602526,0.262255,1.0,0.600531,0.274847,1.0,0.606729,0.269338,1.0,0.611599,0.269338,1.0,0.600531,0.282719,1.0,0.604516,0.279569,1.0,0.612927,0.271306,1.0,0.470841,0.441915,1.0,0.470841,0.441915,1.0,0.519949,0.575463,1.0,0.496921,0.733631,1.0,0.496921,0.733631,1.0,0.507698,0.444684,1.0,0.507698,0.444684,1.0,0.490795,0.613592,1.0,0.469371,0.782628,1.0,0.469371,0.782628,1.0
0.490010,0.448732,1.0,0.502123,0.312841,1.0,0.498085,0.358138,1.0,0.506160,0.267544,1.0,0.511484,0.173528,1.0,0.521401,0.158456,1.0,0.521401,0.158456,1.0,0.506092,0.155773,1.0,0.506092,0.155773,1.0,0.488531,0.262114,1.0,0.470901,0.256683,1.0,0.449464,0.349239,1.0,0.446338,0.441853,1.0,0.442753,0.438001,1.0,0.454666,0.450103,1.0,0.454666,0.450481,1.0,0.454453,0.452372,1.0,0.456155,0.490947,1.0,0.454666,0.491325,1.0,0.455942,0.491325,1.0,0.437435,0.444431,1.0,0.434244,0.449346,1.0,0.455517,0.491325,1.0,0.436796,0.446321,1.0,0.435520,0.461827,1.0,0.455729,0.490947,1.0,0.436584,0.474685,1.0,0.437435,0.475063,1.0,0.522255,0.270207,1.0,0.538349,0.272870,1.0,0.544521,0.368394,1.0,0.579714,0.294828,1.0,0.583135,0.272126,1.0,0.588672,0.258742,1.0,0.592214,0.253231,1.0,0.597526,0.263072,1.0,0.601516,0.265040,1.0,0.598854,0.261104,1.0,0.599297,0.272126,1.0,0.606161,0.274094,1.0,0.611922,0.276456,1.0,0.599964,0.281180,1.0,0.606604,0.277636,1.0,0.611698,0.277243,1.0,0.599521,0.289445,1.0,0.602844,0.285903,1.0,0.601734,0.284329,1.0,0.470884,0.447361,1.0,0.470884,0.447361,1.0,0.507621,0.610924,1.0,0.509267,0.796239,1.0,0.509267,0.796239,1.0,0.509136,0.450104,1.0,0.509136,0.450104,1.0,0.489296,0.621764,1.0,0.458647,0.774466,1.0,0.458647,0.774466,1.0
0.490868,0.467778,1.0,0.501142,0.323751,1.0,0.497717,0.371760,1.0,0.504567,0.275743,1.0,0.504655,0.185817,1.0,0.512287,0.169490,1.0,0.512287,0.169490,1.0,0.496927,0.169436,1.0,0.496927,0.169436,1.0,0.487708,0.274398,1.0,0.470850,0.273054,1.0,0.446419,0.362925,1.0,0.435654,0.450197,1.0,0.446108,0.475702,1.0,0.437869,0.465449,1.0,0.441989,0.474969,1.0,0.439105,0.458125,1.0,0.439105,0.499136,1.0,0.439311,0.500601,1.0,0.433544,0.459956,1.0,0.437045,0.497672,1.0,0.436427,0.498038,1.0,0.433132,0.459956,1.0,0.434368,0.459956,1.0,0.436221,0.498770,1.0,0.434985,0.459590,1.0,0.431278,0.460688,1.0,0.431690,0.499503,1.0,0.519906,0.277111,1.0,0.535245,0.278480,1.0,0.545984,0.376448,1.0,0.581182,0.294899,1.0,0.582667,0.276786,1.0,0.588323,0.262541,1.0,0.591620,0.257932,1.0,0.596573,0.266731,1.0,0.601286,0.267987,1.0,0.597750,0.262541,1.0,0.597281,0.274692,1.0,0.602464,0.274692,1.0,0.597281,0.265893,1.0,0.597516,0.283071,1.0,0.601286,0.276368,1.0,0.597281,0.270082,1.0,0.597281,0.291451,1.0,0.600109,0.289356,1.0,0.598693,0.282652,1.0,0.472455,0.466396,1.0,0.472455,0.466396,1.0,0.493884,0.643596,1.0,0.519870,0.823525,1.0,0.519870,0.823525,1.0,0.509281,0.469160,1.0,0.509281,0.469160,1.0,0.484702,0.638166,1.0,0.458621,0.779885,1.0,0.458621,0.779885,1.0
0.490830,0.486862,1.0,0.498871,0.342742,1.0,0.496191,0.390782,1.0,0.501551,0.294702,1.0,0.502302,0.203572,1.0,0.507720,0.185866,1.0,0.507720,0.185866,1.0,0.493860,0.185780,1.0,0.493860,0.185780,1.0,0.486189,0.294716,1.0,0.470828,0.294730,1.0,0.443258,0.382144,1.0,0.429461,0.469303,1.0,0.431759,0.493267,1.0,0.427815,0.516887,1.0,0.424079,0.502494,1.0,0.430929,0.516887,1.0,0.435496,0.501018,1.0,0.425532,0.502124,1.0,0.430514,0.516887,1.0,0.425324,0.503231,1.0,0.426985,0.502862,1.0,0.431552,0.516887,1.0,0.427192,0.513934,1.0,0.427400,0.513934,1.0,0.426155,0.516518,1.0,0.423041,0.515042,1.0,0.421795,0.513565,1.0,0.517656,0.293441,1.0,0.533760,0.292181,1.0,0.549047,0.379309,1.0,0.581177,0.294897,1.0,0.582667,0.286567,1.0,0.598323,0.286567,1.0,0.587573,0.258317,1.0,0.598557,0.278258,1.0,0.598557,0.264964,1.0,0.594583,0.258317,1.0,0.597854,0.281166,1.0,0.599724,0.267456,1.0,0.592714,0.258317,1.0,0.596922,0.278258,1.0,0.599255,0.267872,1.0,0.593651,0.260809,1.0,0.596922,0.279089,1.0,0.597620,0.268703,1.0,0.594818,0.264548,1.0,0.472410,0.485481,1.0,0.472410,0.485481,1.0,0.493853,0.659972,1.0,0.521401,0.837014,1.0,0.521401,0.837014,1.0,0.509251,0.488243,1.0,0.509251,0.488243,1.0,0.483179,0.643643,1.0,0.458525,0.788042,1.0,0.458525,0.788042,1.0
0.490830,0.486862,1.0,0.498871,0.342742,1.0,0.496191,0.390782,1.0,0.501551,0.294702,1.0,0.502302,0.203572,1.0,0.507720,0.185866,1.0,0.507720,0.185866,1.0,0.493860,0.185780,1.0,0.493860,0.185780,1.0,0.486189,0.294716,1.0,0.470828,0.294730,1.0,0.443258,0.382144,1.0,0.429461,0.469303,1.0,0.431759,0.493267,1.0,0.427815,0.516887,1.0,0.424079,0.502494,1.0,0.430929,0.516887,1.0,0.435496,0.501018,1.0,0.425532,0.502124,1.0,0.430514,0.516887,1.0,0.425324,0.503231,1.0,0.426985,0.502862,1.0,0.431552,0.516887,1.0,0.427192,0.513934,1.0,0.427400,0.513934,1.0,0.426155,0.516518,1.0,0.423041,0.515042,1.0,0.421795,0.513565,1.0,0.517656,0.293441,1.0,0.533760,0.292181,1.0,0.549047,0.379309,1.0,0.581177,0.294897,1.0,0.582667,0.286567,1.0,0.598323,0.286567,1.0,0.587573,0.258317,1.0,0.598557,0.278258,1.0,0.598557,0.264964,1.0,0.594583,0.258317,1.0,0.597854,0.281166,1.0,0.599724,0.267456,1.0,0.592714,0.258317,1.0,0.596922,0.278258,1.0,0.599255,0.267872,1.0,0.593651,0.260809,1.0,0.596922,0.279089,1.0,0.597620,0.268703,1.0,0.594818,0.264548,1.0,0.472410,0.485481,1.0,0.472410,0.485481,1.0,0.493853,0.659972,1.0,0.521401,0.837014,1.0,0.521401,0.837014,1.0,0.509251,0.488243,1.0,0.509251,0.488243,1.0,0.483179,0.643643,1.0,0.458525,0.788042,1.0,0.458525,0.788042,1.0
0.489296,0.478745,1.0,0.499621,0.340684,1.0,0.496179,0.386704,1.0,0.503063,0.294664,1.0,0.501471,0.204784,1.0,0.504618,0.185905,1.0,0.504618,0.185905,1.0,0.487742,0.185897,1.0,0.487742,0.185897,1.0,0.486980,0.294693,1.0,0.470898,0.294722,1.0,0.443268,0.398238,1.0,0.423290,0.477344,1.0,0.421189,0.502187,1.0,0.419770,0.530769,1.0,0.421189,0.500085,1.0,0.423080,0.501346,1.0,0.414569,0.495881,1.0,0.416933,0.488736,1.0,0.413150,0.512275,1.0,0.412204,0.513116,1.0,0.415042,0.515637,1.0,0.413859,0.514796,1.0,0.415278,0.524884,1.0,0.414096,0.517739,1.0,0.420716,0.521943,1.0,0.417642,0.527827,1.0,0.408894,0.530349,1.0,0.518412,0.293369,1.0,0.533760,0.292075,1.0,0.550578,0.379145,1.0,0.579703,0.294680,1.0,0.580458,0.278920,1.0,0.583641,0.262364,1.0,0.585000,0.252671,1.0,0.598630,0.268825,1.0,0.597042,0.257921,1.0,0.591589,0.253075,1.0,0.596130,0.278920,1.0,0.597724,0.265191,1.0,0.590906,0.259537,1.0,0.592500,0.285786,1.0,0.597042,0.278113,1.0,0.592042,0.258729,1.0,0.586365,0.291036,1.0,0.590453,0.289017,1.0,0.590682,0.291036,1.0,0.470915,0.474682,1.0,0.470915,0.474682,1.0,0.495398,0.646321,1.0,0.518414,0.826241,1.0,0.518414,0.826241,1.0,0.507676,0.482807,1.0,0.507676,0.482807,1.0,0.484641,0.643627,1.0,0.458547,0.785377,1.0,0.458547,0.785377,1.0
0.487693,0.467805,1.0,0.500365,0.327840,1.0,0.496141,0.374495,1.0,0.504589,0.281185,1.0,0.500715,0.189844,1.0,0.503073,0.180317,1.0,0.503073,0.180317,1.0,0.486210,0.180246,1.0,0.486210,0.180246,1.0,0.487743,0.282529,1.0,0.470897,0.283872,1.0,0.438698,0.384707,1.0,0.421767,0.480108,1.0,0.422640,0.494576,1.0,0.423119,0.514569,1.0,0.418094,0.526053,1.0,0.417137,0.523501,1.0,0.413069,0.538814,1.0,0.412830,0.540515,1.0,0.411873,0.519672,1.0,0.407806,0.530307,1.0,0.409480,0.524352,1.0,0.409002,0.513292,1.0,0.406609,0.519672,1.0,0.407566,0.519247,1.0,0.406609,0.506486,1.0,0.403499,0.514143,1.0,0.405173,0.514569,1.0,0.519190,0.279793,1.0,0.533792,0.278401,1.0,0.550615,0.365644,1.0,0.579734,0.289357,1.0,0.580885,0.273202,1.0,0.583422,0.256668,1.0,0.585328,0.245769,1.0,0.598432,0.264183,1.0,0.597161,0.250655,1.0,0.591667,0.247272,1.0,0.597375,0.270195,1.0,0.598010,0.257419,1.0,0.591458,0.252909,1.0,0.597375,0.270947,1.0,0.598432,0.258170,1.0,0.593995,0.255540,1.0,0.597375,0.271699,1.0,0.599068,0.274330,1.0,0.596740,0.265310,1.0,0.469295,0.466470,1.0,0.469295,0.466470,1.0,0.496941,0.638102,1.0,0.509124,0.815209,1.0,0.509124,0.815209,1.0,0.506091,0.469140,1.0,0.506091,0.469140,1.0,0.498462,0.640964,1.0,0.461688,0.774411,1.0,0.461688,0.774411,1.0
0.484674,0.455580,1.0,0.497341,0.316571,1.0,0.493119,0.362908,1.0,0.501564,0.270235,1.0,0.500732,0.184328,1.0,0.503067,0.166779,1.0,0.503067,0.166779,1.0,0.486193,0.166664,1.0,0.486193,0.166664,1.0,0.486972,0.270236,1.0,0.472381,0.270237,1.0,0.435608,0.368419,1.0,0.415710,0.466575,1.0,0.419123,0.483821,1.0,0.421314,0.503294,1.0,0.414012,0.524065,1.0,0.415229,0.516276,1.0,0.407197,0.532719,1.0,0.406954,0.538344,1.0,0.409874,0.514112,1.0,0.401355,0.528392,1.0,0.397704,0.530988,1.0,0.406710,0.508487,1.0,0.398434,0.521469,1.0,0.395757,0.525363,1.0,0.403303,0.501131,1.0,0.400381,0.514112,1.0,0.395027,0.518007,1.0,0.516889,0.270217,1.0,0.532214,0.270199,1.0,0.547516,0.357479,1.0,0.581177,0.275676,1.0,0.580896,0.261075,1.0,0.585313,0.247029,1.0,0.587401,0.238766,1.0,0.598792,0.265619,1.0,0.599255,0.245789,1.0,0.593911,0.240419,1.0,0.596000,0.271816,1.0,0.600182,0.253639,1.0,0.593443,0.245376,1.0,0.591120,0.275534,1.0,0.597396,0.261075,1.0,0.594141,0.247442,1.0,0.584380,0.276360,1.0,0.586010,0.275947,1.0,0.597396,0.260248,1.0,0.464764,0.450143,1.0,0.464764,0.450143,1.0,0.503094,0.621849,1.0,0.484731,0.809887,1.0,0.484731,0.809887,1.0,0.504584,0.461018,1.0,0.504584,0.461018,1.0,0.521510,0.635461,1.0,0.483127,0.755381,1.0,0.483127,0.755381,1.0
0.480861,0.450124,1.0,0.494092,0.315166,1.0,0.489682,0.360152,1.0,0.498502,0.270181,1.0,0.499963,0.184375,1.0,0.503041,0.169394,1.0,0.503041,0.169394,1.0,0.484751,0.166735,1.0,0.484751,0.166735,1.0,0.485438,0.270185,1.0,0.472373,0.270189,1.0,0.434023,0.363030,1.0,0.409546,0.463669,1.0,0.410267,0.479896,1.0,0.406748,0.504924,1.0,0.420072,0.504030,1.0,0.402223,0.507158,1.0,0.402223,0.512521,1.0,0.402223,0.506711,1.0,0.395184,0.500007,1.0,0.392921,0.500455,1.0,0.398452,0.502243,1.0,0.394178,0.498220,1.0,0.394681,0.500902,1.0,0.398201,0.500455,1.0,0.391665,0.490176,1.0,0.401469,0.501795,1.0,0.402223,0.501348,1.0,0.514556,0.270176,1.0,0.530609,0.270172,1.0,0.547552,0.352022,1.0,0.578193,0.270224,1.0,0.579740,0.251643,1.0,0.583344,0.235219,1.0,0.585151,0.228810,1.0,0.598219,0.257251,1.0,0.598219,0.237622,1.0,0.592135,0.231614,1.0,0.597990,0.258052,1.0,0.598443,0.240827,1.0,0.592135,0.234018,1.0,0.597318,0.260456,1.0,0.598443,0.244432,1.0,0.593036,0.238824,1.0,0.596641,0.260055,1.0,0.596188,0.249640,1.0,0.594615,0.244833,1.0,0.463242,0.447379,1.0,0.463242,0.447379,1.0,0.501541,0.621760,1.0,0.472348,0.796284,1.0,0.472348,0.796284,1.0,0.498481,0.452869,1.0,0.498481,0.452869,1.0,0.542911,0.602730,1.0,0.496963,0.714453,1.0,0.496963,0.714453,1.0
0.482375,0.465165,1.0,0.493352,0.320985,1.0,0.489693,0.369045,1.0,0.497010,0.272925,1.0,0.496188,0.187106,1.0,0.499983,0.177645,1.0,0.499983,0.177645,1.0,0.484691,0.177537,1.0,0.484691,0.177537,1.0,0.483970,0.272950,1.0,0.470929,0.272975,1.0,0.427948,0.365631,1.0,0.398838,0.455553,1.0,0.403853,0.474653,1.0,0.403853,0.473331,1.0,0.410297,0.490073,1.0,0.391462,0.500206,1.0,0.402862,0.472449,1.0,0.403853,0.472009,1.0,0.388736,0.497563,1.0,0.371388,0.484786,1.0,0.386010,0.485667,1.0,0.383036,0.487430,1.0,0.372132,0.485667,1.0,0.370645,0.484345,1.0,0.382293,0.490073,1.0,0.374114,0.472009,1.0,0.372627,0.501087,1.0,0.510781,0.271644,1.0,0.524552,0.270364,1.0,0.549047,0.346615,1.0,0.573573,0.264820,1.0,0.577203,0.249163,1.0,0.579328,0.231028,1.0,0.580818,0.221582,1.0,0.596333,0.251430,1.0,0.599094,0.234429,1.0,0.604620,0.232917,1.0,0.595057,0.251807,1.0,0.595484,0.234429,1.0,0.588042,0.226494,1.0,0.593568,0.252185,1.0,0.595057,0.235562,1.0,0.589531,0.230272,1.0,0.589958,0.251052,1.0,0.592932,0.239718,1.0,0.592719,0.234050,1.0,0.466269,0.463764,1.0,0.466269,0.463764,1.0,0.492338,0.640822,1.0,0.460212,0.818107,1.0,0.460212,0.818107,1.0,0.498481,0.466567,1.0,0.498481,0.466567,1.0,0.556724,0.572802,1.0,0.499986,0.676269,1.0,0.499986,0.676269,1.0
0.482375,0.465165,1.0,0.493352,0.320985,1.0,0.489693,0.369045,1.0,0.497010,0.272925,1.0,0.496188,0.187106,1.0,0.499983,0.177645,1.0,0.499983,0.177645,1.0,0.484691,0.177537,1.0,0.484691,0.177537,1.0,0.483970,0.272950,1.0,0.470929,0.272975,1.0,0.427948,0.365631,1.0,0.398838,0.455553,1.0,0.403853,0.474653,1.0,0.403853,0.473331,1.0,0.410297,0.490073,1.0,0.391462,0.500206,1.0,0.402862,0.472449,1.0,0.403853,0.472009,1.0,0.388736,0.497563,1.0,0.371388,0.484786,1.0,0.386010,0.485667,1.0,0.383036,0.487430,1.0,0.372132,0.485667,1.0,0.370645,0.484345,1.0,0.382293,0.490073,1.0,0.374114,0.472009,1.0,0.372627,0.501087,1.0,0.510781,0.271644,1.0,0.524552,0.270364,1.0,0.549047,0.346615,1.0,0.573573,0.264820,1.0,0.577203,0.249163,1.0,0.579328,0.231028,1.0,0.580818,0.221582,1.0,0.596333,0.251430,1.0,0.599094,0.234429,1.0,0.604620,0.232917,1.0,0.595057,0.251807,1.0,0.595484,0.234429,1.0,0.588042,0.226494,1.0,0.593568,0.252185,1.0,0.595057,0.235562,1.0,0.589531,0.230272,1.0,0.589958,0.251052,1.0,0.592932,0.239718,1.0,0.592719,0.234050,1.0,0.466269,0.463764,1.0,0.466269,0.463764,1.0,0.492338,0.640822,1.0,0.460212,0.818107,1.0,0.460212,0.818107,1.0,0.498481,0.466567,1.0,0.498481,0.466567,1.0,0.556724,0.572802,1.0,0.499986,0.676269,1.0,0.499986,0.676269,1.0
0.482376,0.466487,1.0,0.494423,0.321437,1.0,0.490407,0.369787,1.0,0.498439,0.273087,1.0,0.493866,0.188534,1.0,0.496978,0.180354,1.0,0.496978,0.180354,1.0,0.483187,0.180374,1.0,0.483187,0.180374,1.0,0.485407,0.273042,1.0,0.472375,0.272997,1.0,0.424890,0.362996,1.0,0.395714,0.447515,1.0,0.393470,0.472237,1.0,0.388123,0.488081,1.0,0.382012,0.498493,1.0,0.383030,0.491702,1.0,0.373100,0.505282,1.0,0.369790,0.511167,1.0,0.378956,0.485818,1.0,0.370808,0.498944,1.0,0.359095,0.498944,1.0,0.376919,0.478575,1.0,0.370044,0.487176,1.0,0.359605,0.486270,1.0,0.374882,0.470427,1.0,0.366734,0.473595,1.0,0.360623,0.473595,1.0,0.512251,0.274382,1.0,0.526062,0.275678,1.0,0.550594,0.343850,1.0,0.575141,0.256592,1.0,0.577198,0.244498,1.0,0.578094,0.228194,1.0,0.578990,0.217457,1.0,0.584354,0.228990,1.0,0.593078,0.222627,1.0,0.586370,0.219048,1.0,0.589724,0.230581,1.0,0.593526,0.225808,1.0,0.586146,0.221434,1.0,0.589052,0.231773,1.0,0.594646,0.228990,1.0,0.588380,0.225410,1.0,0.592411,0.237341,1.0,0.593750,0.231376,1.0,0.591516,0.227001,1.0,0.464755,0.466404,1.0,0.464755,0.466404,1.0,0.483121,0.643742,1.0,0.460091,0.818156,1.0,0.460091,0.818156,1.0,0.499998,0.466569,1.0,0.499998,0.466569,1.0,0.565901,0.553745,1.0,0.495433,0.640922,1.0,0.495433,0.640922,1.0
0.483123,0.461018,1.0,0.494611,0.315938,1.0,0.490782,0.364298,1.0,0.498440,0.267578,1.0,0.492390,0.181753,1.0,0.496936,0.172206,1.0,0.496936,0.172206,1.0,0.483132,0.172118,1.0,0.483132,0.172118,1.0,0.485403,0.268926,1.0,0.472367,0.270274,1.0,0.426420,0.360188,1.0,0.395717,0.441945,1.0,0.393857,0.462687,1.0,0.388342,0.487643,1.0,0.381825,0.494327,1.0,0.382327,0.480513,1.0,0.374054,0.497001,1.0,0.373302,0.498783,1.0,0.377814,0.473828,1.0,0.372049,0.485415,1.0,0.360267,0.485415,1.0,0.376310,0.467144,1.0,0.370044,0.474274,1.0,0.360518,0.472491,1.0,0.374305,0.459122,1.0,0.369542,0.471155,1.0,0.362273,0.460013,1.0,0.513020,0.266165,1.0,0.527599,0.264752,1.0,0.552109,0.341172,1.0,0.576625,0.256619,1.0,0.577078,0.242676,1.0,0.578385,0.227555,1.0,0.580349,0.216698,1.0,0.587328,0.227167,1.0,0.598234,0.225616,1.0,0.588203,0.217473,1.0,0.591693,0.231044,1.0,0.596271,0.226779,1.0,0.587984,0.218249,1.0,0.594526,0.241512,1.0,0.596052,0.227555,1.0,0.589729,0.224065,1.0,0.594089,0.244226,1.0,0.594307,0.230656,1.0,0.591906,0.226779,1.0,0.464739,0.458292,1.0,0.464739,0.458292,1.0,0.486240,0.640798,1.0,0.463203,0.815270,1.0,0.463203,0.815270,1.0,0.501508,0.463744,1.0,0.501508,0.463744,1.0,0.561312,0.559132,1.0,0.481620,0.621785,1.0,0.481620,0.621785,1.0
0.480869,0.454245,1.0,0.494057,0.312191,1.0,0.489661,0.359542,1.0,0.498453,0.264840,1.0,0.492375,0.181655,1.0,0.496908,0.166774,1.0,0.496908,0.166774,1.0,0.483121,0.166724,1.0,0.483121,0.166724,1.0,0.484672,0.264845,1.0,0.470892,0.264851,1.0,0.429501,0.354666,1.0,0.398836,0.428317,1.0,0.399978,0.455604,1.0,0.397103,0.470937,1.0,0.376498,0.471363,1.0,0.388238,0.473493,1.0,0.380332,0.487123,1.0,0.366675,0.484994,1.0,0.384405,0.467530,1.0,0.372904,0.483716,1.0,0.365717,0.482012,1.0,0.382009,0.460715,1.0,0.372425,0.471363,1.0,0.364039,0.470511,1.0,0.380811,0.452195,1.0,0.372425,0.459011,1.0,0.365238,0.458159,1.0,0.514528,0.264788,1.0,0.530604,0.264735,1.0,0.550604,0.341117,1.0,0.579656,0.259320,1.0,0.579042,0.242580,1.0,0.581484,0.226413,1.0,0.584146,0.218921,1.0,0.592130,0.225230,1.0,0.597453,0.224442,1.0,0.592130,0.221287,1.0,0.596120,0.239426,1.0,0.599229,0.230751,1.0,0.592130,0.225624,1.0,0.597229,0.246129,1.0,0.599229,0.234694,1.0,0.594125,0.230751,1.0,0.595016,0.252044,1.0,0.599448,0.247312,1.0,0.597453,0.242974,1.0,0.461715,0.447512,1.0,0.461715,0.447512,1.0,0.495346,0.638120,1.0,0.472416,0.796356,1.0,0.472416,0.796356,1.0,0.500023,0.460978,1.0,0.500023,0.460978,1.0,0.550615,0.583653,1.0,0.470882,0.640841,1.0,0.470882,0.640841,1.0
0.481627,0.451513,1.0,0.493151,0.313451,1.0,0.489310,0.359472,1.0,0.496993,0.267431,1.0,0.492385,0.180313,1.0,0.496895,0.166719,1.0,0.496895,0.166719,1.0,0.483116,0.166677,1.0,0.483116,0.166677,1.0,0.483152,0.267440,1.0,0.469312,0.267450,1.0,0.432506,0.349344,1.0,0.403424,0.425698,1.0,0.405076,0.448203,1.0,0.406806,0.467815,1.0,0.411781,0.470506,1.0,0.396207,0.471276,1.0,0.389718,0.482812,1.0,0.388420,0.485119,1.0,0.391881,0.465507,1.0,0.384094,0.475506,1.0,0.377389,0.473582,1.0,0.389502,0.460508,1.0,0.379335,0.470891,1.0,0.377172,0.471660,1.0,0.387555,0.455125,1.0,0.378470,0.458585,1.0,0.376523,0.459355,1.0,0.513819,0.266115,1.0,0.530646,0.264800,1.0,0.547552,0.343894,1.0,0.581203,0.270152,1.0,0.580771,0.252009,1.0,0.584693,0.233818,1.0,0.588172,0.226850,1.0,0.595141,0.241559,1.0,0.601891,0.236140,1.0,0.596448,0.231495,1.0,0.597755,0.250074,1.0,0.603417,0.241946,1.0,0.596448,0.235753,1.0,0.599714,0.257042,1.0,0.603417,0.247365,1.0,0.598188,0.241559,1.0,0.597318,0.262460,1.0,0.602760,0.258977,1.0,0.600365,0.253557,1.0,0.461725,0.447457,1.0,0.461725,0.447457,1.0,0.490793,0.638160,1.0,0.489296,0.809896,1.0,0.489296,0.809896,1.0,0.501530,0.455569,1.0,0.501530,0.455569,1.0,0.533677,0.618942,1.0,0.463227,0.673567,1.0,0.463227,0.673567,1.0
0.486170,0.458290,1.0,0.495401,0.317276,1.0,0.492324,0.364281,1.0,0.498479,0.270271,1.0,0.494629,0.184406,1.0,0.496961,0.172181,1.0,0.496961,0.172181,1.0,0.483140,0.172137,1.0,0.483140,0.172137,1.0,0.483151,0.270268,1.0,0.467824,0.270264,1.0,0.434087,0.357405,1.0,0.409573,0.428367,1.0,0.409342,0.458769,1.0,0.405849,0.471576,1.0,0.400610,0.478949,1.0,0.401920,0.471964,1.0,0.394717,0.483218,1.0,0.393626,0.486711,1.0,0.398209,0.467307,1.0,0.388605,0.471964,1.0,0.383584,0.479725,1.0,0.395372,0.459545,1.0,0.386422,0.470023,1.0,0.382929,0.471576,1.0,0.393626,0.453725,1.0,0.387295,0.458381,1.0,0.383366,0.459545,1.0,0.515341,0.270291,1.0,0.532203,0.270311,1.0,0.545948,0.357364,1.0,0.579734,0.275806,1.0,0.582292,0.260040,1.0,0.588563,0.243938,1.0,0.592510,0.240222,1.0,0.596224,0.247241,1.0,0.606677,0.257563,1.0,0.612016,0.260453,1.0,0.597385,0.257976,1.0,0.605281,0.261279,1.0,0.600870,0.254673,1.0,0.597156,0.267058,1.0,0.603656,0.266233,1.0,0.601104,0.260866,1.0,0.597385,0.279857,1.0,0.602031,0.274078,1.0,0.600635,0.270774,1.0,0.466245,0.452859,1.0,0.466245,0.452859,1.0,0.486258,0.640889,1.0,0.507622,0.815302,1.0,0.507622,0.815302,1.0,0.506094,0.463721,1.0,0.506094,0.463721,1.0,0.515350,0.640894,1.0,0.458628,0.728132,1.0,0.458628,0.728132,1.0
0.486170,0.458290,1.0,0.495401,0.317276,1.0,0.492324,0.364281,1.0,0.498479,0.270271,1.0,0.494629,0.184406,1.0,0.496961,0.172181,1.0,0.496961,0.172181,1.0,0.483140,0.172137,1.0,0.483140,0.172137,1.0,0.483151,0.270268,1.0,0.467824,0.270264,1.0,0.434087,0.357405,1.0,0.409573,0.428367,1.0,0.409342,0.458769,1.0,0.405849,0.471576,1.0,0.400610,0.478949,1.0,0.401920,0.471964,1.0,0.394717,0.483218,1.0,0.393626,0.486711,1.0,0.398209,0.467307,1.0,0.388605,0.471964,1.0,0.383584,0.479725,1.0,0.395372,0.459545,1.0,0.386422,0.470023,1.0,0.382929,0.471576,1.0,0.393626,0.453725,1.0,0.387295,0.458381,1.0,0.383366,0.459545,1.0,0.515341,0.270291,1.0,0.532203,0.270311,1.0,0.545948,0.357364,1.0,0.579734,0.275806,1.0,0.582292,0.260040,1.0,0.588563,0.243938,1.0,0.592510,0.240222,1.0,0.596224,0.247241,1.0,0.606677,0.257563,1.0,0.612016,0.260453,1.0,0.597385,0.257976,1.0,0.605281,0.261279,1.0,0.600870,0.254673,1.0,0.597156,0.267058,1.0,0.603656,0.266233,1.0,0.601104,0.260866,1.0,0.597385,0.279857,1.0,0.602031,0.274078,1.0,0.600635,0.270774,1.0,0.466245,0.452859,1.0,0.466245,0.452859,1.0,0.486258,0.640889,1.0,0.507622,0.815302,1.0,0.507622,0.815302,1.0,0.506094,0.463721,1.0,0.506094,0.463721,1.0,0.515350,0.640894,1.0,0.458628,0.728132,1.0,0.458628,0.728132,1.0
0.486221,0.473329,1.0,0.495424,0.335343,1.0,0.492356,0.381338,1.0,0.498492,0.289348,1.0,0.496930,0.203461,1.0,0.499990,0.188530,1.0,0.499990,0.188530,1.0,0.484657,0.188504,1.0,0.484657,0.188504,1.0,0.483162,0.287984,1.0,0.467833,0.286619,1.0,0.437171,0.365682,1.0,0.412655,0.439182,1.0,0.413681,0.451107,1.0,0.416257,0.457801,1.0,0.416653,0.457096,1.0,0.415068,0.458858,1.0,0.414473,0.461677,1.0,0.414869,0.453574,1.0,0.406943,0.474006,1.0,0.410312,0.467666,1.0,0.409717,0.470131,1.0,0.403772,0.470484,1.0,0.403970,0.468370,1.0,0.409123,0.468370,1.0,0.401196,0.457096,1.0,0.405556,0.481405,1.0,0.405556,0.479292,1.0,0.516090,0.290635,1.0,0.533688,0.291922,1.0,0.544500,0.368372,1.0,0.575115,0.289316,1.0,0.577510,0.267922,1.0,0.583896,0.255012,1.0,0.589833,0.249535,1.0,0.595557,0.258533,1.0,0.602161,0.261663,1.0,0.608323,0.267531,1.0,0.596880,0.270660,1.0,0.602380,0.270660,1.0,0.598859,0.267531,1.0,0.597760,0.277703,1.0,0.602380,0.276920,1.0,0.598641,0.274964,1.0,0.597760,0.287092,1.0,0.601057,0.285527,1.0,0.598417,0.280832,1.0,0.466293,0.469255,1.0,0.466293,0.469255,1.0,0.487721,0.649087,1.0,0.510798,0.817982,1.0,0.510798,0.817982,1.0,0.506148,0.477403,1.0,0.506148,0.477403,1.0,0.498522,0.659886,1.0,0.450979,0.758127,1.0,0.450979,0.758127,1.0
0.488456,0.495075,1.0,0.497120,0.357115,1.0,0.494232,0.403102,1.0,0.500008,0.311129,1.0,0.500721,0.225237,1.0,0.504571,0.210288,1.0,0.504571,0.210288,1.0,0.486180,0.210344,1.0,0.486180,0.210344,1.0,0.485406,0.309775,1.0,0.470804,0.308420,1.0,0.444795,0.381961,1.0,0.421789,0.433781,1.0,0.418319,0.441957,1.0,0.417423,0.443869,1.0,0.416347,0.452156,1.0,0.413659,0.466178,1.0,0.412583,0.444507,1.0,0.411328,0.445144,1.0,0.410253,0.464903,1.0,0.413300,0.449606,1.0,0.411328,0.445144,1.0,0.409894,0.466815,1.0,0.407922,0.469045,1.0,0.411149,0.467133,1.0,0.411149,0.469364,1.0,0.410073,0.473188,1.0,0.409536,0.474463,1.0,0.516866,0.311159,1.0,0.533724,0.311190,1.0,0.545990,0.379322,1.0,0.570609,0.291996,1.0,0.574026,0.266763,1.0,0.578281,0.252430,1.0,0.583656,0.245661,1.0,0.590599,0.252430,1.0,0.602917,0.256809,1.0,0.595974,0.251633,1.0,0.592391,0.261587,1.0,0.602245,0.260393,1.0,0.596422,0.257606,1.0,0.593286,0.269948,1.0,0.601125,0.267559,1.0,0.597318,0.263976,1.0,0.592839,0.277910,1.0,0.599557,0.277115,1.0,0.597094,0.273133,1.0,0.469326,0.490989,1.0,0.469326,0.490989,1.0,0.490809,0.662713,1.0,0.518389,0.839925,1.0,0.518389,0.839925,1.0,0.507586,0.499160,1.0,0.507586,0.499160,1.0,0.486230,0.662666,1.0,0.444807,0.774376,1.0,0.444807,0.774376,1.0
0.489222,0.499219,1.0,0.501884,0.360264,1.0,0.497663,0.406582,1.0,0.506104,0.313945,1.0,0.502274,0.228062,1.0,0.507587,0.218516,1.0,0.507587,0.218516,1.0,0.489270,0.221239,1.0,0.489270,0.221239,1.0,0.488497,0.315211,1.0,0.470890,0.316476,1.0,0.446347,0.384834,1.0,0.424886,0.439212,1.0,0.422322,0.451207,1.0,0.415461,0.446744,1.0,0.415629,0.444068,1.0,0.414290,0.446150,1.0,0.414792,0.447340,1.0,0.415796,0.444959,1.0,0.414792,0.444959,1.0,0.414959,0.455968,1.0,0.414624,0.456265,1.0,0.414624,0.457455,1.0,0.414290,0.456859,1.0,0.414457,0.462809,1.0,0.413118,0.450909,1.0,0.411278,0.469355,1.0,0.411110,0.469355,1.0,0.522224,0.313896,1.0,0.538344,0.313847,1.0,0.555156,0.373791,1.0,0.576651,0.281169,1.0,0.575703,0.261630,1.0,0.580068,0.245703,1.0,0.586729,0.237943,1.0,0.590172,0.241619,1.0,0.594078,0.242027,1.0,0.600969,0.238351,1.0,0.592474,0.251419,1.0,0.599135,0.243252,1.0,0.600510,0.239576,1.0,0.594078,0.268981,1.0,0.599823,0.252237,1.0,0.599365,0.244885,1.0,0.593849,0.270206,1.0,0.601432,0.267347,1.0,0.601661,0.255095,1.0,0.470824,0.493799,1.0,0.470824,0.493799,1.0,0.496928,0.665496,1.0,0.518408,0.842581,1.0,0.518408,0.842581,1.0,0.507620,0.504640,1.0,0.507620,0.504640,1.0,0.486257,0.662657,1.0,0.443267,0.774491,1.0,0.443267,0.774491,1.0
0.490808,0.493678,1.0,0.503396,0.354729,1.0,0.499200,0.401045,1.0,0.507592,0.308413,1.0,0.502284,0.218473,1.0,0.507703,0.204844,1.0,0.507703,0.204844,1.0,0.492362,0.207471,1.0,0.492362,0.207471,1.0,0.489244,0.309731,1.0,0.470896,0.311049,1.0,0.447906,0.382024,1.0,0.435566,0.425554,1.0,0.438422,0.439018,1.0,0.434029,0.438417,1.0,0.433521,0.437515,1.0,0.432845,0.436013,1.0,0.428451,0.438116,1.0,0.427268,0.439318,1.0,0.431831,0.439018,1.0,0.429634,0.441421,1.0,0.427268,0.444125,1.0,0.432169,0.440820,1.0,0.430479,0.442923,1.0,0.426761,0.447431,1.0,0.436564,0.438417,1.0,0.432845,0.440820,1.0,0.426761,0.452839,1.0,0.525252,0.304345,1.0,0.542911,0.300277,1.0,0.564396,0.357460,1.0,0.582766,0.275661,1.0,0.580750,0.265900,1.0,0.578932,0.266977,1.0,0.607604,0.236820,1.0,0.592661,0.238616,1.0,0.602557,0.222819,1.0,0.607406,0.215281,1.0,0.596094,0.242923,1.0,0.607203,0.230718,1.0,0.603161,0.235025,1.0,0.599328,0.249744,1.0,0.607807,0.231794,1.0,0.603568,0.237897,1.0,0.602557,0.255848,1.0,0.608818,0.243642,1.0,0.605182,0.237897,1.0,0.472379,0.490924,1.0,0.472379,0.490924,1.0,0.503094,0.649102,1.0,0.521391,0.831658,1.0,0.521391,0.831658,1.0,0.509237,0.496431,1.0,0.509237,0.496431,1.0,0.484682,0.651833,1.0,0.444805,0.774360,1.0,0.444805,0.774360,1.0
0.500758,0.471931,1.0,0.507036,0.328833,1.0,0.504943,0.376533,1.0,0.509129,0.281134,1.0,0.503069,0.198036,1.0,0.509189,0.183177,1.0,0.509189,0.183177,1.0,0.495329,0.185696,1.0,0.495329,0.185696,1.0,0.490749,0.285185,1.0,0.472370,0.289236,1.0,0.457078,0.362969,1.0,0.447866,0.406581,1.0,0.445799,0.419819,1.0,0.447745,0.422125,1.0,0.446772,0.420683,1.0,0.447745,0.421837,1.0,0.446609,0.422702,1.0,0.446447,0.422990,1.0,0.445799,0.420107,1.0,0.444826,0.421837,1.0,0.445799,0.423279,1.0,0.445799,0.420683,1.0,0.444177,0.422125,1.0,0.445474,0.423567,1.0,0.444339,0.422413,1.0,0.445636,0.424144,1.0,0.444502,0.422702,1.0,0.527538,0.277096,1.0,0.545948,0.273057,1.0,0.570479,0.322043,1.0,0.593542,0.272941,1.0,0.600271,0.258562,1.0,0.618750,0.244744,1.0,0.618161,0.243961,1.0,0.588682,0.270034,1.0,0.589562,0.271338,1.0,0.592792,0.268209,1.0,0.606724,0.253608,1.0,0.604672,0.263777,1.0,0.597042,0.274467,1.0,0.606135,0.266124,1.0,0.605109,0.265863,1.0,0.597187,0.274728,1.0,0.606281,0.266645,1.0,0.605255,0.266384,1.0,0.619339,0.264038,1.0,0.481584,0.469208,1.0,0.481584,0.469208,1.0,0.507665,0.640778,1.0,0.521411,0.815396,1.0,0.521411,0.815396,1.0,0.519932,0.474654,1.0,0.519932,0.474654,1.0,0.484742,0.635452,1.0,0.449391,0.755360,1.0,0.449391,0.755360,1.0
0.500758,0.471931,1.0,0.507036,0.328833,1.0,0.504943,0.376533,1.0,0.509129,0.281134,1.0,0.503069,0.198036,1.0,0.509189,0.183177,1.0,0.509189,0.183177,1.0,0.495329,0.185696,1.0,0.495329,0.185696,1.0,0.490749,0.285185,1.0,0.472370,0.289236,1.0,0.457078,0.362969,1.0,0.447866,0.406581,1.0,0.445799,0.419819,1.0,0.447745,0.422125,1.0,0.446772,0.420683,1.0,0.447745,0.421837,1.0,0.446609,0.422702,1.0,0.446447,0.422990,1.0,0.445799,0.420107,1.0,0.444826,0.421837,1.0,0.445799,0.423279,1.0,0.445799,0.420683,1.0,0.444177,0.422125,1.0,0.445474,0.423567,1.0,0.444339,0.422413,1.0,0.445636,0.424144,1.0,0.444502,0.422702,1.0,0.527538,0.277096,1.0,0.545948,0.273057,1.0,0.570479,0.322043,1.0,0.593542,0.272941,1.0,0.600271,0.258562,1.0,0.618750,0.244744,1.0,0.618161,0.243961,1.0,0.588682,0.270034,1.0,0.589562,0.271338,1.0,0.592792,0.268209,1.0,0.606724,0.253608,1.0,0.604672,0.263777,1.0,0.597042,0.274467,1.0,0.606135,0.266124,1.0,0.605109,0.265863,1.0,0.597187,0.274728,1.0,0.606281,0.266645,1.0,0.605255,0.266384,1.0,0.619339,0.264038,1.0,0.481584,0.469208,1.0,0.481584,0.469208,1.0,0.507665,0.640778,1.0,0.521411,0.815396,1.0,0.521411,0.815396,1.0,0.519932,0.474654,1.0,0.519932,0.474654,1.0,0.484742,0.635452,1.0,0.449391,0.755360,1.0,0.449391,0.755360,1.0
0.507653,0.448769,1.0,0.509983,0.302683,1.0,0.509206,0.351378,1.0,0.510760,0.253987,1.0,0.503073,0.181689,1.0,0.509269,0.166709,1.0,0.509269,0.166709,1.0,0.493881,0.169406,1.0,0.493881,0.169406,1.0,0.492362,0.262094,1.0,0.473965,0.270202,1.0,0.469316,0.357440,1.0,0.469303,0.417398,1.0,0.462608,0.419504,1.0,0.472734,0.415004,1.0,0.471469,0.417575,1.0,0.471469,0.433006,1.0,0.469841,0.440720,1.0,0.468033,0.405681,1.0,0.471107,0.429791,1.0,0.471107,0.428826,1.0,0.467671,0.423040,1.0,0.472554,0.430433,1.0,0.471288,0.432362,1.0,0.469841,0.423040,1.0,0.470022,0.437506,1.0,0.470745,0.438149,1.0,0.471107,0.438470,1.0,0.529169,0.251173,1.0,0.547578,0.248359,1.0,0.576651,0.289327,1.0,0.605823,0.278410,1.0,0.604427,0.285453,1.0,0.611641,0.291502,1.0,0.615859,0.295856,1.0,0.619125,0.268517,1.0,0.620490,0.267549,1.0,0.633281,0.303841,1.0,0.622391,0.276018,1.0,0.629198,0.289566,1.0,0.632464,0.300695,1.0,0.628109,0.277953,1.0,0.630557,0.291985,1.0,0.632193,0.295131,1.0,0.630964,0.277953,1.0,0.631375,0.300454,1.0,0.633552,0.303841,1.0,0.484696,0.447393,1.0,0.484696,0.447393,1.0,0.509239,0.624635,1.0,0.521552,0.818044,1.0,0.521552,0.818044,1.0,0.530609,0.450145,1.0,0.530609,0.450145,1.0,0.496963,0.619193,1.0,0.460131,0.733630,1.0,0.460131,0.733630,1.0
0.513020,0.439225,1.0,0.515887,0.290050,1.0,0.514931,0.339775,1.0,0.516842,0.240325,1.0,0.503122,0.165468,1.0,0.510786,0.161195,1.0,0.510786,0.161195,1.0,0.495394,0.161246,1.0,0.495394,0.161246,1.0,0.499224,0.248460,1.0,0.481606,0.256595,1.0,0.483059,0.362886,1.0,0.487735,0.403895,1.0,0.487961,0.394027,1.0,0.488181,0.389736,1.0,0.475456,0.408848,1.0,0.479186,0.419769,1.0,0.477431,0.421719,1.0,0.476114,0.419379,1.0,0.479186,0.418989,1.0,0.478528,0.421330,1.0,0.476114,0.418989,1.0,0.479186,0.418599,1.0,0.478966,0.419379,1.0,0.476114,0.418599,1.0,0.472823,0.424840,1.0,0.473920,0.412358,1.0,0.473920,0.412358,1.0,0.533702,0.232135,1.0,0.550563,0.223944,1.0,0.581177,0.254002,1.0,0.613417,0.297462,1.0,0.613005,0.310925,1.0,0.618615,0.322945,1.0,0.623396,0.333206,1.0,0.627521,0.303008,1.0,0.634776,0.303302,1.0,0.637250,0.305647,1.0,0.632964,0.304768,1.0,0.638240,0.321772,1.0,0.638406,0.338484,1.0,0.636755,0.309752,1.0,0.639724,0.322359,1.0,0.638568,0.335845,1.0,0.641375,0.310631,1.0,0.644344,0.312977,1.0,0.646484,0.317375,1.0,0.492327,0.439208,1.0,0.492327,0.439208,1.0,0.515319,0.627223,1.0,0.523016,0.815282,1.0,0.523016,0.815282,1.0,0.533714,0.439242,1.0,0.533714,0.439242,1.0,0.519897,0.602781,1.0,0.470888,0.700860,1.0,0.470888,0.700860,1.0
0.518392,0.435139,1.0,0.519548,0.280764,1.0,0.519162,0.332222,1.0,0.519933,0.229306,1.0,0.505405,0.162619,1.0,0.515327,0.158516,1.0,0.515327,0.158516,1.0,0.496957,0.158554,1.0,0.496957,0.158554,1.0,0.502279,0.240212,1.0,0.484624,0.251119,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.537550,0.218401,1.0,0.555167,0.207497,1.0,0.581297,0.248462,1.0,0.618057,0.313978,1.0,0.617458,0.332957,1.0,0.622552,0.349177,1.0,0.627854,0.362379,1.0,0.636130,0.331826,1.0,0.644620,0.342388,1.0,0.651406,0.349177,1.0,0.638677,0.328431,1.0,0.647375,0.337106,1.0,0.643557,0.363888,1.0,0.638891,0.327677,1.0,0.647375,0.334844,1.0,0.643135,0.362756,1.0,0.639099,0.328431,1.0,0.646104,0.335975,1.0,0.643344,0.353326,1.0,0.496934,0.433746,1.0,0.496934,0.433746,1.0,0.519926,0.624547,1.0,0.530609,0.815383,1.0,0.530609,0.815383,1.0,0.539849,0.436531,1.0,0.539849,0.436531,1.0,0.532130,0.632711,1.0,0.477033,0.659980,1.0,0.477033,0.659980,1.0
0.522976,0.439213,1.0,0.521842,0.279804,1.0,0.522220,0.332941,1.0,0.521464,0.226669,1.0,0.509959,0.161346,1.0,0.519862,0.158412,1.0,0.519862,0.158412,1.0,0.499979,0.158475,1.0,0.499979,0.158475,1.0,0.503099,0.238898,1.0,0.484734,0.251127,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.539096,0.215716,1.0,0.556729,0.204763,1.0,0.584297,0.251193,1.0,0.621073,0.335572,1.0,0.620484,0.351234,1.0,0.625380,0.371684,1.0,0.630766,0.386043,1.0,0.639823,0.357761,1.0,0.647161,0.371684,1.0,0.651812,0.382997,1.0,0.642510,0.352540,1.0,0.650344,0.368204,1.0,0.652057,0.379081,1.0,0.643490,0.348623,1.0,0.650099,0.361242,1.0,0.652792,0.370814,1.0,0.643490,0.347319,1.0,0.649854,0.354715,1.0,0.651568,0.363853,1.0,0.499993,0.441920,1.0,0.499993,0.441920,1.0,0.519995,0.643601,1.0,0.532193,0.812623,1.0,0.532193,0.812623,1.0,0.545958,0.436505,1.0,0.545958,0.436505,1.0,0.544458,0.643680,1.0,0.495342,0.608142,1.0,0.495342,0.608142,1.0
0.531401,0.435164,1.0,0.525092,0.278729,1.0,0.527195,0.330874,1.0,0.522990,0.226584,1.0,0.513028,0.159888,1.0,0.521505,0.153025,1.0,0.521505,0.153025,1.0,0.506081,0.150329,1.0,0.506081,0.150329,1.0,0.506136,0.238854,1.0,0.489282,0.251123,1.0,0.495352,0.335674,1.0,0.495337,0.390213,1.0,0.501137,0.389137,1.0,0.509580,0.401644,1.0,0.491463,0.408211,1.0,0.492519,0.409149,1.0,0.491815,0.410712,1.0,0.490056,0.409149,1.0,0.490408,0.423220,1.0,0.489704,0.421656,1.0,0.485659,0.420406,1.0,0.490408,0.424158,1.0,0.488649,0.422281,1.0,0.487770,0.422594,1.0,0.490232,0.424158,1.0,0.487418,0.423532,1.0,0.487418,0.424783,1.0,0.540620,0.212993,1.0,0.558250,0.199402,1.0,0.588906,0.272953,1.0,0.621120,0.360079,1.0,0.621469,0.377781,1.0,0.626490,0.396905,1.0,0.632943,0.411354,1.0,0.640594,0.383731,1.0,0.648240,0.402430,1.0,0.650156,0.413904,1.0,0.644656,0.380331,1.0,0.652307,0.399455,1.0,0.652068,0.410504,1.0,0.646568,0.376931,1.0,0.653500,0.395205,1.0,0.652068,0.404555,1.0,0.648240,0.378631,1.0,0.651828,0.386706,1.0,0.652068,0.397330,1.0,0.507677,0.439237,1.0,0.507677,0.439237,1.0,0.521505,0.629977,1.0,0.532250,0.815280,1.0,0.532250,0.815280,1.0,0.555125,0.431092,1.0,0.555125,0.431092,1.0,0.556635,0.643735,1.0,0.519953,0.602733,1.0,0.519953,0.602733,1.0
0.531401,0.435164,1.0,0.525092,0.278729,1.0,0.527195,0.330874,1.0,0.522990,0.226584,1.0,0.513028,0.159888,1.0,0.521505,0.153025,1.0,0.521505,0.153025,1.0,0.506081,0.150329,1.0,0.506081,0.150329,1.0,0.506136,0.238854,1.0,0.489282,0.251123,1.0,0.495352,0.335674,1.0,0.495337,0.390213,1.0,0.501137,0.389137,1.0,0.509580,0.401644,1.0,0.491463,0.408211,1.0,0.492519,0.409149,1.0,0.491815,0.410712,1.0,0.490056,0.409149,1.0,0.490408,0.423220,1.0,0.489704,0.421656,1.0,0.485659,0.420406,1.0,0.490408,0.424158,1.0,0.488649,0.422281,1.0,0.487770,0.422594,1.0,0.490232,0.424158,1.0,0.487418,0.423532,1.0,0.487418,0.424783,1.0,0.540620,0.212993,1.0,0.558250,0.199402,1.0,0.588906,0.272953,1.0,0.621120,0.360079,1.0,0.621469,0.377781,1.0,0.626490,0.396905,1.0,0.632943,0.411354,1.0,0.640594,0.383731,1.0,0.648240,0.402430,1.0,0.650156,0.413904,1.0,0.644656,0.380331,1.0,0.652307,0.399455,1.0,0.652068,0.410504,1.0,0.646568,0.376931,1.0,0.653500,0.395205,1.0,0.652068,0.404555,1.0,0.648240,0.378631,1.0,0.651828,0.386706,1.0,0.652068,0.397330,1.0,0.507677,0.439237,1.0,0.507677,0.439237,1.0,0.521505,0.629977,1.0,0.532250,0.815280,1.0,0.532250,0.815280,1.0,0.555125,0.431092,1.0,0.555125,0.431092,1.0,0.556635,0.643735,1.0,0.519953,0.602733,1.0,0.519953,0.602733,1.0
0.532980,0.431078,1.0,0.527796,0.277661,1.0,0.529524,0.328800,1.0,0.526068,0.226521,1.0,0.515381,0.157080,1.0,0.523047,0.147654,1.0,0.523047,0.147654,1.0,0.507665,0.147681,1.0,0.507665,0.147681,1.0,0.509981,0.238805,1.0,0.493895,0.251089,1.0,0.507659,0.343874,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.542190,0.212944,1.0,0.558312,0.199366,1.0,0.585875,0.292119,1.0,0.619521,0.390154,1.0,0.617198,0.411739,1.0,0.621411,0.430931,1.0,0.629047,0.441698,1.0,0.643266,0.413611,1.0,0.646427,0.445912,1.0,0.643005,0.454338,1.0,0.645901,0.420633,1.0,0.646161,0.446380,1.0,0.640635,0.452933,1.0,0.646427,0.423442,1.0,0.645375,0.444975,1.0,0.640370,0.449656,1.0,0.644583,0.425782,1.0,0.644318,0.442635,1.0,0.640635,0.444507,1.0,0.509190,0.436478,1.0,0.509190,0.436478,1.0,0.526047,0.635459,1.0,0.533776,0.817948,1.0,0.533776,0.817948,1.0,0.556771,0.425679,1.0,0.556771,0.425679,1.0,0.559792,0.646326,1.0,0.529115,0.594558,1.0,0.529115,0.594558,1.0
0.540596,0.437888,1.0,0.534258,0.277373,1.0,0.536371,0.330878,1.0,0.532146,0.223868,1.0,0.519147,0.144992,1.0,0.529094,0.144929,1.0,0.529094,0.144929,1.0,0.509221,0.144940,1.0,0.509221,0.144940,1.0,0.514543,0.236209,1.0,0.496940,0.248551,1.0,0.510762,0.332952,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.547495,0.208917,1.0,0.562844,0.193967,1.0,0.582714,0.311191,1.0,0.608807,0.422880,1.0,0.611599,0.433610,1.0,0.601339,0.431638,1.0,0.590245,0.435089,1.0,0.600781,0.437554,1.0,0.587474,0.460723,1.0,0.587198,0.461216,1.0,0.605219,0.451356,1.0,0.590526,0.467625,1.0,0.587474,0.472555,1.0,0.609932,0.464667,1.0,0.597458,0.466639,1.0,0.598010,0.471569,1.0,0.635167,0.449878,1.0,0.598844,0.470090,1.0,0.598844,0.484386,1.0,0.516822,0.441986,1.0,0.516822,0.441986,1.0,0.533661,0.640852,1.0,0.542901,0.812523,1.0,0.542901,0.812523,1.0,0.564370,0.433791,1.0,0.564370,0.433791,1.0,0.568932,0.654496,1.0,0.549062,0.600101,1.0,0.549062,0.600101,1.0
0.543706,0.433755,1.0,0.536239,0.272333,1.0,0.538728,0.326140,1.0,0.533750,0.218526,1.0,0.522990,0.144931,1.0,0.532151,0.142154,1.0,0.532151,0.142154,1.0,0.513776,0.142237,1.0,0.513776,0.142237,1.0,0.519940,0.232128,1.0,0.506130,0.245730,1.0,0.519907,0.354691,1.0,0.509198,0.420100,1.0,0.504512,0.437179,1.0,0.503129,0.439228,1.0,0.502668,0.422430,1.0,0.502207,0.421610,1.0,0.502207,0.422020,1.0,0.502207,0.422430,1.0,0.502207,0.423659,1.0,0.501977,0.425707,1.0,0.502437,0.426527,1.0,0.501977,0.423249,1.0,0.501977,0.425298,1.0,0.502898,0.439228,1.0,0.501746,0.422430,1.0,0.501746,0.422840,1.0,0.502898,0.438818,1.0,0.549076,0.202213,1.0,0.564401,0.185901,1.0,0.575094,0.313941,1.0,0.591927,0.436494,1.0,0.583307,0.456881,1.0,0.585047,0.470251,1.0,0.586203,0.483106,1.0,0.596901,0.503160,1.0,0.595745,0.501618,1.0,0.594302,0.503160,1.0,0.606740,0.471279,1.0,0.603557,0.483106,1.0,0.607896,0.485677,1.0,0.609052,0.482592,1.0,0.607896,0.495447,1.0,0.600661,0.493390,1.0,0.610208,0.487734,1.0,0.607896,0.501618,1.0,0.606448,0.507274,1.0,0.519984,0.436488,1.0,0.519984,0.436488,1.0,0.535318,0.632756,1.0,0.545964,0.809817,1.0,0.545964,0.809817,1.0,0.567427,0.431021,1.0,0.567427,0.431021,1.0,0.570474,0.651800,1.0,0.559776,0.608226,1.0,0.559776,0.608226,1.0
0.547523,0.431090,1.0,0.540623,0.267588,1.0,0.542923,0.322088,1.0,0.538323,0.213087,1.0,0.527577,0.139500,1.0,0.535250,0.139369,1.0,0.535250,0.139369,1.0,0.519844,0.139389,1.0,0.519844,0.139389,1.0,0.524512,0.226684,1.0,0.510702,0.240281,1.0,0.521437,0.346530,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.552872,0.199480,1.0,0.567422,0.185873,1.0,0.568922,0.316693,1.0,0.559849,0.447303,1.0,0.558661,0.480212,1.0,0.561380,0.512397,1.0,0.567411,0.516152,1.0,0.567714,0.510788,1.0,0.567714,0.515080,1.0,0.572240,0.520980,1.0,0.570432,0.507033,1.0,0.574354,0.514006,1.0,0.577068,0.513470,1.0,0.572542,0.505960,1.0,0.577068,0.509715,1.0,0.577370,0.512397,1.0,0.577370,0.507033,1.0,0.579484,0.507569,1.0,0.580089,0.507569,1.0,0.524516,0.433799,1.0,0.524516,0.433799,1.0,0.544385,0.640814,1.0,0.549094,0.801701,1.0,0.549094,0.801701,1.0,0.570531,0.428381,1.0,0.570531,0.428381,1.0,0.570490,0.651845,1.0,0.561302,0.605490,1.0,0.561302,0.605490,1.0
0.555974,0.443263,1.0,0.547376,0.264526,1.0,0.550242,0.324105,1.0,0.544510,0.204947,1.0,0.531466,0.139421,1.0,0.539828,0.136713,1.0,0.539828,0.136713,1.0,0.521448,0.136750,1.0,0.521448,0.136750,1.0,0.533000,0.217153,1.0,0.521490,0.229358,1.0,0.530625,0.341140,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.555974,0.194007,1.0,0.567437,0.183067,1.0,0.558333,0.319309,1.0,0.533667,0.433731,1.0,0.529203,0.456894,1.0,0.533167,0.493132,1.0,0.541380,0.496656,1.0,0.533453,0.492629,1.0,0.530052,0.498166,1.0,0.540531,0.499172,1.0,0.532604,0.493132,1.0,0.536000,0.494643,1.0,0.542792,0.510245,1.0,0.531750,0.493636,1.0,0.535713,0.491119,1.0,0.544776,0.505716,1.0,0.531469,0.499172,1.0,0.530620,0.499172,1.0,0.542792,0.500179,1.0,0.532250,0.444604,1.0,0.532250,0.444604,1.0,0.545990,0.646302,1.0,0.556641,0.807116,1.0,0.556641,0.807116,1.0,0.579698,0.441923,1.0,0.579698,0.441923,1.0,0.570536,0.657187,1.0,0.562865,0.610862,1.0,0.562865,0.610862,1.0
0.555974,0.443263,1.0,0.547376,0.264526,1.0,0.550242,0.324105,1.0,0.544510,0.204947,1.0,0.531466,0.139421,1.0,0.539828,0.136713,1.0,0.539828,0.136713,1.0,0.521448,0.136750,1.0,0.521448,0.136750,1.0,0.533000,0.217153,1.0,0.521490,0.229358,1.0,0.530625,0.341140,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.555974,0.194007,1.0,0.567437,0.183067,1.0,0.558333,0.319309,1.0,0.533667,0.433731,1.0,0.529203,0.456894,1.0,0.533167,0.493132,1.0,0.541380,0.496656,1.0,0.533453,0.492629,1.0,0.530052,0.498166,1.0,0.540531,0.499172,1.0,0.532604,0.493132,1.0,0.536000,0.494643,1.0,0.542792,0.510245,1.0,0.531750,0.493636,1.0,0.535713,0.491119,1.0,0.544776,0.505716,1.0,0.531469,0.499172,1.0,0.530620,0.499172,1.0,0.542792,0.500179,1.0,0.532250,0.444604,1.0,0.532250,0.444604,1.0,0.545990,0.646302,1.0,0.556641,0.807116,1.0,0.556641,0.807116,1.0,0.579698,0.441923,1.0,0.579698,0.441923,1.0,0.570536,0.657187,1.0,0.562865,0.610862,1.0,0.562865,0.610862,1.0
0.562859,0.436515,1.0,0.554809,0.262727,1.0,0.557492,0.320657,1.0,0.552125,0.204798,1.0,0.536823,0.136681,1.0,0.545943,0.133950,1.0,0.545943,0.133950,1.0,0.526042,0.133935,1.0,0.526042,0.133935,1.0,0.542935,0.215734,1.0,0.533745,0.226669,1.0,0.533755,0.335743,1.0,0.518352,0.403835,1.0,0.508317,0.411100,1.0,0.508767,0.408299,1.0,0.507867,0.409099,1.0,0.508542,0.405898,1.0,0.508317,0.408699,1.0,0.508092,0.409099,1.0,0.508542,0.409900,1.0,0.507416,0.414301,1.0,0.507191,0.410300,1.0,0.506066,0.405898,1.0,0.501339,0.423104,1.0,0.501565,0.423104,1.0,0.513944,0.416302,1.0,0.506966,0.410300,1.0,0.508767,0.414701,1.0,0.560549,0.192551,1.0,0.568974,0.180305,1.0,0.553677,0.313733,1.0,0.515306,0.403742,1.0,0.519221,0.430946,1.0,0.501519,0.419956,1.0,0.509106,0.415960,1.0,0.510230,0.435942,1.0,0.509668,0.409966,1.0,0.499833,0.458421,1.0,0.511072,0.438939,1.0,0.506577,0.459420,1.0,0.510230,0.479402,1.0,0.511354,0.437940,1.0,0.508544,0.471908,1.0,0.502081,0.458920,1.0,0.509668,0.406469,1.0,0.510510,0.406469,1.0,0.502081,0.458421,1.0,0.541380,0.439231,1.0,0.541380,0.439231,1.0,0.549052,0.649098,1.0,0.558187,0.812504,1.0,0.558187,0.812504,1.0,0.584339,0.433798,1.0,0.584339,0.433798,1.0,0.572047,0.659910,1.0,0.567469,0.618979,1.0,0.567469,0.618979,1.0
0.568966,0.432420,1.0,0.559800,0.259679,1.0,0.562855,0.317259,1.0,0.556745,0.202098,1.0,0.543659,0.129925,1.0,0.549036,0.125807,1.0,0.549036,0.125807,1.0,0.532182,0.128556,1.0,0.532182,0.128556,1.0,0.549078,0.212981,1.0,0.541411,0.223863,1.0,0.535318,0.319319,1.0,0.530646,0.349304,1.0,0.532677,0.341577,1.0,0.525339,0.355322,1.0,0.523359,0.356731,1.0,0.524943,0.353912,1.0,0.518204,0.354969,1.0,0.517609,0.357789,1.0,0.517609,0.348979,1.0,0.517015,0.350035,1.0,0.517015,0.348979,1.0,0.517411,0.349331,1.0,0.516420,0.348979,1.0,0.516618,0.348626,1.0,0.517609,0.347216,1.0,0.515825,0.346511,1.0,0.518402,0.346864,1.0,0.563622,0.189832,1.0,0.570500,0.177567,1.0,0.538349,0.311162,1.0,0.493845,0.382018,1.0,0.497451,0.384077,1.0,0.469864,0.414462,1.0,0.493253,0.387808,1.0,0.484557,0.399536,1.0,0.491154,0.388874,1.0,0.494752,0.416061,1.0,0.488155,0.413395,1.0,0.492953,0.424057,1.0,0.500749,0.424590,1.0,0.485456,0.414994,1.0,0.489954,0.428321,1.0,0.493253,0.437383,1.0,0.490554,0.394206,1.0,0.493253,0.386743,1.0,0.491154,0.453376,1.0,0.545995,0.436494,1.0,0.545995,0.436494,1.0,0.556656,0.659873,1.0,0.559755,0.812594,1.0,0.559755,0.812594,1.0,0.591937,0.428345,1.0,0.591937,0.428345,1.0,0.581198,0.659995,1.0,0.570589,0.621860,1.0,0.570589,0.621860,1.0
0.573565,0.437821,1.0,0.565548,0.248862,1.0,0.568220,0.311848,1.0,0.562875,0.185876,1.0,0.547505,0.124456,1.0,0.556651,0.120520,1.0,0.556651,0.120520,1.0,0.535266,0.123138,1.0,0.535266,0.123138,1.0,0.559031,0.192662,1.0,0.555187,0.199448,1.0,0.530656,0.303001,1.0,0.484653,0.346567,1.0,0.467617,0.358882,1.0,0.445590,0.367951,1.0,0.446285,0.375370,1.0,0.447445,0.374134,1.0,0.446981,0.369188,1.0,0.445822,0.378256,1.0,0.459038,0.373721,1.0,0.451850,0.373721,1.0,0.449532,0.379905,1.0,0.456023,0.385263,1.0,0.460429,0.387324,1.0,0.459270,0.386500,1.0,0.457183,0.388561,1.0,0.460429,0.389385,1.0,0.461820,0.397629,1.0,0.567451,0.180393,1.0,0.572026,0.174909,1.0,0.530615,0.294788,1.0,0.472396,0.354668,1.0,0.466247,0.362558,1.0,0.448539,0.368751,1.0,0.469150,0.359978,1.0,0.449120,0.369268,1.0,0.445927,0.368235,1.0,0.455796,0.364622,1.0,0.448249,0.378041,1.0,0.450571,0.384750,1.0,0.456958,0.388362,1.0,0.447378,0.379589,1.0,0.449991,0.393523,1.0,0.453765,0.393007,1.0,0.445056,0.373912,1.0,0.443604,0.380621,1.0,0.449991,0.403844,1.0,0.552109,0.441889,1.0,0.552109,0.441889,1.0,0.558292,0.657189,1.0,0.565875,0.815375,1.0,0.565875,0.815375,1.0,0.595021,0.433753,1.0,0.595021,0.433753,1.0,0.582854,0.662573,1.0,0.593500,0.654537,1.0,0.593500,0.654537,1.0
0.578216,0.433767,1.0,0.570144,0.245752,1.0,0.572835,0.308423,1.0,0.567453,0.183080,1.0,0.555193,0.120425,1.0,0.559792,0.120328,1.0,0.559792,0.120328,1.0,0.542922,0.120357,1.0,0.542922,0.120357,1.0,0.562070,0.188505,1.0,0.556687,0.193930,1.0,0.529141,0.289278,1.0,0.475466,0.313782,1.0,0.440587,0.333514,1.0,0.437877,0.330302,1.0,0.439684,0.329900,1.0,0.439006,0.335924,1.0,0.440135,0.327491,1.0,0.436973,0.340743,1.0,0.441943,0.337931,1.0,0.439910,0.322672,1.0,0.438554,0.345159,1.0,0.441943,0.333113,1.0,0.438780,0.322672,1.0,0.437877,0.345159,1.0,0.439006,0.329097,1.0,0.436747,0.324680,1.0,0.436973,0.345963,1.0,0.573557,0.174906,1.0,0.579661,0.166733,1.0,0.519969,0.289340,1.0,0.460155,0.313888,1.0,0.455808,0.324368,1.0,0.464173,0.314850,1.0,0.440416,0.327937,1.0,0.447442,0.324963,1.0,0.438743,0.329127,1.0,0.444766,0.320204,1.0,0.442089,0.335075,1.0,0.439077,0.329721,1.0,0.441754,0.328531,1.0,0.442089,0.333885,1.0,0.441085,0.338644,1.0,0.441754,0.323178,1.0,0.441419,0.333291,1.0,0.460827,0.312470,1.0,0.438743,0.329721,1.0,0.556766,0.439206,1.0,0.556766,0.439206,1.0,0.561339,0.646384,1.0,0.568937,0.815277,1.0,0.568937,0.815277,1.0,0.599667,0.428328,1.0,0.599667,0.428328,1.0,0.593479,0.662730,1.0,0.607266,0.684380,1.0,0.607266,0.684380,1.0
0.582810,0.441937,1.0,0.573624,0.245747,1.0,0.576686,0.311144,1.0,0.570562,0.180351,1.0,0.559776,0.118997,1.0,0.568906,0.117580,1.0,0.568906,0.117580,1.0,0.547531,0.117645,1.0,0.547531,0.117645,1.0,0.565167,0.184418,1.0,0.559771,0.188484,1.0,0.536797,0.273042,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.576680,0.172201,1.0,0.582797,0.164051,1.0,0.519939,0.272954,1.0,0.458651,0.273023,1.0,0.452593,0.283349,1.0,0.458067,0.276480,1.0,0.442611,0.284494,1.0,0.444865,0.284494,1.0,0.440035,0.285067,1.0,0.442611,0.287929,1.0,0.442290,0.289645,1.0,0.448407,0.285067,1.0,0.449695,0.306819,1.0,0.448085,0.280487,1.0,0.449373,0.306246,1.0,0.447763,0.310825,1.0,0.455169,0.279342,1.0,0.435206,0.298805,1.0,0.435206,0.298805,1.0,0.559833,0.444688,1.0,0.559833,0.444688,1.0,0.568964,0.649083,1.0,0.570453,0.817970,1.0,0.570453,0.817970,1.0,0.605786,0.439185,1.0,0.605786,0.439185,1.0,0.604214,0.673635,1.0,0.625703,0.708982,1.0,0.625703,0.708982,1.0
0.582810,0.441937,1.0,0.573624,0.245747,1.0,0.576686,0.311144,1.0,0.570562,0.180351,1.0,0.559776,0.118997,1.0,0.568906,0.117580,1.0,0.568906,0.117580,1.0,0.547531,0.117645,1.0,0.547531,0.117645,1.0,0.565167,0.184418,1.0,0.559771,0.188484,1.0,0.536797,0.273042,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.576680,0.172201,1.0,0.582797,0.164051,1.0,0.519939,0.272954,1.0,0.458651,0.273023,1.0,0.452593,0.283349,1.0,0.458067,0.276480,1.0,0.442611,0.284494,1.0,0.444865,0.284494,1.0,0.440035,0.285067,1.0,0.442611,0.287929,1.0,0.442290,0.289645,1.0,0.448407,0.285067,1.0,0.449695,0.306819,1.0,0.448085,0.280487,1.0,0.449373,0.306246,1.0,0.447763,0.310825,1.0,0.455169,0.279342,1.0,0.435206,0.298805,1.0,0.435206,0.298805,1.0,0.559833,0.444688,1.0,0.559833,0.444688,1.0,0.568964,0.649083,1.0,0.570453,0.817970,1.0,0.570453,0.817970,1.0,0.605786,0.439185,1.0,0.605786,0.439185,1.0,0.604214,0.673635,1.0,0.625703,0.708982,1.0,0.625703,0.708982,1.0
0.588891,0.444620,1.0,0.580867,0.248417,1.0,0.583542,0.313818,1.0,0.578193,0.183017,1.0,0.568951,0.117674,1.0,0.573599,0.114810,1.0,0.573599,0.114810,1.0,0.555203,0.114890,1.0,0.555203,0.114890,1.0,0.572049,0.187115,1.0,0.565906,0.191214,1.0,0.535250,0.278431,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.584320,0.173541,1.0,0.590448,0.164066,1.0,0.519919,0.270192,1.0,0.460126,0.248319,1.0,0.459037,0.247729,1.0,0.462427,0.245319,1.0,0.441749,0.262794,1.0,0.445817,0.257371,1.0,0.442089,0.248331,1.0,0.439377,0.257974,1.0,0.446495,0.256166,1.0,0.447512,0.253153,1.0,0.450224,0.282079,1.0,0.447851,0.254960,1.0,0.441749,0.245921,1.0,0.450224,0.281476,1.0,0.461071,0.252550,1.0,0.439716,0.244716,1.0,0.439038,0.262794,1.0,0.568906,0.447341,1.0,0.568906,0.447341,1.0,0.570490,0.651825,1.0,0.572062,0.815384,1.0,0.572062,0.815384,1.0,0.608875,0.441899,1.0,0.608875,0.441899,1.0,0.613427,0.687319,1.0,0.648714,0.768944,1.0,0.648714,0.768944,1.0
0.594990,0.444710,1.0,0.587009,0.248472,1.0,0.589669,0.313885,1.0,0.584349,0.183059,1.0,0.575904,0.118941,1.0,0.582781,0.112223,1.0,0.582781,0.112223,1.0,0.561323,0.114891,1.0,0.561323,0.114891,1.0,0.578211,0.188494,1.0,0.572073,0.193928,1.0,0.576656,0.322039,1.0,0.561328,0.338411,1.0,0.553885,0.369244,1.0,0.566865,0.352761,1.0,0.560245,0.347110,1.0,0.554943,0.369715,1.0,0.555208,0.364064,1.0,0.555740,0.364064,1.0,0.560245,0.370185,1.0,0.560505,0.368773,1.0,0.558125,0.367360,1.0,0.559448,0.369244,1.0,0.560771,0.371598,1.0,0.561302,0.370185,1.0,0.554151,0.368773,1.0,0.553089,0.368773,1.0,0.558125,0.385726,1.0,0.590453,0.174900,1.0,0.596557,0.166741,1.0,0.521500,0.267546,1.0,0.461718,0.226544,1.0,0.469942,0.228963,1.0,0.471668,0.240619,1.0,0.463041,0.229576,1.0,0.449237,0.237552,1.0,0.443716,0.239392,1.0,0.451307,0.245527,1.0,0.447857,0.231417,1.0,0.449582,0.247368,1.0,0.451307,0.251048,1.0,0.443026,0.229576,1.0,0.444060,0.225281,1.0,0.451653,0.246754,1.0,0.441645,0.230190,1.0,0.440955,0.243073,1.0,0.451998,0.244300,1.0,0.572021,0.447452,1.0,0.572021,0.447452,1.0,0.578198,0.662632,1.0,0.578203,0.818011,1.0,0.578203,0.818011,1.0,0.617958,0.441969,1.0,0.617958,0.441969,1.0,0.628740,0.703619,1.0,0.668630,0.831641,1.0,0.668630,0.831641,1.0
0.602685,0.452868,1.0,0.598124,0.252522,1.0,0.599645,0.319304,1.0,0.596604,0.185740,1.0,0.585122,0.119052,1.0,0.593464,0.114894,1.0,0.593464,0.114894,1.0,0.572021,0.117491,1.0,0.572021,0.117491,1.0,0.591221,0.189852,1.0,0.585839,0.193964,1.0,0.532156,0.272960,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.601961,0.180311,1.0,0.607318,0.174882,1.0,0.527594,0.270156,1.0,0.470801,0.212987,1.0,0.457345,0.215422,1.0,0.450297,0.224193,1.0,0.450649,0.218555,1.0,0.444659,0.211037,1.0,0.450297,0.214795,1.0,0.451002,0.221060,1.0,0.449944,0.201640,1.0,0.450649,0.202893,1.0,0.446068,0.207278,1.0,0.461926,0.201013,1.0,0.449944,0.203519,1.0,0.452764,0.236095,1.0,0.447830,0.211663,1.0,0.453821,0.226072,1.0,0.453468,0.226698,1.0,0.581193,0.455609,1.0,0.581193,0.455609,1.0,0.581281,0.670867,1.0,0.582714,0.820847,1.0,0.582714,0.820847,1.0,0.624177,0.450126,1.0,0.624177,0.450126,1.0,0.642536,0.714493,1.0,0.679313,0.883476,1.0,0.679313,0.883476,1.0
0.607362,0.469189,1.0,0.608481,0.262776,1.0,0.608108,0.331580,1.0,0.608854,0.193971,1.0,0.595867,0.120448,1.0,0.604198,0.117670,1.0,0.604198,0.117670,1.0,0.582750,0.117756,1.0,0.582750,0.117756,1.0,0.601971,0.198068,1.0,0.595089,0.202164,1.0,0.545984,0.283900,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.614969,0.189833,1.0,0.621083,0.185695,1.0,0.536802,0.270381,1.0,0.473989,0.213031,1.0,0.472084,0.203578,1.0,0.463916,0.188424,1.0,0.455037,0.187161,1.0,0.458233,0.178321,1.0,0.448999,0.175165,1.0,0.453971,0.186530,1.0,0.458233,0.184636,1.0,0.449354,0.189056,1.0,0.453261,0.192844,1.0,0.457168,0.196632,1.0,0.449709,0.195369,1.0,0.452551,0.201052,1.0,0.456457,0.210523,1.0,0.449709,0.206734,1.0,0.451485,0.208629,1.0,0.582854,0.471897,1.0,0.582854,0.471897,1.0,0.582802,0.684505,1.0,0.584339,0.826239,1.0,0.584339,0.826239,1.0,0.631870,0.466481,1.0,0.631870,0.466481,1.0,0.656406,0.730954,1.0,0.682401,0.946074,1.0,0.682401,0.946074,1.0
0.618773,0.488264,1.0,0.626232,0.277760,1.0,0.623746,0.347928,1.0,0.628719,0.207593,1.0,0.608862,0.132657,1.0,0.616479,0.123081,1.0,0.616479,0.123081,1.0,0.594969,0.123148,1.0,0.594969,0.123148,1.0,0.618799,0.213044,1.0,0.608880,0.218495,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.635664,0.204811,1.0,0.642609,0.202030,1.0,0.550589,0.275777,1.0,0.483127,0.226514,1.0,0.479008,0.214206,1.0,0.471232,0.199724,1.0,0.460493,0.199724,1.0,0.463085,0.187875,1.0,0.454569,0.195116,1.0,0.456791,0.203016,1.0,0.460864,0.195774,1.0,0.453458,0.201041,1.0,0.454198,0.207624,1.0,0.460864,0.206966,1.0,0.453087,0.207624,1.0,0.453828,0.216181,1.0,0.461234,0.218815,1.0,0.452717,0.218156,1.0,0.453458,0.222106,1.0,0.593500,0.488306,1.0,0.593500,0.488306,1.0,0.582818,0.703553,1.0,0.582839,0.828981,1.0,0.582839,0.828981,1.0,0.644047,0.488222,1.0,0.644047,0.488222,1.0,0.668682,0.749832,1.0,0.677828,0.954269,1.0,0.677828,0.954269,1.0
0.618773,0.488264,1.0,0.626232,0.277760,1.0,0.623746,0.347928,1.0,0.628719,0.207593,1.0,0.608862,0.132657,1.0,0.616479,0.123081,1.0,0.616479,0.123081,1.0,0.594969,0.123148,1.0,0.594969,0.123148,1.0,0.618799,0.213044,1.0,0.608880,0.218495,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.635664,0.204811,1.0,0.642609,0.202030,1.0,0.550589,0.275777,1.0,0.483127,0.226514,1.0,0.479008,0.214206,1.0,0.471232,0.199724,1.0,0.460493,0.199724,1.0,0.463085,0.187875,1.0,0.454569,0.195116,1.0,0.456791,0.203016,1.0,0.460864,0.195774,1.0,0.453458,0.201041,1.0,0.454198,0.207624,1.0,0.460864,0.206966,1.0,0.453087,0.207624,1.0,0.453828,0.216181,1.0,0.461234,0.218815,1.0,0.452717,0.218156,1.0,0.453458,0.222106,1.0,0.593500,0.488306,1.0,0.593500,0.488306,1.0,0.582818,0.703553,1.0,0.582839,0.828981,1.0,0.582839,0.828981,1.0,0.644047,0.488222,1.0,0.644047,0.488222,1.0,0.668682,0.749832,1.0,0.677828,0.954269,1.0,0.677828,0.954269,1.0
0.634128,0.491049,1.0,0.636989,0.290665,1.0,0.636035,0.357460,1.0,0.637943,0.223870,1.0,0.620349,0.140806,1.0,0.628760,0.125879,1.0,0.628760,0.125879,1.0,0.605828,0.133933,1.0,0.605828,0.133933,1.0,0.624174,0.233417,1.0,0.610406,0.242963,1.0,0.570552,0.281120,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.650992,0.214338,1.0,0.664042,0.204806,1.0,0.570510,0.278491,1.0,0.493823,0.245724,1.0,0.481653,0.244252,1.0,0.464014,0.256261,1.0,0.454631,0.243584,1.0,0.452755,0.243584,1.0,0.451629,0.234244,1.0,0.449752,0.237580,1.0,0.464014,0.224235,1.0,0.452004,0.232909,1.0,0.452379,0.252258,1.0,0.464764,0.224903,1.0,0.450878,0.255594,1.0,0.451629,0.254259,1.0,0.467016,0.220899,1.0,0.467016,0.219565,1.0,0.453505,0.252925,1.0,0.605786,0.491056,1.0,0.605786,0.491056,1.0,0.581318,0.728155,1.0,0.581161,0.820840,1.0,0.581161,0.820840,1.0,0.662469,0.491042,1.0,0.662469,0.491042,1.0,0.680859,0.763544,1.0,0.679318,0.956991,1.0,0.679318,0.956991,1.0
0.642578,0.510101,1.0,0.646020,0.299604,1.0,0.644872,0.369770,1.0,0.647167,0.229438,1.0,0.631841,0.142206,1.0,0.641005,0.131305,1.0,0.641005,0.131305,1.0,0.618052,0.136746,1.0,0.618052,0.136746,1.0,0.631844,0.240349,1.0,0.616521,0.251259,1.0,0.581250,0.294754,1.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.000000,0.000000,0.0,0.664008,0.217192,1.0,0.680849,0.204945,1.0,0.599625,0.286624,1.0,0.507635,0.273008,1.0,0.496092,0.275204,1.0,0.479160,0.267177,1.0,0.472387,0.300622,1.0,0.470882,0.291257,1.0,0.472387,0.302629,1.0,0.472764,0.301960,1.0,0.475397,0.291257,1.0,0.476150,0.298616,1.0,0.473140,0.301291,1.0,0.476150,0.291926,1.0,0.479536,0.301960,1.0,0.474269,0.301960,1.0,0.477279,0.274535,1.0,0.470506,0.304635,1.0,0.473893,0.307980,1.0,0.611932,0.510080,1.0,0.611932,0.510080,1.0,0.582781,0.768924,1.0,0.581193,0.815417,1.0,0.581193,0.815417,1.0,0.673224,0.510123,1.0,0.673224,0.510123,1.0,0.693167,0.779882,1.0,0.679328,0.962481,1.0,0.679328,0.962481,1.0
0.649487,0.514215,1.0,0.652298,0.314966,1.0,0.651361,0.381382,1.0,0.653234,0.248549,1.0,0.641060,0.143478,1.0,0.651755,0.125872,1.0,0.651755,0.125872,1.0,0.628797,0.136670,1.0,0.628797,0.136670,1.0,0.631820,0.262111,1.0,0.610406,0.275672,1.0,0.613411,0.384701,1.0,0.605828,0.455598,1.0,0.613010,0.466180,1.0,0.604000,0.454968,1.0,0.601750,0.456169,1.0,0.600172,0.466581,1.0,0.604453,0.441753,1.0,0.598818,0.456969,1.0,0.600620,0.454968,1.0,0.598818,0.458171,1.0,0.598818,0.457370,1.0,0.599719,0.454968,1.0,0.598594,0.457770,1.0,0.599047,0.467381,1.0,0.598818,0.454968,1.0,0.598594,0.454968,1.0,0.598146,0.467381,1.0,0.673198,0.232138,1.0,0.693161,0.215726,1.0,0.637948,0.292055,1.0,0.545995,0.313835,1.0,0.540604,0.316989,1.0,0.534177,0.321022,1.0,0.532286,0.317661,1.0,0.525859,0.321022,1.0,0.529641,0.319006,1.0,0.531531,0.319678,1.0,0.531151,0.342534,1.0,0.531906,0.331106,1.0,0.533042,0.333795,1.0,0.532286,0.344551,1.0,0.532661,0.332451,1.0,0.533042,0.336484,1.0,0.533422,0.345223,1.0,0.547031,0.331779,1.0,0.533042,0.334468,1.0,0.618094,0.515558,1.0,0.618094,0.515558,1.0,0.595089,0.766250,1.0,0.582802,0.818136,1.0,0.582802,0.818136,1.0,0.680880,0.512872,1.0,0.680880,0.512872,1.0,0.703818,0.793392,1.0,0.679396,0.957037,1.0,0.679396,0.957037,1.0
0.654862,0.512803,1.0,0.654868,0.314550,1.0,0.654866,0.380634,1.0,0.654870,0.248466,1.0,0.647151,0.138087,1.0,0.657901,0.120378,1.0,0.657901,0.120378,1.0,0.634917,0.123200,1.0,0.634917,0.123200,1.0,0.631878,0.260793,1.0,0.608885,0.273120,1.0,0.595089,0.425590,1.0,0.591948,0.545551,1.0,0.589641,0.587971,1.0,0.589318,0.553413,1.0,0.592188,0.595336,1.0,0.594417,0.564744,1.0,0.591552,0.597035,1.0,0.585495,0.554546,1.0,0.593464,0.568709,1.0,0.584859,0.570409,1.0,0.580396,0.582306,1.0,0.593781,0.568709,1.0,0.589000,0.568709,1.0,0.587406,0.569843,1.0,0.586135,0.546615,1.0,0.584542,0.555113,1.0,0.585177,0.557379,1.0,0.679393,0.233489,1.0,0.703917,0.218513,1.0,0.670172,0.294784,1.0,0.610380,0.357518,1.0,0.570271,0.401362,1.0,0.582724,0.407902,1.0,0.600271,0.415952,1.0,0.599141,0.408908,1.0,0.600552,0.411927,1.0,0.599422,0.419977,1.0,0.598573,0.393816,1.0,0.611589,0.402871,1.0,0.612156,0.403878,1.0,0.600271,0.391803,1.0,0.611307,0.402871,1.0,0.611026,0.404381,1.0,0.586401,0.430542,1.0,0.588385,0.432051,1.0,0.610740,0.404883,1.0,0.621156,0.512829,1.0,0.621156,0.512829,1.0,0.619625,0.804389,1.0,0.593578,0.807128,1.0,0.593578,0.807128,1.0,0.688568,0.512777,1.0,0.688568,0.512777,1.0,0.705370,0.790769,1.0,0.680880,0.959750,1.0,0.680880,0.959750,1.0
Can't render this file because it is too large.
Binary file not shown.

After

Width:  |  Height:  |  Size: 289 KiB

@@ -0,0 +1,991 @@
#include "InputParser_C.h"
#include <math.h>
/* InputParser..
A small generic library for parsing a string and tokenizing it!
GITHUB Repo : http://github.com/AmmarkoV/InputParser
my URLs: http://ammar.gr
Written by Ammar Qammaz a.k.a. AmmarkoV 2006-2010
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 3 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, see <http://www.gnu.org/licenses/>.
*/
#define WARN_ABOUT_INCORRECTLY_ALLOCATED_STACK_STRINGS 1
int warningsAboutIncorrectlyAllocatedStackIssued = 0;
char _ipc_ver[]=" 0.362\0"; //17/7/2023
/*
TODO
void stringToFloatArray(char * str , char delimiter , float * floatArr , int elements)
{
unsigned int strLength = strlen(str);
char * strPtr=str;
char * strStart=str;
char * strEnd=str+strLength;
int curElement = 0;
while ( (curElement<elements) && (strPtr<strEnd) )
{
while ( (strPtr<strEnd) && (*strPtr!=delimiter) )
{
++strPtr; //Seeking next delimiter
}
if (*strPtr==delimiter)
{
*strPtr=0; //Null terminate
floatArr[curElement]=atof(strStart);
++curElement;
*strPtr=delimiter;
strStart=strPtr+1;
}
}
}
*/
char * InputParserC_Version()
{
return (char *) _ipc_ver;
}
int InputParser_ClearNonCharacters(char * inpt , unsigned int length)
{
unsigned int skip_chars=0;
unsigned int i=0;
while (i<length)
{
if (inpt[i]<' ') /*The characters before space should be filtered*/
{
++skip_chars;
}
if (skip_chars>0)
{
if (i+skip_chars>=length)
{
inpt[i]=0;
}
else
{
inpt[i]=inpt[i+skip_chars];
}
}
++i;
}
return 1;
}
int InputParser_TrimCharactersStart(char * inpt , unsigned int length,char what2trim)
{
if ( ( inpt==0 ) || (length==0) )
{
return 0;
}
unsigned int skip_chars=0;
unsigned int i=0;
while ((skip_chars<length)&&(inpt[skip_chars]==what2trim))
{
++skip_chars;
}
while (i<length)
{
if (skip_chars>0)
{
if (i+skip_chars>=length)
{
inpt[i]=0;
}
else
{
inpt[i]=inpt[i+skip_chars];
}
}
++i;
}
return 1;
}
int InputParser_TrimCharactersEnd(char * inpt , unsigned int length,char what2trim)
{
if ( strlen(inpt)!=length )
{
length=strlen(inpt);
}
if ( length==0 )
{
return 1;
}
if ( (length==1) && (inpt[0]==what2trim) )
{
inpt[0]=0;
return 1;
}
else if ( length==1 )
{
return 1;
}
unsigned int i;
i=length-1;
while ((inpt[i]==what2trim)&&(i>0))
{
--i;
}
if ( i==length-1 )
{
/*No chars found*/ return 1;
}
if ((i==0) && (inpt[0]==what2trim) )
{
inpt[0]=0;
}
else
{
inpt[i+1]=0;
}
return 1;
}
int InputParser_TrimCharacters(char * inpt , unsigned int length,char what2trim)
{
int i=0;
i=InputParser_TrimCharactersStart(inpt,length,what2trim);
if (i==0)
{
return 0;
}
return InputParser_TrimCharactersEnd(inpt,length,what2trim);
}
static inline signed int Str2Int_internal(char * inpt,unsigned int start_from,unsigned int length)
{
if ( inpt == 0 )
{
fprintf(stderr,"Null string to Str2IntInternal!\n");
return 0;
}
int intresult;
int multiplier;
int curnum;
unsigned char trailing_sign_seek;
unsigned char positive_number;
signed int i;
intresult=0,multiplier=1,curnum=0;
trailing_sign_seek=1 , positive_number=1;
/*fprintf(stderr,"Converting to int string (%p) begining from %u and ending at %u ",inpt,start_from,start_from+length);*/
for (i=(signed int) start_from+length-1; i>=(signed int) start_from; i--)
{
if ( i < 0 )
{
/*fprintf("Gone negative! %u \n",i);*/ break;
}
curnum=(char) (inpt[i])-'0';
if ((curnum>=0)&(curnum<=9))
{
intresult=intresult+(multiplier*curnum);
multiplier=multiplier*10;
}
if (trailing_sign_seek)
{
/*fprintf(stderr,"Run to %c while searching for sign \n",inpt[i]);*/
if (inpt[i]=='+')
{
trailing_sign_seek=0;
}
else if (inpt[i]=='-')
{
trailing_sign_seek=0;
positive_number=0;
}
}
}
if (!positive_number)
{
intresult = intresult * (-1);
}
return intresult;
}
static inline unsigned char CheckIPCOk(struct InputParserC * ipc)
{
if ( ipc->guardbyte1.checksum != ipc->guardbyte2.checksum )
{
fprintf(stderr,"Input Parser - Wrong GuardChecksums #1\n");
return 0;
}
if ( ipc->guardbyte3.checksum != ipc->guardbyte4.checksum )
{
fprintf(stderr,"Input Parser - Wrong GuardChecksums #2\n");
return 0;
}
if ( ipc->guardbyte1.checksum != ipc->guardbyte4.checksum )
{
fprintf(stderr,"Input Parser - Wrong GuardChecksums #3\n");
return 0;
}
if ( (ipc->tokenlist==0) || (ipc->tokens_max<ipc->tokens_count) )
{
fprintf(stderr,"Input Parser - Tokenlist error\n");
return 0;
}
if ( (ipc->delimeters==0) || (ipc->max_delimeter_count<ipc->cur_delimeter_count) )
{
fprintf(stderr,"Input Parser - Delimeter error\n");
return 0;
}
return 1;
}
void InputParser_DefaultDelimeters(struct InputParserC * ipc)
{
if ( CheckIPCOk(ipc) == 0 )
{
return;
}
if ( ipc->delimeters == 0 )
{
return;
}
int i;
/*fprintf(stderr,"Default Delimters ( %u ) ",ipc->max_delimeter_count);*/
for ( i=0; i<ipc->max_delimeter_count; i++)
{
switch (i)
{
case 0 :
ipc->delimeters[0]='\n';
break;
case 1 :
ipc->delimeters[1]=',';
break;
case 2 :
ipc->delimeters[2]='=';
break;
case 3 :
ipc->delimeters[3]='(';
break;
case 4 :
ipc->delimeters[4]=')';
break;
default :
ipc->delimeters[i]='\n';
break;
};
/*fprintf(stderr," %u - %c ",i,ipc->delimeters[i]);*/
}
ipc->cur_delimeter_count = ipc->max_delimeter_count;
/*fprintf(stderr,"\n");*/
return;
}
/*
InitInputParser..
Allocates an ipc structure and with memory to it according to options for future use!
for example InitInputParser( 256 , 5 ) will allocate an InputParser Instance capeable of tokenizing up to 256 different words
from 5 delimeters
*/
struct InputParserC * InputParser_Create(unsigned int max_string_count,unsigned int max_delimiter_count)
{
struct InputParserC * ipc=0;
ipc = ( struct InputParserC * ) malloc ( sizeof ( struct InputParserC ) );
if ( ipc == 0 )
{
fprintf(stderr,"InputParserC unable to commit memory for a new instance\n");
return 0;
}
ipc->tokenlist = (struct tokens *) malloc( sizeof(struct tokens) * (max_string_count+1) );
if ( ipc->tokenlist == 0 )
{
fprintf(stderr,"InputParserC unable to commit memory for a new Token List\n");
free(ipc);
return 0;
}
ipc->tokens_count=0;
ipc->tokens_max = max_string_count;
ipc->delimeters = (char *) malloc( sizeof(char) * (max_delimiter_count+1) );
if ( ipc->delimeters == 0 )
{
fprintf(stderr,"InputParserC unable to commit memory for a new Delimeter List\n");
free(ipc->tokenlist);
free(ipc);
return 0;
}
ipc->max_delimeter_count=max_delimiter_count;
ipc->cur_delimeter_count=max_delimiter_count;
ipc->container_start=0;
ipc->container_end=0;
ipc->guardbyte1.checksum=66666;
ipc->guardbyte2.checksum=66666;
ipc->guardbyte3.checksum=66666;
ipc->guardbyte4.checksum=66666;
ipc->local_allocation = 0; /* No allocation by default! :)*/
ipc->str_length=0;
ipc->str=0;
InputParser_DefaultDelimeters(ipc);
return ipc;
}
/*
InputParser_Destroy..
Safely destroys a non null ipc structure and deallocates all commited memory
*/
void InputParser_Destroy(struct InputParserC * ipc)
{
if ( ipc == 0 )
{
return;
}
/*fprintf(stderr,"InputParserC freeing delimeters\n");*/
if ( ipc->delimeters != 0 )
{
free(ipc->delimeters);
ipc->delimeters=0;
}
ipc->cur_delimeter_count=0;
ipc->max_delimeter_count=0;
/*
if ( ipc->container_start != 0 )
{
free(ipc->container_start);
ipc->container_start=0;
}
if ( ipc->container_end != 0 )
{
free(ipc->container_end);
ipc->container_end=0;
}
*/
ipc->cur_container_count = 0;
ipc->max_container_count = 0;
/*fprintf(stderr,"InputParserC freeing tokenlist\n");*/
if ( ipc->tokenlist != 0 )
{
free(ipc->tokenlist);
ipc->tokenlist=0;
}
ipc->tokens_max=0;
ipc->tokens_count=0;
/*fprintf(stderr,"InputParserC freeing local allocation\n");*/
if ( ipc->local_allocation == 1 )
{
if ( ipc->str!=0 ) free(ipc->str);
}
/*ipc->local_allocation=0;*/
ipc->str_length=0;
/* RESULT */
ipc->guardbyte1.checksum = 0;
ipc->guardbyte2.checksum = 0;
ipc->guardbyte3.checksum = 0;
ipc->guardbyte4.checksum = 0;
/*fprintf(stderr,"InputParserC freeing ipc\n");*/
free(ipc);
}
/* ........................................................
Delimeters ........................................................
........................................................*/
/*
CheckDelimeterNumOk..
Checks if delimeter with number num has allocated space in memory
*/
static inline unsigned char CheckDelimeterNumOk(struct InputParserC * ipc,int num)
{
if ( ipc->max_delimeter_count <= num ) return 0;
return 1;
}
/*
SetDelimeter..
Sets Delimeter number num with value tmp
*/
void InputParser_SetDelimeter(struct InputParserC * ipc,int num,char tmp)
{
if (CheckDelimeterNumOk(ipc,num)==0)
{
return;
}
ipc->delimeters[num]=tmp;
}
/*
GetDelimeter..
Returns value of Delimeter with number num
*/
char InputParser_GetDelimeter(struct InputParserC * ipc,int num)
{
if (CheckDelimeterNumOk(ipc,num)==0)
{
return 0;
}
return ipc->delimeters[num];
}
/* .......................................................................
.......................................................................
.......................................................................*/
/*
Selfchecks IPC instance and returns 1 if everything is ok , 0 if error..
*/
unsigned char InputParser_SelfCheck(struct InputParserC * ipc)
{
if (CheckIPCOk(ipc)==0)
{
fprintf(stderr,"\n\n!!!!\nThis instance of InputParser is broken\n!!!!\n\n");
return 0;
}
return 1;
}
/*
CheckWordNumOk..
Checks if word with number num has allocated space in memory
*/
unsigned char CheckWordNumOk(struct InputParserC * ipc,unsigned int num)
{
if ( CheckIPCOk(ipc)==0)
{
return 0;
}
if ( (ipc->tokenlist==0) || ( ipc->tokens_count <= num ) )
{
return 0;
}
return 1;
}
unsigned int InputParser_GetNumberOfArguments(struct InputParserC * ipc)
{
if ( CheckIPCOk(ipc)==0)
{
return 0;
}
return ipc->tokens_count;
}
/*
InputParser_GetWord..
Copies token with number (num) to c string (wheretostore) , variable storagesize contains the total size of wheretostore..!
*/
unsigned int InputParser_IsEmptyWord(struct InputParserC * ipc,unsigned int num)
{
if ( CheckWordNumOk(ipc,num) == 0 )
{
return 1;
}
if ( ipc->tokenlist[num].length == 0 )
{
return 1;
}
unsigned int i=0;
for ( i = ipc->tokenlist[num].token_start; i<ipc->tokenlist[num].token_start+ipc->tokenlist[num].length; i++ )
{
switch (ipc->str[i])
{
case 10 :
break;
case 13 :
break;
case ' ' :
break;
default :
return 0;
};
}
return 1;
}
/*
InputParser_GetWord..
Copies token with number (num) to c string (wheretostore) , variable storagesize contains the total size of wheretostore..!
*/
unsigned int InputParser_GetWord(struct InputParserC * ipc,unsigned int num,char * wheretostore,unsigned int storagesize)
{
if ( CheckWordNumOk(ipc,num) == 0 )
{
return 0;
}
if ( storagesize < ipc->tokenlist[num].length+1 ) /* +1 gia to \0 */ return 0;
unsigned int i=0;
for ( i = ipc->tokenlist[num].token_start; i<ipc->tokenlist[num].token_start+ipc->tokenlist[num].length; i++ )
wheretostore[i-ipc->tokenlist[num].token_start] = ipc->str[i];
wheretostore[ipc->tokenlist[num].length] = 0;
return ipc->tokenlist[num].length;
}
/*
InputParser_WordCompareNoCase..
Compares word (word) with token with number (num) , null terminating character is not required , NO CASE SENSITIVITY..!
*/
unsigned char InputParser_WordCompareNoCase(struct InputParserC * ipc,unsigned int num,const char * word,unsigned int wordsize)
{
/*fprintf(stderr,"InputParser_WordCompareNoCase( %u , %s , %u )",num,word,wordsize);*/
if ( wordsize != InputParser_GetWordLength(ipc,num) )
{
return 0;
}
/*if ( ipc->str_length <= ipc->tokenlist[num].token_start+wordsize ) { fprintf(stderr,"Erroneous input on InputParser_WordCompareNoCase leads out of array \n"); return 0; }*/
unsigned int i=0;
for ( i=0; i<wordsize; i++ )
{
if (toupper(ipc->str[ipc->tokenlist[num].token_start+i])!=toupper(word[i]))
{
/*fprintf(stderr," returning fail ");*/ return 0;
}
}
/*fprintf(stderr," returning success ");*/
return 1;
}
/*
InputParser_WordCompareNoCase..
Compares word (word) with token with number (num) , null terminating character is required , NO CASE SENSITIVITY..!
*/
unsigned char InputParser_WordCompareNoCaseAuto(struct InputParserC * ipc,unsigned int num,const char * word)
{
if (word==0)
{
return 0;
}
unsigned int wordsize=strlen(word);
return InputParser_WordCompareNoCase(ipc,num,word,wordsize);
}
/*
InputParser_WordCompare..
Compares word (word) with token with number (num) , null terminating character is not required..!
*/
unsigned char InputParser_WordCompare(struct InputParserC * ipc,unsigned int num,const char * word,unsigned int wordsize)
{
if ( wordsize != InputParser_GetWordLength(ipc,num) )
{
return 0;
}
/*if ( ipc->str_length <= ipc->tokenlist[num].token_start+wordsize ) { fprintf(stderr,"Erroneous input on InputParser_WordCompareNoCase leads out of array \n"); return 0; }*/
unsigned int i=0;
for ( i=0; i<wordsize; i++ )
{
if (ipc->str[ipc->tokenlist[num].token_start+i]!=word[i])
{
return 0;
}
}
return 1;
}
/*
InputParser_WordCompareNoCase..
Compares word (word) with token with number (num) , null terminating character is required , NO CASE SENSITIVITY..!
*/
unsigned char InputParser_WordCompareAuto(struct InputParserC * ipc,unsigned int num,const char * word)
{
if (word==0)
{
return 0;
}
unsigned int wordsize=strlen(word);
return InputParser_WordCompare(ipc,num,word,wordsize);
}
/*
InputParser_GetUpcaseWord..
Same with InputParser_GetWord , the result is converted to upcase..!
*/
unsigned int InputParser_GetUpcaseWord(struct InputParserC * ipc,unsigned int num,char * wheretostore,unsigned int storagesize)
{
if ( CheckWordNumOk(ipc,num) == 0 )
{
return 0;
}
if ( storagesize < ipc->tokenlist[num].length+1 ) /* +1 gia to \0 */ return 0;
unsigned int i=0;
for ( i = ipc->tokenlist[num].token_start; i<ipc->tokenlist[num].token_start+ipc->tokenlist[num].length; i++ )
wheretostore[i-ipc->tokenlist[num].token_start] = toupper(ipc->str[i]);
wheretostore[ipc->tokenlist[num].length] = 0;
return ipc->tokenlist[num].length;
}
/*
InputParser_GetUpcaseWord..
Same with InputParser_GetWord , the result is converted to lowercase..!
*/
unsigned int InputParser_GetLowercaseWord(struct InputParserC * ipc,unsigned int num,char * wheretostore,unsigned int storagesize)
{
if ( CheckWordNumOk(ipc,num) == 0 )
{
return 0;
}
if ( storagesize < ipc->tokenlist[num].length+1 ) /* +1 gia to \0 */ return 0;
unsigned int i=0;
for ( i = ipc->tokenlist[num].token_start; i<ipc->tokenlist[num].token_start+ipc->tokenlist[num].length; i++ )
wheretostore[i-ipc->tokenlist[num].token_start] = tolower(ipc->str[i]);
wheretostore[ipc->tokenlist[num].length] = 0;
return ipc->tokenlist[num].length;
}
/*
InputParser_GetChar..
Returns character (pos) from token (num)..!
*/
char InputParser_GetWordChar(struct InputParserC * ipc,unsigned int num,unsigned int pos)
{
if ( CheckWordNumOk(ipc,num) == 0 )
{
return 0;
}
if ( pos>=ipc->tokenlist[num].token_start+ipc->tokenlist[num].length )
{
return 0;
}
return ipc->str[ipc->tokenlist[num].token_start + pos ];
}
/*
InputParser_GetWordInt..
Same with InputParser_GetWord , if the result can be converted to a number , it returns this number
else 0 is returned
*/
signed int InputParser_GetWordInt(struct InputParserC * ipc,unsigned int num)
{
if ( CheckWordNumOk(ipc,num) == 0 )
{
return 0;
}
return Str2Int_internal(ipc->str,ipc->tokenlist[num].token_start,ipc->tokenlist[num].length);
}
/*
InputParser_GetWordFloat..
Same with InputParser_GetWord , if the result can be converted to a float number , it returns this number
else 0.0 is returned
*/
float InputParser_GetWordFloat(struct InputParserC * ipc,unsigned int num)
{
if ( CheckWordNumOk(ipc,num) == 0 )
{
return 0.0;
}
if (ipc->tokenlist[num].length == 0 )
{
return 0.0;
}
char remember = 0;
char * string_segment = 0;
char * last_char_of_string_segment = 0;
unsigned char isLocallyAllocated = ipc->local_allocation;
unsigned int tokenStart = ipc->tokenlist[num].token_start;
unsigned int tokenLength = ipc->tokenlist[num].length;
unsigned int stringLength = ipc->str_length;
float return_value=0.0;
//Our string is a "string_segment" , and its last character ( which will be temporary become null ) is last_char_of_string_segment
if (!isLocallyAllocated)
{
string_segment = (char*) malloc( (tokenLength+1) * sizeof(char) );
//memset(string_segment,0,(tokenLength+1) * sizeof(char));
if (string_segment==0)
{
fprintf(stderr,"InputParser_GetWordFloat could not allocate memory to return float value , returning NaN \n");
return NAN;
}
strncpy(string_segment,ipc->str+tokenStart,tokenLength);
last_char_of_string_segment = string_segment + ipc->tokenlist[num].length;
}
else
{
string_segment = ipc->str+tokenStart;
last_char_of_string_segment = string_segment + ipc->tokenlist[num].length;
}
if (tokenStart + tokenLength < stringLength)
{
remember = *last_char_of_string_segment;
*last_char_of_string_segment = (char) 0; //Temporarily convert the string segment to a null terminated string
}
//else we are on the last part of the string so no reason to do the whole 0 remember thing..
#if USE_SCANF
//fprintf(stderr,"Using sscanf to parse %s \n",string_segment);
#warning "scanf without field width limits can crash with huge input data on libc versions older than 2.13-25. Add a field width specifier to fix this problem"
/*
Sample program that can crash:
#include <stdio.h>
int main()
{ int a; scanf("%i", &a); return 0; }
To make it crash:
perl -e 'print "5"x2100000' | ./a.out|
*/
sscanf(string_segment,"%f",&return_value);
#else
//fprintf(stderr,"Using atof to parse `%s` \n",string_segment);
return_value=atof(string_segment);
//fprintf(stderr,"Returns `%0.6f` \n",return_value);
#endif // USE_SCANF
if ( tokenStart + tokenLength < stringLength)
{
*last_char_of_string_segment = remember; //Restore string..
}
if (!isLocallyAllocated)
{
free(string_segment);
}
return return_value;
}
/*
InputParser_GetChar..
Returns total length of token (num)..!
*/
unsigned int InputParser_GetWordLength(struct InputParserC * ipc,unsigned int num)
{
if ( CheckWordNumOk(ipc,num) == 0 )
{
return 0;
}
return ipc->tokenlist[num].length;
}
/*
InputParser_SeperateWords..
Seperates words in c string (inpt) to tokens using delimiters set-up at structure ipc and keeps result at structure ipc
if the c string will be erased before getting back the tokens you can set the keepcopy byte to 1 , this will allocate memory to
keep a copy of the string..!
the number returned is the total of tokens extracted!
*/
int InputParser_SeperateWords(struct InputParserC * ipc,char * inpt,char keepcopy)
{
if (keepcopy==0)
{
#if WARN_ABOUT_INCORRECTLY_ALLOCATED_STACK_STRINGS
if (warningsAboutIncorrectlyAllocatedStackIssued==0)
{
fprintf(stderr,"Please note that feeding input parser with strings allocated on the stack it is generally a good idea to enable keepcopy\n");
fprintf(stderr,"For example passing here a string allocated as char* hello = \"hello!\"; might lead to a segFault ( i.e. when calling InputParser_GetWordFloat ) \n");
fprintf(stderr,"The correct way for allocating a string with in place processing is char hello[] = \"hello!\"; \n");
fprintf(stderr,"Valgrind classifies these errors as \"Bad permissions for mapped region at address\" \n");
++warningsAboutIncorrectlyAllocatedStackIssued ;
}
#endif
}
if (CheckIPCOk(ipc)==0)
{
return 0;
}
if ( inpt == 0 ) return 0; /* NULL INPUT -> NULL OUTPUT*/
unsigned int STRING_END = strlen(inpt) ;
int WORDS_SEPERATED = 0 , NEXT_SHOULD_NOT_BE_A_DELIMITER=1 , FOUND_DELIMETER ; /* Ignores starting ,,,,,string,etc*/
if ( STRING_END == 0 )
{
return 0; /* NULL INPUT -> NULL OUTPUT pt 2*/
}
/* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
COPY STRING ( OR POINTER ) TO IPC STRUCTURE*/
if ( keepcopy == 1 ) /* IF WE HAVE ALREADY ALLOCATED A STRING TO ipc->str , we should free it to prevent memory leaks!*/
{
if (ipc->local_allocation == 1)
{
if (ipc->str!=0)
{
/* ipc->str contains a previous value!*/
free(ipc->str);
ipc->local_allocation = 0;
}
}
ipc->str = (char * ) malloc( sizeof(char) * (STRING_END+1) );
memset(ipc->str,0,sizeof(char) * (STRING_END+1));
ipc->local_allocation = 1;
strncpy( ipc->str , inpt , STRING_END ) ;
}
else
{
ipc->str = inpt;
}
ipc->str_length = STRING_END;
/* COPY STRING ( OR POINTER ) TO IPC STRUCTURE
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
unsigned int i,z;
ipc->tokens_count = 0 , ipc->tokenlist[0].token_start=0;
for (i=0; i<STRING_END; i++)
{
FOUND_DELIMETER = 0;
for (z=0; z<ipc->cur_delimeter_count; z++)
{
if ( inpt[i] == ipc->delimeters[z] )
{
FOUND_DELIMETER = 1;
if (NEXT_SHOULD_NOT_BE_A_DELIMITER==0)
{
ipc->tokenlist[ipc->tokens_count].length = i - ipc->tokenlist[ipc->tokens_count].token_start;
ipc->tokens_count+=1;
ipc->tokenlist[ipc->tokens_count].token_start = i+1;
WORDS_SEPERATED+=1;
break;
}
else
{
ipc->tokenlist[ipc->tokens_count].token_start=i+1;
}
}
}
if (FOUND_DELIMETER == 0 ) NEXT_SHOULD_NOT_BE_A_DELIMITER=0;
else if (FOUND_DELIMETER == 1 ) NEXT_SHOULD_NOT_BE_A_DELIMITER=1;
}
if (NEXT_SHOULD_NOT_BE_A_DELIMITER==0)
{
ipc->tokenlist[ipc->tokens_count].length = i - ipc->tokenlist[ipc->tokens_count].token_start;
ipc->tokens_count+=1;
ipc->tokenlist[ipc->tokens_count].token_start = i+1;
WORDS_SEPERATED+=1;
}
else
ipc->tokenlist[ipc->tokens_count].length = i - ipc->tokenlist[ipc->tokens_count].token_start;
return WORDS_SEPERATED;
}
/*
Same with InputParser_SeperateWords it does the (char *) type cast
*/
int InputParser_SeperateWordsCC(struct InputParserC * ipc,const char * inpt,char keepcopy)
{
return InputParser_SeperateWords(ipc,(char * )inpt,keepcopy);
}
/*
Same with InputParser_SeperateWords it does the (char *) type cast
*/
int InputParser_SeperateWordsUC(struct InputParserC * ipc,unsigned char * inpt,char keepcopy)
{
return InputParser_SeperateWords(ipc,(char * )inpt,keepcopy);
}
@@ -0,0 +1,392 @@
/** @file InputParser_C.h
* @brief A very handy string tokenizer for C this basically a swiss army knife kind code segment that can be used wherever we get strings
* and we want to seperate them. This code is used in many of my projects including and not limited to
* https://github.com/AmmarkoV/RoboVision
* https://github.com/AmmarkoV/FlashySlideshows
* https://github.com/AmmarkoV/RGBDAcquisition
* https://github.com/AmmarkoV/AmmarServer
* Basic usage is the following
*
* struct InputParserC * ipc=0;
* ipc = InputParser_Create(512,5); //We want to separte lines of Max 512 different strings seperated using 5 delimiters
* InputParser_SetDelimeter(ipc,0,' '); //We want to seperate spaces
*
* char word[512];
* int numberOfWords = InputParser_SeperateWords(ipc,"zero,one,2,three(four)",1);
* for (int i=0; i<numberOfWords; i++)
* {
* InputParser_GetWord(ipc,i,word,512);
* }
* InputParser_Destroy(ipc);
*
* @author Ammar Qammaz (AmmarkoV)
*/
#ifndef _INPUTPARSER_C_H_
#define _INPUTPARSER_C_H_
#ifdef __cplusplus
extern "C" {
#endif
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
/** @brief Controls the use of scanf for getting back floats ,
scanf without field width limits can crash with huge input data on libc versions older than 2.13-25.
so this is better turned of and atof is used to do the float conversion*/
#define USE_SCANF 0
/**
* @brief A struct that contains the token list
*/
struct tokens
{
/* START MEANS THE FIRST CHARACTER TO READ..!
LENGTH MEANS total characters to be read
i.e. a _ S _ A _ M _ P _ L _ E
0 1 2 3 4 5 6
this token starts from 0 and has 7 characters length*/
unsigned int token_start;
unsigned int length;
};
/**
* @brief Guard Byte to make sure that there is no overflow
*/
struct guard_byte
{
unsigned int checksum;
};
/**
* @brief The structure that holds all of the Input Parsing Context
*/
struct InputParserC
{
/* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> */
struct guard_byte guardbyte1;
/* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> */
unsigned int str_length;
unsigned char local_allocation;
char * str; /* String to process */
/* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> */
struct guard_byte guardbyte2;
/* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> */
unsigned short cur_container_count;
unsigned short max_container_count;
char *container_start;
char *container_end;
unsigned short cur_delimeter_count;
unsigned short max_delimeter_count;
char *delimeters;
/* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> */
struct guard_byte guardbyte3;
/* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> */
/* RESULT */
unsigned int tokens_max;
unsigned int tokens_count;
struct tokens* tokenlist;
/* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> */
struct guard_byte guardbyte4;
/* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> */
};
/**
* @brief Get Back a String containing the version of the InputParser
* @retval Pointer to a C String that contains the version of InputParser
*/
char * InputParserC_Version();
/**
* @brief Clear any non-character characters from string
* @ingroup InputParser
* @param String Input/Output
* @param Length of String
* @retval 1 if success , 0 if not
*/
int InputParser_ClearNonCharacters(char * inpt , unsigned int length);
/**
* @brief Trim Starting Characters preceeding string
* @ingroup InputParser
* @param String Input/Output
* @param Length of String
* @param Character to Trim
* @retval 1 if success , 0 if not
*/
int InputParser_TrimCharactersStart(char * inpt , unsigned int length,char what2trim);
/**
* @brief Trim Starting Characters after string
* @ingroup InputParser
* @param String Input/Output
* @param Length of String
* @param Character to Trim
* @retval 1 if success , 0 if not
*/
int InputParser_TrimCharactersEnd(char * inpt , unsigned int length,char what2trim);
/**
* @brief This call will remove all characters specified from the string
* @ingroup InputParser
* @param String Input/Output
* @param Length of String
* @param Character to Trim
* @retval 1 if success , 0 if not
*/
int InputParser_TrimCharacters(char * inpt , unsigned int length,char what2trim);
/**
* @brief This call will setup the default delimiters that are typically used , these are '\n' ',' '=' '(' and ')'
* these can be also read by InputParser_GetDelimeter or changed at any time using InputParser_SetDelimeter
* @ingroup InputParser
* @param InputParser Context ( needs to be created using InputParser_Create )
*/
void InputParser_DefaultDelimeters(struct InputParserC * ipc);
/**
* @brief This call will change the value of a delimiter so that it will also act as a tokenization split character
* @ingroup InputParser
* @param InputParser Context ( needs to be created using InputParser_Create )
* @param Number of delimiter we want to set ( has to be less than the max_delimiter_count value we gave in InputParser_Create )
* @param New Value for the delimiter we want to set
*/
void InputParser_SetDelimeter(struct InputParserC * ipc,int num,char tmp);
/**
* @brief Get Back the characters that are used as delimiters
* @ingroup InputParser
* @param InputParser Context ( needs to be created using InputParser_Create )
* @param Number of delimiter we want to set ( has to be less than the max_delimiter_count value we gave in InputParser_Create )
* @retval Character used as delimiter , or Null if incorrect delimter number requested
*/
char InputParser_GetDelimeter(struct InputParserC * ipc,int num);
/**
* @brief Create an InputParser Structure and Context that can be used to tokenize strings
* @ingroup InputParser
* @param The maximum number of strings/tokens to be returned as output from a SeperateWords command
* @param The maximum number of delimters used typically 5 for the defaults '\n' ',' '=' '(' and ')'
* @retval InputParser Context , or Null if there is an error
*/
struct InputParserC * InputParser_Create(unsigned int max_string_count,unsigned int max_delimiter_count);
/**
* @brief Destroy an InputParser Structure and Context and safely free all of the memory it might have allocated
* @ingroup InputParser
* @param InputParser Context ( needs to be created using InputParser_Create )
*/
void InputParser_Destroy(struct InputParserC * ipc);
/**
* @brief Perform an internal integrity check
* @ingroup InputParser
* @param InputParser Context to be checked ( needs to be created using InputParser_Create )
* @retval 1=Success,0=Error
*/
unsigned char InputParser_SelfCheck(struct InputParserC * ipc);
/**
* @brief Retrieve the number of arguments seperated from the last InputParser_SeperateWords call
* @ingroup InputParser
* @param InputParser Context to be used ( needs to be created using InputParser_Create )
* @retval Number of arguments tokenized , 0=No arguments/Error
*/
unsigned int InputParser_GetNumberOfArguments(struct InputParserC * ipc);
/**
* @brief Check if a word ( InputParser_GetWord ) is empty after issuing a InputParser_SeperateWords call
* @ingroup InputParser
* @param InputParser Context to be used ( needs to be created using InputParser_Create )
* @param Word that we want to check
* @retval 1=Success,0=Error
*/
unsigned int InputParser_IsEmptyWord(struct InputParserC * ipc,unsigned int num);
/**
* @brief Checks if word with number num has allocated space in memory ( see InputParser_GetWord )
* @ingroup InputParser
* @param InputParser Context to be used ( needs to be created using InputParser_Create )
* @param Word that we want to check
* @retval 1=Success,0=Error
*/
unsigned char CheckWordNumOk(struct InputParserC * ipc,unsigned int num);
/**
* @brief Get a specific character of a Word ( instead of the whole string that would be returned with InputParser_GetWord )
* @ingroup InputParser
* @param InputParser Context to be used ( needs to be created using InputParser_Create )
* @param Word that we want to check
* @param Character of word we want to get back
* @retval Character we requested or null if there is an error
*/
char InputParser_GetWordChar(struct InputParserC * ipc,unsigned int num,unsigned int pos);
/**
* @brief Compare two words without case sensitivity and return wether they match or not..!
* @ingroup InputParser
* @param InputParser Context to be used ( needs to be created using InputParser_Create )
* @param Word that we want to check
* @param String that we want to compare against
* @param Length of String that we want to compare against
* @retval 1=Match,0=Strings are different
*/
unsigned char InputParser_WordCompareNoCase(struct InputParserC * ipc,unsigned int num,const char * word,unsigned int wordsize);
/**
* @brief Same as InputParser_WordCompareNoCase but supposes word is null terminated and auto-counts its length
* @ingroup InputParser
* @param InputParser Context to be used ( needs to be created using InputParser_Create )
* @param Word that we want to check
* @param String that we want to compare against ( that should be null terminated )
* @retval 1=Match,0=Strings are different
*/
unsigned char InputParser_WordCompareNoCaseAuto(struct InputParserC * ipc,unsigned int num,const char * word);
/**
* @brief Compare two words with case sensitivity and return wether they match or not..!
* @ingroup InputParser
* @param InputParser Context to be used ( needs to be created using InputParser_Create )
* @param Word that we want to check
* @param String that we want to compare against ( that should be null terminated )
* @retval 1=Match,0=Strings are different
*/
unsigned char InputParser_WordCompare(struct InputParserC * ipc,unsigned int num,const char * word,unsigned int wordsize);
/**
* @brief Same as InputParser_WordCompare but supposes word is null terminated and auto-counts its length
* @ingroup InputParser
* @param InputParser Context to be used ( needs to be created using InputParser_Create )
* @param Word that we want to check
* @param String that we want to compare against ( that should be null terminated )
* @retval 1=Match,0=Strings are different
*/
unsigned char InputParser_WordCompareAuto(struct InputParserC * ipc,unsigned int num,const char * word);
/**
* @brief Get back a string ( token ) after performing InputParser_SeperateWords
* @ingroup InputParser
* @param InputParser Context to be used ( needs to be created using InputParser_Create )
* @param Word that we want to get
* @param Pointer to a C String that will accomodate the output
* @param Size of Pointer provided , should be big enough for the whole string plus its null terminator
* @retval 1=Sucess,0=Failure
*/
unsigned int InputParser_GetWord(struct InputParserC * ipc,unsigned int num,char * wheretostore,unsigned int storagesize);
/**
* @brief Get back an uppercase string ( token ) after performing InputParser_SeperateWords
* @ingroup InputParser
* @param InputParser Context to be used ( needs to be created using InputParser_Create )
* @param Word that we want to get
* @param Pointer to a C String that will accomodate the output
* @param Size of Pointer provided , should be big enough for the whole string plus its null terminator
* @retval 1=Sucess,0=Failure
*/
unsigned int InputParser_GetUpcaseWord(struct InputParserC * ipc,unsigned int num,char * wheretostore,unsigned int storagesize);
/**
* @brief Get back a lowercase string ( token ) after performing InputParser_SeperateWords
* @ingroup InputParser
* @param InputParser Context to be used ( needs to be created using InputParser_Create )
* @param Word that we want to get
* @param Pointer to a C String that will accomodate the output
* @param Size of Pointer provided , should be big enough for the whole string plus its null terminator
* @retval 1=Sucess,0=Failure
*/
unsigned int InputParser_GetLowercaseWord(struct InputParserC * ipc,unsigned int num,char * wheretostore,unsigned int storagesize);
/**
* @brief Get back a signed integer ( token ) after performing InputParser_SeperateWords
* @ingroup InputParser
* @param InputParser Context to be used ( needs to be created using InputParser_Create )
* @param Word that we want to get
* @retval The value in the form of a number of token with number num , if the token is not a number returns null
*/
signed int InputParser_GetWordInt(struct InputParserC * ipc,unsigned int num);
/**
* @brief Get back a float ( token ) after performing InputParser_SeperateWords
* @ingroup InputParser
* @param InputParser Context to be used ( needs to be created using InputParser_Create )
* @param Word that we want to get
* @retval The value in the form of a floating precision number of token , if the token is not a number returns NaN
*/
float InputParser_GetWordFloat(struct InputParserC * ipc,unsigned int num);
/**
* @brief Get back The Length of a token so that we can allocate a proper buffer and then call InputParser_GetWord
* @ingroup InputParser
* @param InputParser Context to be used ( needs to be created using InputParser_Create )
* @param Word that we want to get
* @retval The length of the token string size , 0=Failure to access token num
*/
unsigned int InputParser_GetWordLength(struct InputParserC * ipc,unsigned int num);
/**
* @brief Split input string in tokens, this is the main functionality of this library..!
* @ingroup InputParser
* @param InputParser Context to be used ( needs to be created using InputParser_Create )
* @param Word that we want to split to tokens
* @param 1=Keep a copy of the input string, this is safer in case the input string changes from another thread etc. , 0=Zero copy splitting that has more chances of going wrong
* @retval The number of tokens split,0=Failure
*/
int InputParser_SeperateWords(struct InputParserC * ipc,char * inpt,char keepcopy);
/**
* @brief Same as InputParser_SeperateWords but accepts const char strings as input
* @ingroup InputParser
* @param InputParser Context to be used ( needs to be created using InputParser_Create )
* @param Word that we want to split to tokens
* @param 1=Keep a copy of the input string, this is safer in case the input string changes from another thread etc. , 0=Zero copy splitting that has more chances of going wrong
* @retval The number of tokens split,0=Failure
*/
int InputParser_SeperateWordsCC(struct InputParserC * ipc,const char * inpt,char keepcopy);
/**
* @brief Same as InputParser_SeperateWords but accepts unsigned char strings as input
* @ingroup InputParser
* @param InputParser Context to be used ( needs to be created using InputParser_Create )
* @param Word that we want to split to tokens
* @param 1=Keep a copy of the input string, this is safer in case the input string changes from another thread etc. , 0=Zero copy splitting that has more chances of going wrong
* @retval The number of tokens split,0=Failure
*/
int InputParser_SeperateWordsUC(struct InputParserC * ipc,unsigned char * inpt,char keepcopy);
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,2 @@
This code actually has it's own repository ( https://github.com/AmmarkoV/InputParser ) and also included in the AmmarServer dependency ( https://github.com/AmmarkoV/AmmarServer/tree/master/src/InputParser )
However to simplify build process it is also included as standalone here.
@@ -0,0 +1,3 @@
This is the dependencies subdirectory
At minimum here there should be a libtensorflow , RGBDAcquisition and maybe an opencv-3.2.0
@@ -0,0 +1,54 @@
FROM nvidia/cuda:11.6.1-devel-ubuntu20.04
ENV DEBIAN_FRONTEND=noninteractive
RUN mkdir /python_install
RUN mkdir /model_code
WORKDIR /python_install
RUN \
echo "**** packages installation ****" \
&& apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/3bf863cc.pub \
&& apt-get update && apt-get install -y \
vim \
build-essential \
cmake \
libopencv-dev \
libjpeg-dev \
libpng-dev \
libglew-dev \
libpthread-stubs0-dev \
git \
virtualenv \
time \
sudo \
wget \
nano \
curl \
software-properties-common \
rsync \
apt-utils \
ffmpeg \
unzip
RUN curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash \
&& apt-get install git-lfs \
&& git lfs install
RUN add-apt-repository ppa:deadsnakes/ppa
RUN apt-get update
RUN apt-get install -y python3.10 python3.10-venv python3.10-dev python3.10-full python3.10-distutils
# COPY requirements.txt .
# Install Python dependencies
RUN python3.10 -m venv python \
&& python/bin/pip install --upgrade pip wheel setuptools \
&& . python/bin/activate
WORKDIR /model_code
COPY . /model_code/MocapNET
RUN cd /model_code/MocapNET && ./initialize.sh
# RUN cd /home/${user_name}/workspace && git clone https://github.com/FORTH-ModelBasedTracker/MocapNET && cd MocapNET && ./initialize.sh --collab
+44
View File
@@ -0,0 +1,44 @@
#!/usr/bin/env bash
# This script builds and runs a docker image for local use.
#Although I dislike the use of docker for a myriad of reasons, due needing it to deploy on a particular machine
#I am adding a docker container builder for the repository to automate the process
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd "$DIR"
cd ..
REPOSITORY=`pwd`
cd "$DIR"
NAME="mocapnet"
dockerfile_pth="$DIR"
mount_pth="$REPOSITORY"
# update tensorflow image
docker pull tensorflow/tensorflow:latest-gpu
# build and run tensorflow
docker build \
-t $NAME \
$dockerfile_pth \
--build-arg user_id=$UID
docker run -d \
--gpus all \
--shm-size 8G \
-it \
--name $NAME-container \
-v $mount_pth:/home/user/workspace \
$NAME
docker ps -a
OUR_DOCKER_ID=`docker ps -a | grep mocapnet | cut -f1 -d' '`
echo "Our docker ID is : $OUR_DOCKER_ID"
echo "Attaching it using : docker attach $OUD_DOCKER_ID"
docker attach $OUR_DOCKER_ID
exit 0
+119
View File
@@ -0,0 +1,119 @@
#!/bin/bash
set -ex
DIR=`pwd`
cd "$DIR"
ORIG_DIR=`pwd`
#Simple dependency checker that will apt-get stuff if something is missing
# sudo apt-get install build-essential cmake libopencv-dev libjpeg-dev libpng-dev libglew-dev libpthread-stubs0-dev
SYSTEM_DEPENDENCIES="wget git build-essential cmake libopencv-dev libjpeg-dev libpng-dev libglew-dev libpthread-stubs0-dev"
#------------------------------------------------------------------------------
for REQUIRED_PKG in $SYSTEM_DEPENDENCIES
do
PKG_OK=$(dpkg-query -W --showformat='${Status}\n' $REQUIRED_PKG|grep "install ok installed")
echo "Checking for $REQUIRED_PKG: $PKG_OK"
if [ "" = "$PKG_OK" ]; then
echo "No $REQUIRED_PKG. Setting up $REQUIRED_PKG."
#If this is uncommented then only packages that are missing will get prompted..
#sudo apt-get --yes install $REQUIRED_PKG
#if this is uncommented then if one package is missing then all missing packages are immediately installed..
sudo apt-get install $SYSTEM_DEPENDENCIES
break
fi
done
#------------------------------------------------------------------------------
cd "$DIR"
if [ -f dependencies/RGBDAcquisition/README.md ]; then
echo "RGBDAcquisition appears to already exist .."
#cd "$DIR/dependencies/RGBAcquisition"
#echo "We can make sure that it is up to date to avoid issues like https://github.com/FORTH-ModelBasedTracker/MocapNET/issues/48.."
#echo "However someone might not want to update the code.. what to do.."
#git pull
#cd "$DIR"
else
cd "$DIR/dependencies"
git clone https://github.com/AmmarkoV/RGBDAcquisition
cd RGBDAcquisition
# This package has no releases so we just picked a "good" checkout
git checkout b752895
mkdir build
cd build
cmake ..
#We dont need to make it
#make
cd ../opengl_acquisition_shared_library/opengl_depth_and_color_renderer
mkdir build
cd build
cmake ..
#We dont need to make it
#make
cd "$DIR"
#Also retrieve Renderer
#ln -s dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/Renderer
fi
if [ -f /usr/local/lib/libtensorflow.so ]; then
echo "Found a system wide tensorflow installation, not altering anything"
elif [ -f dependencies/libtensorflow/lib/libtensorflow.so ]; then
echo "Found a local tensorflow installation, not altering anything"
else
echo "Tensorflow not found, downloading Tensorflow 2.3.1 with GPU support.."
if [ ! -f dependencies/libtensorflow-gpu-linux-x86_64-2.3.1.tar.gz ]; then
cd "$DIR/dependencies"
wget https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-gpu-linux-x86_64-2.3.1.tar.gz
# mkdir libtensorflow
# tar -C libtensorflow -xzf
#echo "Please give me sudo permissions to install Tensorflow $TENSORFLOW_VERSION C Bindings.."
tar -C /usr/local -xzf libtensorflow-gpu-linux-x86_64-2.3.1.tar.gz
else
echo "Tensorflow 2.3.1 GPU tarball already downloaded."
fi
fi
cd "$DIR"
cd src/python/mnet4
rm -rf BVH/
ln -s ../../../dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Applications/BVHTester/ BVH
cd BVH
./makeLibrary.sh
cd ..
#Install rest of python stuff..
./setup.sh
#Now that we have everything lets build..
echo "Now to try and build MocapNET.."
cd "$DIR"
#if there is an already existing build directory and you called initialize.sh
#it will get initialized as well.. (https://github.com/FORTH-ModelBasedTracker/MocapNET/issues/19)
if [ -d "build" ]; then
echo "Build directory already exists, but since the initialize.sh script was called "
echo "this means the user wants to also initialize the build directory, so doing this"
echo "to prevent problems like https://github.com/FORTH-ModelBasedTracker/MocapNET/issues/19"
rm -rf build/
fi
mkdir build
cd build
cmake ..
make
cd "$DIR"
exit 0
+52
View File
@@ -0,0 +1,52 @@
FORTH & END-USER LICENSE AGREEMENT
for the
FORTH-ICS MOCAPNET LIBRARY
PLEASE READ THE FOLLOWING CAREFULLY BEFORE USING:
By using this hereby licensed to You product you expressly acknowledge and agree, on your own behalf as an individual, and on behalf of your employer or another entity which has not yet done so (collectively "You" or "Your"), that You are entering into a legal binding license agreement with FORTH ("FORTH"), have full authority to bind such employer or other entity with this License Agreement, and have understood and agree to comply with the terms & conditions of this License Agreement below (hereafter "Terms", "License Agreement"). You hereby waive any applicable rights to requirements for an original (non-electronic) signature or delivery or retention of non-electronic records, to the extent permitted under applicable law, customs & codes of practice.
1. Scope of this License Agreement
Subject to these Terms, FORTH hereby grants to You a limited, worldwide (subject to applicable export restrictions), non-exclusive, personal, non-transferable, revocable, license to use the FORTH proprietary MOCAPNET LIBRARY that was developed at and by FORTH (under the supervision of Prof. A. Argyros, at FORTH-ICS, Computational Vision and Robotics Lab) and is solely owned by FORTH and known as FORTH-ICS MOCAPNET LIBRARY" (referred to hereafter as "LIBRARY") only for "personal" research and/or academic, non-profit, non-commercial use, pursuant to this License Agreement with FORTH.
2. Restrictions
a. You agree to use this Licensed LIBRARY only as permitted herein;
b. You are not allowed utilizing this Licensed LIBRARY with content/products/services that is not appropriate for viewing by a general audience or that directs users to such content/actions, which include, without limitation to, that which: (a) promote offensive, criminal, illegal content or activities; (b) violate any law, statute, order, or regulation, or; (c) violate intellectual property rights; (d) result in legal liability for FORTH; and/or (e) is considered by FORTH as unfair competition and/or prejudice to FORTH" s legitimate rights and interests ;
c. You shall not and shall not permit third parties to: (a) integrate the Licensed LIBRARY with any products and/or services, (b) distribute the Licensed LIBRARY in any manner, (c) use or make available the Licensed LIBRARY to any person other than You, notwithstanding any applicable open source license terms or otherwise, (d) modify the Licensed LIBRARY,; or (e) change, obscure or delete any proprietary notices or legends which appear in the Licensed LIBRARY, for purposes other than as explicitly permitted herein;
d. You agree that You will not, directly or indirectly, and You shall not permit third parties to (a) decompile, disassemble or reverse engineer the LIBRARY, in whole or in part, or use, copy, reproduce, write or develop any derivative software or any other software program based upon all or any part of the LIBRARY or any confidential information of FORTH, without FORTH's express prior written consent and/or for purposes other than "personal use" as herein permitted; (b) not compete directly or indirectly with FORTH in exploitation or otherwise of the LIBRARY and/or of any accompanying Hardware; and (c) not provide software maintenance, training or consulting or other expertise services in respect of the LIBRARY. In the event applicable law grants You the right to reverse engineer, You shall provide FORTH with prior written notice including information sufficient regarding Your intended method of reverse engineering, its purpose and the legal authority for such activity and shall afford FORTH a reasonable period before initiating such activity in order to evaluate and/or legally challenge the activity. You shall refrain from such activity until such time as any legal challenge is resolved in Your favor. Reverse engineering includes, without limitation, sniffing, decompiling, or otherwise deriving source code.
3. Intellectual Property Ownership
FORTH and/or its rightholders shall respect and retain at all times all rights, title and interests, including all intellectual property rights, in and to the FORTH Logos, copyright notices and Terms and conditions of permitted use, and/or (if any) other applicable open source copyright notices and license terms, as well as with respect to any and all improvements, modifications, enhancements, and derivative works (if any) thereof and/or feedback associated therewith while using this Licensed LIBRARY, that You shall refer to always and provide to FORTH. All rights not specifically granted in these Terms shall be retained by FORTH.
4. Warranties
You represent and warrant that: (a) You have the full right, power and authority to enter into these Terms and carry out Your obligations hereunder; (b) the consent to and performance of these Terms will not result in the breach or violation of any law or regulation applicable to it or any contract or commitment by which You are bound; and (c) You do not infringe any rights of a third party.
5. User Support
FORTH shall not be required to provide support of any kind with respect to the Licensed LIBRARY.
6. Disclaimer of Warranties
THE LICENSED LIBRARY, IS DEEMED ACCEPTED BY YOU. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, FORTH, ITS LICENSORS AND SUPPLIERS (if any) PROVIDE THE LICENSED SOFTWARE AND ANY (IF ANY) SUPPORT SERVICES "AS IS" AND WITHOUT LIABILITY; TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, FORTH EXPRESSLY DISCLAIMS ANY IMPLIED WARRANTIES AND CONDITIONS, INCLUDING WITHOUT LIMITATION IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE OR NON-INFRINGEMENT AS WELL AS ANY WARRANTIES THAT THE OPERATION OF THE SOFTWARE OR DRIVERS WILL BE UNINTERRUPTED OR ERROR FREE.
7. Indemnity
You agree to indemnify and hold FORTH, concerned personnel/developers and its licensors harmless against any cost, loss, liability or expense (including attorneys' fees) arising out of any third party claims against FORTH, its personnel/developers and/or its licensors (i) relating to Your utilization of the Licensed LIBRARY and/or (ii) arising from Your actions or omissions.
8. Term
These Terms shall become effective upon Your acceptance, use of the hereby Licensed software and shall remain in effect until these terms, use of the Licensed software are terminated by FORTH. Upon termination (a) the rights and license(s) granted to You pursuant to these Terms shall automatically terminate; (b) You shall certify to FORTH that the Licensed product subject to these Terms has been removed from any equipment, network, premises, product, services or any other location or space, (c) You shall cease to use all FORTH proprietary content, product, services.
9. Survival
The provisions of Sections 2-12 shall survive the expiration or termination of these Terms for any reason whatsoever.
10. Exclusion of Incidental, Consequential and certain other Damages
To the maximum extent permitted by applicable laws, in no event shall FORTH, its personnel, directors, licensors or its suppliers be liable for any special, incidental, indirect, or consequential damages whatsoever (including, but not limited to, damages for loss of profits or confidential or other information, for business interruption, for personal injury, for loss of privacy, for failure to meet any duty including of good faith or of reasonable care, for negligence, and for any other pecuniary or other loss whatsoever) arising out of or in any way related to the use of or inability to use the Licensed product, or otherwise under or in connection with any provision of these Terms, even in the event of the fault, tort (including negligence), strict liability, breach of contract or breach of warranty of FORTH, its personnel, directors, affiliates, licensors or any supplier, and even if they or any one of them has been advised of the possibility of such damages.
11. Limitation of Liability and Remedies
Notwithstanding anything to the contrary contained herein or any damages that You might incur for any reason whatsoever, the entire and maximum liability of FORTH, its personnel, directors, affiliates, licensors and any suppliers, in aggregate for all claims made in contract, tort or otherwise in connection with the subject matter hereof, and Your exclusive remedy for all of the foregoing shall be limited to the fees actually paid by You, if any. The foregoing limitations, exclusions and disclaimers shall apply to the maximum extent permitted by applicable laws, even if any remedy fails its essential purpose.
12. Miscellaneous
a. Governing Law; Attorneys Fees. These Terms shall be construed and controlled by the Greek Law, and You consent to the non-exclusive jurisdiction and venue of the Greek courts of Athens, provided that FORTH may seek immediate injunctive or other relief with respect to a violation of intellectual property rights or confidentiality obligations in any appropriate jurisdiction, and You waive all defenses of lack of personal jurisdiction and forum non conveniens. EACH OF THE PARTIES HERETO HEREBY IRREVOCABLY WAIVES ALL RIGHT TO TRIAL BY JURY.
b. Assignment. You may not assign these Terms or any portion thereof to any third party unless FORTH expressly consents in writing.
c. No Partnership. Nothing in these Terms shall be construed to create a partnership or agency between the parties, and neither shall have authority to bind or represent itself as the agent or partner of the other.
d. Severability. If any provision of these Terms shall be held to be invalid, illegal or unenforceable, such holding shall in no way affect or impair the remaining provisions, and the parties shall use their reasonable efforts to substitute valid and enforceable provisions which have the closest meaning and purpose as those so held.
e. Entire Agreement; Variation; Waiver; Counterparts. These Terms set forth the entire understanding of the parties, which supersedes and merges all prior proposals, understandings and all other agreements oral and written between the parties relating to the subject matter herein and may not be modified except in a writing executed by both parties or in new terms posted here or notified to You. Failure of a party to enforce any of the provisions of these Terms will not be construed to be a waiver of the provision, and no waiver of any rights hereunder shall be deemed to be a waiver of the same or other right on any other occasion.
" Copyright FORTH 2019. All rights reserved.
+316
View File
@@ -0,0 +1,316 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#<----- Click this play button to setup MocapNET v4!\n",
"\n",
"#This is the Total Capture version that handles body, hands, gaze, face!\n",
"#It also has been rewritten from scratch in Python for your convenience.\n",
"#If you deploy this on your PC, run : jupyter notebook mocapnet4.ipynb\n",
"# and remove --collab from the setup.sh invocation 2 lines below..!\n",
"import os\n",
"if (os.path.isfile(\"MocapNET.py\")):\n",
" !git pull\n",
" exit\n",
"!git clone -b mnet4 https://github.com/FORTH-ModelBasedTracker/MocapNET.git\n",
"!MocapNET/src/python/mnet4/setup.sh --collab\n",
"os.chdir(\"MocapNET/src/python/mnet4\")\n",
"print(\"MocapNET setup is finished, you can run the next cell now..\")\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#<----- Click to get a video from the internet and then track it ( e.g. shuffle.webm )\n",
"\n",
"#You can also upload your own by clicking the Files icon and using the menu on the left\n",
"#You need to put files in the /content/MocapNET/src/python/mnet4/ directory\n",
"\n",
"#Make sure we are at the correct directory\n",
"import os\n",
"if (not os.path.isfile(\"mediapipeHolisticWebcamMocapNET.py\")):\n",
" os.chdir(\"MocapNET/src/python/mnet4\")\n",
"\n",
"!wget http://ammar.gr/mocapnet/shuffle.webm -O shuffle.webm\n",
"\n",
"#Analyze the file shuffle.web through MediaPipe 2D + MocapNET 3D Pose Estimation!\n",
"!(python3 -m mediapipeHolisticWebcamMocapNET --from shuffle.webm --ik 0.001 99 99 --smooth 60 10 --all --save --plot --headless 2> /dev/null)\n",
"print(\"MocapNET video input processing finished, you can run the next cells now to see the results..\")\n",
"\n",
"#Outputs are :\n",
"#livelastRun3DHiRes.mp4 | A video showing the regressed output overlayed on RGB\n",
"#livelastPlot3DHiRes.mp4| A video plot of the retrieved BVH degrees of freedom\n",
"#out.bvh | the extracted BVH file \n",
"#2d_out.csv | Input 2D joints used by MocapNET as a CSV file\n",
"#3d_out.csv | Output 3D joints produced by MocapNET as a CSV file\n",
"#bvh_out.csv | Output BVH angles produced by MocapNET as a CSV file\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#<----- Click to run a sign-language dataset without mediapipe from a dumped Openpose/JSON/CSV source\n",
"\n",
"#Make sure we are at the correct directory\n",
"import os\n",
"if (not os.path.isfile(\"csvNET.py\")):\n",
" os.chdir(\"MocapNET/src/python/mnet4\")\n",
"\n",
"#Download a single sign (con0014) from SIGNUM\n",
"!wget http://ammar.gr/datasets/signumtest.zip -O signumtest.zip\n",
"!unzip -o signumtest.zip\n",
"\n",
"#Analyze the file con0014/2dJoints_v1.4.csv through MediaPipe 2D + MocapNET 3D Pose Estimation!\n",
"!(python3 -m csvNET --from con0014/2dJoints_v1.4.csv --ik 0.001 99 99 --upperbody --reye --mouth --hands --save --plot --headless 2> /dev/null)\n",
"print(\"MocapNET video input processing finished, you can run the next cells now to see the results..\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#<----- Click to see the generated BVH angle plot of the last MocapNET run!\n",
"from IPython.display import Video\n",
"import os\n",
"if (not os.path.isfile(\"livelastPlot3DHiRes.mp4\")):\n",
" print(\"Please execute the previous cells and wait for them to complete before seeing this visualization!\")\n",
" exit\n",
"\n",
"Video(\"livelastPlot3DHiRes.mp4\",embed=True)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#<----- Click to see the generated visualization of the last MocapNET run!\n",
"from IPython.display import Video\n",
"import os\n",
"if (not os.path.isfile(\"livelastRun3DHiRes.mp4\")):\n",
" print(\"Please execute the previous cells and wait for them to complete before seeing this visualization!\")\n",
" exit\n",
"\n",
"Video(\"livelastRun3DHiRes.mp4\",embed=True)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#<----- Click to download the generated BVH/3D files of the last MocapNET run!\n",
"import os \n",
"from google.colab import files\n",
"if (not os.path.isfile(\"out.bvh\")) or (not os.path.isfile(\"2d_out.csv\")) or (not os.path.isfile(\"bvh_out.csv\")) or (not os.path.isfile(\"3d_out.csv\")):\n",
" print(\"Please execute the previous cells and wait for them to complete before downloading output!\")\n",
"else:\n",
" print(\"Download Output Files!\")\n",
" files.download(\"out.bvh\")\n",
" files.download(\"2d_out.csv\")\n",
" files.download(\"3d_out.csv\")\n",
" files.download(\"bvh_out.csv\")\n",
"#To render the 3D face get Blender from https://www.blender.org/\n",
"#Download http://ammar.gr/mocapnet/mnet4/face.blend and open it using Blender\n",
"#Download http://ammar.gr/mocapnet/mnet4/headerWithHeadAndOneMotion.bvh and open it using Blender at a 0.01 scale\n",
"#Run The Loaded Python Script\n",
"#Click on the armature and on the menu right click the orange rectangle\n",
"#Select headerWithHeadAndOneMotion as Source BVH\n",
"#Select newgirl as Target Obj\n",
"#Select a directory as a target for generated dataset\n",
"#Select the path to the regressed bvh_out.csv to load pre-generated dataset\n",
"#Click Just Render CSV Dataset\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#<----- Click to attempt MocapNET live demo by streaming your camera to Google Colab\n",
"#EXPERIMENTAL, performance is impacted because of low image throughput!\n",
"\n",
"import cv2\n",
"import os\n",
"from colabStream import init_camera,take_frame,show_frame\n",
"\n",
" \n",
"from mediapipeHolisticWebcamMocapNET import MediaPipeHolistic\n",
"from MocapNET import easyMocapNETConstructor\n",
"from folderStream import resize_with_padding\n",
"\n",
"# Create instances of MediaPipeHolistic and MocapNET\n",
"mp_holistic = MediaPipeHolistic(doMediapipeVisualization=False)\n",
"mnet = easyMocapNETConstructor(\n",
" engine = \"onnx\",\n",
" doProfiling = False,\n",
" multiThreaded = False,\n",
" doHCDPostProcessing = True,\n",
" hcdLearningRate = 0.001,\n",
" hcdEpochs = 99,\n",
" hcdIterations = 99,\n",
" bvhScale = 1.0,\n",
" doBody = True,\n",
" doFace = False,\n",
" doREye = True,\n",
" doMouth = True,\n",
" doHands = True,\n",
" addNoise = 0.0\n",
")\n",
"\n",
"\n",
"# init JavaScript code\n",
"init_camera()\n",
"\n",
"while True:\n",
" try:\n",
" image = take_frame()\n",
" \n",
" image = resize_with_padding(image,1280,720)\n",
"\n",
" # Perform image processing with MediaPipeHolistic\n",
" mocapNETInput, annotated_image = mp_holistic.convertImageToMocapNETInput(image)\n",
"\n",
" # Perform 3D joint prediction with MocapNET\n",
" mocapNET3DOutput = mnet.predict3DJoints(mocapNETInput)\n",
"\n",
" # Visualize the results on the image\n",
" #image_with_results = Image.fromarray(cv2.cvtColor(annotated_image, cv2.COLOR_BGR2RGB))\n",
" \n",
" from MocapNETVisualization import visualizeMocapNETEnsemble\n",
" image,plotImage = visualizeMocapNETEnsemble(mnet,annotated_image,plotBVHChannels=False)\n",
" \n",
" show_frame(annotated_image) # it replace previous image\n",
" \n",
" except Exception as err:\n",
" print('Exception:', err)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#D/L and compile a different version of MocapNET and evaluate it against CMUBVH test dataset\n",
"#Running this will take a while, but it is usefult to compare different trained MocapNET Models!\n",
"import os\n",
"\n",
"#Download Test Set!\n",
"if (not os.path.isfile(\"dataset/generated/bvh_body_all_test.csv\")):\n",
" print(\"Downloading test set!\")\n",
" os.system(\"wget http://ammar.gr/datasets/testBody.zip && unzip testBody.zip\")\n",
"\n",
"#Download a different MocapNET build\n",
"!python3 -m getModelFromDatabase --get 319 #<- change number to try a different version\n",
"\n",
"#Do Evaluation\n",
"!python3 -m evaluateMocapNET --config dataset/body_configuration.json --all body --skip 5 --engine onnx > lastEvaluationLog.txt\n",
"!tail -n 30 lastEvaluationLog.txt "
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<iframe width=\"560\" height=\"315\" src=\"https://youtube.com/embed/ooLRUS5j4AI\"\n",
"</iframe>\n"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%HTML\n",
"<!-- Activate this block to see a youtube video about rendering MocapNET results with Blender -->\n",
"<iframe width=\"560\" height=\"315\" src=\"https://youtube.com/embed/ooLRUS5j4AI\"></iframe>"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"\"\"\"\n",
"\n",
"This library is provided under the FORTH license\n",
"https://github.com/FORTH-ModelBasedTracker/MocapNET/blob/master/license.txt\n",
"\n",
"If you use this version of MocapNET for your research please consider citing : \n",
"\n",
"@inproceedings{Qammaz2023b,\n",
" author = {Qammaz, Ammar and Argyros, Antonis},\n",
" title = {A Unified Approach for Occlusion Tolerant 3D Facial Pose Capture and Gaze Estimation using MocapNETs},\n",
" booktitle = {International Conference on Computer Vision Workshops (AMFG 2023 - ICCVW 2023), (to appear)},\n",
" publisher = {IEEE},\n",
" year = {2023},\n",
" month = {October},\n",
" address = {Paris, France},\n",
" projects = {VMWARE,I.C.HUMANS},\n",
" pdflink = {http://users.ics.forth.gr/ argyros/mypapers/2023_10_AMFG_Qammaz.pdf}\n",
"}\n",
"\n",
"@inproceedings{Qammaz2021,\n",
" author = {Qammaz, Ammar and Argyros, Antonis A},\n",
" title = {Towards Holistic Real-time Human 3D Pose Estimation using MocapNETs},\n",
" booktitle = {British Machine Vision Conference (BMVC 2021)},\n",
" publisher = {BMVA},\n",
" year = {2021},\n",
" month = {November},\n",
" projects = {I.C.HUMANS},\n",
" videolink = {https://www.youtube.com/watch?v=aaLOSY_p6Zc}\n",
"}\n",
"\"\"\" "
]
}
],
"metadata": {
"colab": {
"provenance": []
},
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.12"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
+37
View File
@@ -0,0 +1,37 @@
#!/bin/bash
#Reminder , to get a single file out of the repo use "git checkout -- path/to/file.c"
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd "$DIR"
#All OpenGL/BVH code relies on RGBDAcquisition code so we need to sync this as well
if [ -f dependencies/RGBDAcquisition/README.md ]; then
echo "RGBDAcquisition appears to exist, reverting it .."
cd dependencies/RGBDAcquisition
git reset --hard HEAD
git pull origin master
cd "$DIR"
else
echo "Could not find RGBDAcquisition, please rerun the initialize.sh script .."
fi
if [ -f dependencies/AmmarServer/README.md ]; then
echo "AmmarServer appears to exist, reverting it .."
cd dependencies/AmmarServer
git reset --hard HEAD
git pull origin master
cd "$DIR"
fi
#Now sync rest of code
cd "$DIR"
git reset --hard HEAD
git pull origin master
exit 0
@@ -0,0 +1,410 @@
#!/bin/bash
# Ansi color code variables
red="\e[0;91m"
blue="\e[0;94m"
expand_bg="\e[K"
blue_bg="\e[0;104m${expand_bg}"
red_bg="\e[0;101m${expand_bg}"
green_bg="\e[0;102m${expand_bg}"
green="\e[0;92m"
white="\e[0;97m"
bold="\e[1m"
uline="\e[4m"
reset="\e[0m"
function checkForError
{
RESULT=$?
if [ $RESULT -eq 0 ]; then
echo "Successfully ran the hand pose estimation"
else
echo -e "${red_bg}TERMINATING SCRIPT${reset}"
echo -e "${red}Failed running $1${reset}"
exit 1
fi
}
#We move to the correct directory..
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd "$DIR"
cd ..
if [ $# -eq 0 ]
then
echo "No arguments supplied, please run with --quaternions or --euler"
exit 0
fi
#Setting this to qbvh will activate
#quaternion code..!
BVH_TYPE="bvh"
if [ "$1" == "--quaternions" ]; then
BVH_TYPE="qbvh"
elif [ "$1" == "--euler" ]; then
BVH_TYPE="bvh"
else
echo "You gave arguments but where not what we expected.."
exit 0
fi
#FULL SIZE EXPERIMENT
echo "Doing full size experiment"
FULL_RANDOM_POSES="1999999"
ZERO_POSES="199999"
BASE_POSES="599999"
FINGER_POSES="399999"
#SMALL SIZE (1/2) EXPERIMENT
#echo "Doing small (1/2) size experiment"
#FULL_RANDOM_POSES="1000000"
#ZERO_POSES="100000"
#BASE_POSES="300000"
#FINGER_POSES="200000"
#SMALL SIZE (1/10) EXPERIMENT
#echo "Doing small (1/10) size experiment"
#FULL_RANDOM_POSES="199999"
#ZERO_POSES="19999"
#BASE_POSES="59999"
#FINGER_POSES="39999"
#BASE_POSES="99999"
#FINGER_POSES="19999"
USE_OCCLUSIONS="" # Set to "--occlusions" for occlusions #deactivated @ 2021-03-05
USE_END_JOINTS="1" # We need end joints since they are our fingertips..
#Where is our output located
outputDir="dataset/"
# Use --printparams in view commands to view the commands that are given to the utility at stderr
VIEW_COMMANDS=" --printparams "
HIDEBODY=" $DONT_USE_END_JOINTS 8 abdomen chest eye.r eye.l toe1-2.r toe5-3.r toe1-2.l toe5-3.l"
SELECT_RHAND="--selectJoints $USE_END_JOINTS 17 rHand finger5-1.r finger5-2.r finger5-3.r finger4-1.r finger4-2.r finger4-3.r finger3-1.r finger3-2.r finger3-3.r finger2-1.r finger2-2.r finger2-3.r rthumbBase rthumb finger1-2.r finger1-3.r --hide2DLocationOfJoints 0 1 rthumbBase"
#Note on --hide2DLocationOfJoints: We want to contain these joints in the BVH file and solve them, but they do not correspond to the BODY25 format so we hide them as 2D points..
SELECT_LHAND="--selectJoints $USE_END_JOINTS 17 lHand finger5-1.l finger5-2.l finger5-3.l finger4-1.l finger4-2.l finger4-3.l finger3-1.l finger3-2.l finger3-3.l finger2-1.l finger2-2.l finger2-3.l lthumbBase lthumb finger1-2.l finger1-3.l --hide2DLocationOfJoints 0 1 lthumbBase"
#Note on --hide2DLocationOfJoints: We want to contain these joints in the BVH file and solve them, but they do not correspond to the BODY25 format so we hide them as 2D points..
# LEFT RIGHT
MID_THUMBBASE_Y="63" #Thumb Left/Right -56->48 -48->56
MID_FINGER5_1_Y="54" #Pinky Left/Right -10->22 -22->10
MID_FINGER4_1_Y="39" #Ring Left/Right -12->12 -12->12
MID_FINGER3_1_Y="24" #Mid Left/Right -12->12 -12->12
MID_FINGER2_1_Y="24" #Pointer Left/Right -12->12 -12->12
NATURAL_LHAND="--set 12 -5.0 --set 39 5.0 --set 54 10.5 --set 63 -18"
NATURAL_RHAND="--set 12 5.0 --set 39 -5.0 --set 54 -10.5 --set 63 18"
#----------------------------------------------------------------------------------------------------------------------------------------------------
#----------------------------------------------------------------------------------------------------------------------------------------------------
#----------------------------------------------------------------------------------------------------------------------------------------------------
#----------------------------------------------------------------------------------------------------------------------------------------------------
function generateRightHandDataset
{
OUTBASE="$1"
#Make sure file is wiped before
#adding new poses..
#-------------------------
rm $outputDir/2d_$OUTBASE
rm $outputDir/bvh_$OUTBASE
#-------------------------
MIN_HAND_DEPTH="$2"
MAX_HAND_DEPTH="$3" #1500
MIN_RHAND_RZ="$4"
MAX_RHAND_RZ="$7"
MIN_RHAND_RY="$5"
MAX_RHAND_RY="$8"
MIN_RHAND_RX="$6"
MAX_RHAND_RX="$9"
FROM="--haltonerror $VIEW_COMMANDS --from dataset/rhand.$BVH_TYPE"
RANDOM_POSITION_ROTATION="--randomize2D $MIN_HAND_DEPTH $MAX_HAND_DEPTH $MIN_RHAND_RZ $MIN_RHAND_RY $MIN_RHAND_RX $MAX_RHAND_RZ $MAX_RHAND_RY $MAX_RHAND_RX $USE_OCCLUSIONS"
OUT="--csv $outputDir $OUTBASE 2d+bvh "
#RHAND
#./BVHGUI2 --from dataset/rhand.qbvh --set 2 -25 --set 3 0.5 --set 4 -0.5 --set 5 0.5 --set 6 -0.5 --set 12 5.0 --set 39 -5.0 --set 54 -10.5 --set 63 18
echo "TEST?"
#New automatic pose generation based on IK Problem..
./GroundTruthDumper $FROM $NATURAL_RHAND --repeat $FULL_RANDOM_POSES $SELECT_RHAND --randomizeBasedOnIKConstrains rhand $RANDOM_POSITION_ROTATION $OUT
checkForError "rhand full random"
#Default BVH poses with everything at zero but hand is naturally open
./GroundTruthDumper $FROM $NATURAL_RHAND --repeat $BASE_POSES $SELECT_RHAND $RANDOM_POSITION_ROTATION $OUT
checkForError "rhand naturally open"
#Default BVH poses with everything at zero but hand is not naturally open, it is has fingers touching
./GroundTruthDumper $FROM --repeat $ZERO_POSES $SELECT_RHAND $RANDOM_POSITION_ROTATION $OUT
checkForError "rhand to zero"
#Default BVH poses with hand naturally open but thumb in the middle
./GroundTruthDumper $FROM $NATURAL_RHAND --set 63 -6.5 --set 64 28.7 --set 65 -8.5 --set 66 -37 --set 67 13 --set 68 -7.6 --set 69 22 --set 70 5 --set 71 -43 --set 72 0 --repeat $ZERO_POSES $SELECT_RHAND $RANDOM_POSITION_ROTATION $OUT
checkForError "rhand naturally open thumb in the middle"
#Right hand Thumb Movement on default pose
./GroundTruthDumper $FROM $NATURAL_RHAND --repeat $FINGER_POSES $SELECT_RHAND $RANDOM_POSITION_ROTATION --randomizeMID $MID_THUMBBASE_Y -48.0 56.0 $OUT
checkForError "Right hand Thumb Movement on default pose"
#All hand open naturally, only finger 5 (pinky) moving
RANDOMIZE_RIGHT_HAND="--/randomizeJointAngles 3 0 65 1 finger5-1.r finger5-2.r finger5-3.r"
./GroundTruthDumper $FROM $NATURAL_RHAND --repeat $FINGER_POSES $SELECT_RHAND $RANDOM_POSITION_ROTATION $RANDOMIZE_RIGHT_HAND $OUT
checkForError "All hand open naturally, only finger 5 (pinky) moving"
#All hand open naturally, only finger 4 (ring) moving
RANDOMIZE_RIGHT_HAND="--randomizeJointAngles 3 0 65 1 finger4-1.r finger4-2.r finger4-3.r"
./GroundTruthDumper $FROM $NATURAL_RHAND --repeat $FINGER_POSES $SELECT_RHAND $RANDOM_POSITION_ROTATION $RANDOMIZE_RIGHT_HAND $OUT
checkForError "All hand open naturally, only finger 4 (ring) moving"
#All hand open naturally, only finger 3 (middle) moving
RANDOMIZE_RIGHT_HAND="--randomizeJointAngles 3 0 65 1 finger3-1.r finger3-2.r finger3-3.r"
./GroundTruthDumper $FROM $NATURAL_RHAND --repeat $FINGER_POSES $SELECT_RHAND $RANDOM_POSITION_ROTATION $RANDOMIZE_RIGHT_HAND $OUT
checkForError "All hand open naturally, only finger 3 (middle) moving"
#All hand open naturally, only finger 2 (pointer) moving
RANDOMIZE_RIGHT_HAND="--randomizeJointAngles 3 0 65 1 finger2-1.r finger2-2.r finger2-3.r"
./GroundTruthDumper $FROM $NATURAL_RHAND --repeat $FINGER_POSES $SELECT_RHAND $RANDOM_POSITION_ROTATION $RANDOMIZE_RIGHT_HAND $OUT
checkForError "All hand open naturally, only finger 2 (pointer) moving"
#All hand open naturally, only finger 1 (thumb) moving
RANDOMIZE_RIGHT_HAND="--randomizeJointAngles 2 -75 75 2 rthumb finger1-2.r --randomizeJointAngles 1 0 45 3 rthumb"
./GroundTruthDumper $FROM $NATURAL_RHAND --repeat $FINGER_POSES $SELECT_RHAND $RANDOM_POSITION_ROTATION $RANDOMIZE_RIGHT_HAND $OUT
checkForError "All hand open naturally, only finger 1 (thumb) moving"
#All fingers closed only thumb moving!
RANDOMIZE_RIGHT_HAND="--randomizeJointAngles 15 65 65 1 finger5-1.r finger5-2.r finger5-3.r finger4-1.r finger4-2.r finger4-3.r finger3-1.r finger3-2.r finger3-3.r finger2-1.r finger2-2.r finger2-3.r rthumb finger1-2.r finger1-3.r --randomizeJointAngles 5 90 90 1 finger5-1.r finger4-1.r finger3-1.r finger2-1.r rthumb --randomizeJointAngles 2 -75 75 2 rthumb finger1-2.r --randomizeJointAngles 1 0 45 3 rthumb"
./GroundTruthDumper $FROM $NATURAL_RHAND --repeat $FINGER_POSES $SELECT_RHAND $RANDOM_POSITION_ROTATION $RANDOMIZE_RIGHT_HAND $OUT
checkForError "RHand - All fingers closed only thumb moving!"
#All fingers closed except Finger 5 ( pinky )
RANDOMIZE_RIGHT_HAND="--randomizeJointAngles 15 65 65 1 finger5-1.r finger5-2.r finger5-3.r finger4-1.r finger4-2.r finger4-3.r finger3-1.r finger3-2.r finger3-3.r finger2-1.r finger2-2.r finger2-3.r rthumb finger1-2.r finger1-3.r --randomizeJointAngles 5 90 90 1 finger5-1.r finger4-1.r finger3-1.r finger2-1.r rthumb --randomizeJointAngles 2 75 75 2 rthumb finger1-2.r --randomizeJointAngles 1 45 45 3 rthumb --randomizeJointAngles 3 0 65 1 finger5-1.r finger5-2.r finger5-3.r"
./GroundTruthDumper $FROM $NATURAL_RHAND --repeat $FINGER_POSES $SELECT_RHAND $RANDOM_POSITION_ROTATION $RANDOMIZE_RIGHT_HAND $OUT
checkForError "RHand - All fingers closed except Finger 5 ( pinky )"
#All fingers closed except Finger 4 ( ring )
RANDOMIZE_RIGHT_HAND="--randomizeJointAngles 15 65 65 1 finger5-1.r finger5-2.r finger5-3.r finger4-1.r finger4-2.r finger4-3.r finger3-1.r finger3-2.r finger3-3.r finger2-1.r finger2-2.r finger2-3.r rthumb finger1-2.r finger1-3.r --randomizeJointAngles 5 90 90 1 finger5-1.r finger4-1.r finger3-1.r finger2-1.r rthumb --randomizeJointAngles 2 75 75 2 rthumb finger1-2.r --randomizeJointAngles 1 45 45 3 rthumb --randomizeJointAngles 3 0 65 1 finger4-1.r finger4-2.r finger4-3.r"
./GroundTruthDumper $FROM $NATURAL_RHAND --repeat $FINGER_POSES $SELECT_RHAND $RANDOM_POSITION_ROTATION $RANDOMIZE_RIGHT_HAND $OUT
checkForError "RHand - All fingers closed except Finger 4 ( ring )"
#All fingers closed except Finger 3 ( middle )
RANDOMIZE_RIGHT_HAND="--randomizeJointAngles 15 65 65 1 finger5-1.r finger5-2.r finger5-3.r finger4-1.r finger4-2.r finger4-3.r finger3-1.r finger3-2.r finger3-3.r finger2-1.r finger2-2.r finger2-3.r rthumb finger1-2.r finger1-3.r --randomizeJointAngles 5 90 90 1 finger5-1.r finger4-1.r finger3-1.r finger2-1.r rthumb --randomizeJointAngles 2 75 75 2 rthumb finger1-2.r --randomizeJointAngles 1 45 45 3 rthumb --randomizeJointAngles 3 0 65 1 finger3-1.r finger3-2.r finger3-3.r"
./GroundTruthDumper $FROM $NATURAL_RHAND --repeat $FINGER_POSES $SELECT_RHAND $RANDOM_POSITION_ROTATION $RANDOMIZE_RIGHT_HAND $OUT
checkForError "RHand - All fingers closed except Finger 3 ( middle )"
#All fingers closed except Finger 2 ( pointer )
RANDOMIZE_RIGHT_HAND="--randomizeJointAngles 15 65 65 1 finger5-1.r finger5-2.r finger5-3.r finger4-1.r finger4-2.r finger4-3.r finger3-1.r finger3-2.r finger3-3.r finger2-1.r finger2-2.r finger2-3.r rthumb finger1-2.r finger1-3.r --randomizeJointAngles 5 90 90 1 finger5-1.r finger4-1.r finger3-1.r finger2-1.r rthumb --randomizeJointAngles 2 75 75 2 rthumb finger1-2.r --randomizeJointAngles 1 45 45 3 rthumb --randomizeJointAngles 3 0 65 1 finger2-1.r finger2-2.r finger2-3.r"
./GroundTruthDumper $FROM $NATURAL_RHAND --repeat $FINGER_POSES $SELECT_RHAND $RANDOM_POSITION_ROTATION $RANDOMIZE_RIGHT_HAND $OUT
checkForError "RHand - All fingers closed except Finger 2 ( pointer )"
#Done
}
#----------------------------------------------------------------------------------------------------------------------------------------------------
#----------------------------------------------------------------------------------------------------------------------------------------------------
#----------------------------------------------------------------------------------------------------------------------------------------------------
#----------------------------------------------------------------------------------------------------------------------------------------------------
function generateLeftHandDataset
{
OUTBASE="$1"
#Make sure file is wiped before
#adding new poses..
#-------------------------
rm $outputDir/2d_$OUTBASE
rm $outputDir/bvh_$OUTBASE
#-------------------------
MIN_HAND_DEPTH="$2"
MAX_HAND_DEPTH="$3" #1500
MIN_LHAND_RZ="$4"
MAX_LHAND_RZ="$7"
MIN_LHAND_RY="$5"
MAX_LHAND_RY="$8"
MIN_LHAND_RX="$6"
MAX_LHAND_RX="$9"
FROM="--haltonerror $VIEW_COMMANDS --from dataset/lhand.$BVH_TYPE"
RANDOM_POSITION_ROTATION="--randomize2D $MIN_HAND_DEPTH $MAX_HAND_DEPTH $MIN_LHAND_RZ $MIN_LHAND_RY $MIN_LHAND_RX $MAX_LHAND_RZ $MAX_LHAND_RY $MAX_LHAND_RX $USE_OCCLUSIONS"
OUT="--csv $outputDir $OUTBASE 2d+bvh "
# ./BVHGUI2 --from dataset/lhand.qbvh --set 2 -25 --set 3 0.5 --set 4 -0.5 --set 5 -0.5 --set 6 0.5 --set 12 -5.0 --set 39 5.0 --set 54 10.5 --set 63 -18
#New automatic pose generation based on IK Problem..
./GroundTruthDumper $FROM --repeat $FULL_RANDOM_POSES $SELECT_LHAND --randomizeBasedOnIKConstrains lhand $RANDOM_POSITION_ROTATION $OUT
checkForError "lhand full random"
#Default BVH poses with everything at zero but hand is naturally open
./GroundTruthDumper $FROM $NATURAL_LHAND --repeat $BASE_POSES $SELECT_LHAND $RANDOM_POSITION_ROTATION $OUT
checkForError "lhand naturally open"
#Default BVH poses with everything at zero but hand is not naturally open, it is has fingers touching
./GroundTruthDumper $FROM --repeat $ZERO_POSES $SELECT_LHAND $RANDOM_POSITION_ROTATION $OUT
checkForError "lhand to zero"
#Default BVH poses with hand naturally open but thumb in the middle
./GroundTruthDumper $FROM $NATURAL_LHAND --set 63 6.5 --set 64 -28.7 --set 65 8.5 --set 66 37 --set 67 -13 --set 68 7.6 --set 69 -22 --set 70 -5 --set 71 43 --set 72 0 --repeat $ZERO_POSES $SELECT_LHAND $RANDOM_POSITION_ROTATION $OUT
checkForError "lhand naturally open thumb in the middle"
#Left hand Thumb Movement on default pose
./GroundTruthDumper $FROM $NATURAL_LHAND --repeat $FINGER_POSES $SELECT_LHAND $RANDOM_POSITION_ROTATION --randomizeMID $MID_THUMBBASE_Y -56.0 48.0 $OUT
checkForError "LHand - Left hand Thumb Movement on default pose"
#All hand open naturally, only finger 5 (pinky) moving
RANDOMIZE_LEFT_HAND="--randomizeJointAngles 3 0 65 1 finger5-1.l finger5-2.l finger5-3.l"
./GroundTruthDumper $FROM $NATURAL_LHAND --repeat $FINGER_POSES $SELECT_LHAND $RANDOM_POSITION_ROTATION $RANDOMIZE_LEFT_HAND $OUT
checkForError "LHand - All hand open naturally, only finger 5 (pinky) moving"
#All hand open naturally, only finger 4 (ring) moving
RANDOMIZE_LEFT_HAND="--randomizeJointAngles 3 0 65 1 finger4-1.l finger4-2.l finger4-3.l"
./GroundTruthDumper $FROM $NATURAL_LHAND --repeat $FINGER_POSES $SELECT_LHAND $RANDOM_POSITION_ROTATION $RANDOMIZE_LEFT_HAND $OUT
checkForError "LHand - All hand open naturally, only finger 4 (ring) moving"
#All hand open naturally, only finger 3 (middle) moving
RANDOMIZE_LEFT_HAND="--randomizeJointAngles 3 0 65 1 finger3-1.l finger3-2.l finger3-3.l"
./GroundTruthDumper $FROM $NATURAL_LHAND --repeat $FINGER_POSES $SELECT_LHAND $RANDOM_POSITION_ROTATION $RANDOMIZE_LEFT_HAND $OUT
checkForError "LHand - All hand open naturally, only finger 3 (middle) moving"
#All hand open naturally, only finger 2 (pointer) moving
RANDOMIZE_LEFT_HAND="--randomizeJointAngles 3 0 65 1 finger2-1.l finger2-2.l finger2-3.l"
./GroundTruthDumper $FROM $NATURAL_LHAND --repeat $FINGER_POSES $SELECT_LHAND $RANDOM_POSITION_ROTATION $RANDOMIZE_LEFT_HAND $OUT
checkForError "LHand - All hand open naturally, only finger 2 (pointer) moving"
#All hand open naturally, only finger 1 (thumb) moving
RANDOMIZE_LEFT_HAND="--randomizeJointAngles 2 -75 75 2 lthumb finger1-2.l --randomizeJointAngles 1 0 45 3 lthumb"
./GroundTruthDumper $FROM $NATURAL_LHAND --repeat $FINGER_POSES $SELECT_LHAND $RANDOM_POSITION_ROTATION $RANDOMIZE_LEFT_HAND $OUT
checkForError "LHand - All hand open naturally, only finger 1 (thumb) moving"
#All fingers closed only thumb Open!
RANDOMIZE_LEFT_HAND="--randomizeJointAngles 15 65 65 1 finger5-1.l finger5-2.l finger5-3.l finger4-1.l finger4-2.l finger4-3.l finger3-1.l finger3-2.l finger3-3.l finger2-1.l finger2-2.l finger2-3.l lthumb finger1-2.l finger1-3.l --randomizeJointAngles 5 90 90 1 finger5-1.l finger4-1.l finger3-1.l finger2-1.l lthumb --randomizeJointAngles 2 -75 75 2 lthumb finger1-2.l --randomizeJointAngles 1 0 45 3 lthumb"
./GroundTruthDumper $FROM $NATURAL_LHAND --repeat $FINGER_POSES $SELECT_LHAND $RANDOM_POSITION_ROTATION $RANDOMIZE_LEFT_HAND $OUT
checkForError "LHand - All fingers closed only thumb Open!"
#All fingers closed except Finger 5 ( pinky )
RANDOMIZE_LEFT_HAND="--randomizeJointAngles 15 65 65 1 finger5-1.l finger5-2.l finger5-3.l finger4-1.l finger4-2.l finger4-3.l finger3-1.l finger3-2.l finger3-3.l finger2-1.l finger2-2.l finger2-3.l lthumb finger1-2.l finger1-3.l --randomizeJointAngles 5 90 90 1 finger5-1.l finger4-1.l finger3-1.l finger2-1.l lthumb --randomizeJointAngles 2 75 75 2 lthumb finger1-2.l --randomizeJointAngles 1 45 45 3 lthumb --randomizeJointAngles 3 0 65 1 finger5-1.l finger5-2.l finger5-3.l"
./GroundTruthDumper $FROM $NATURAL_LHAND --repeat $FINGER_POSES $SELECT_LHAND $RANDOM_POSITION_ROTATION $RANDOMIZE_LEFT_HAND $OUT
checkForError "LHand - All fingers closed except Finger 5 ( pinky )"
#All fingers closed except Finger 4 ( ring )
RANDOMIZE_LEFT_HAND="--randomizeJointAngles 15 65 65 1 finger5-1.l finger5-2.l finger5-3.l finger4-1.l finger4-2.l finger4-3.l finger3-1.l finger3-2.l finger3-3.l finger2-1.l finger2-2.l finger2-3.l lthumb finger1-2.l finger1-3.l --randomizeJointAngles 5 90 90 1 finger5-1.l finger4-1.l finger3-1.l finger2-1.l lthumb --randomizeJointAngles 2 75 75 2 lthumb finger1-2.l --randomizeJointAngles 1 45 45 3 lthumb --randomizeJointAngles 3 0 65 1 finger4-1.l finger4-2.l finger4-3.l"
./GroundTruthDumper $FROM $NATURAL_LHAND --repeat $FINGER_POSES $SELECT_LHAND $RANDOM_POSITION_ROTATION $RANDOMIZE_LEFT_HAND $OUT
checkForError "LHand - All fingers closed except Finger 4 ( ring )"
#All fingers closed except Finger 3 ( middle )
RANDOMIZE_LEFT_HAND="--randomizeJointAngles 15 65 65 1 finger5-1.l finger5-2.l finger5-3.l finger4-1.l finger4-2.l finger4-3.l finger3-1.l finger3-2.l finger3-3.l finger2-1.l finger2-2.l finger2-3.l lthumb finger1-2.l finger1-3.l --randomizeJointAngles 5 90 90 1 finger5-1.l finger4-1.l finger3-1.l finger2-1.l lthumb --randomizeJointAngles 2 75 75 2 lthumb finger1-2.l --randomizeJointAngles 1 45 45 3 lthumb --randomizeJointAngles 3 0 65 1 finger3-1.l finger3-2.l finger3-3.l"
./GroundTruthDumper $FROM $NATURAL_LHAND --repeat $FINGER_POSES $SELECT_LHAND $RANDOM_POSITION_ROTATION $RANDOMIZE_LEFT_HAND $OUT
checkForError "LHand - All fingers closed except Finger 3 ( middle )"
#All fingers closed except Finger 2 ( pointer )
RANDOMIZE_LEFT_HAND="--randomizeJointAngles 15 65 65 1 finger5-1.l finger5-2.l finger5-3.l finger4-1.l finger4-2.l finger4-3.l finger3-1.l finger3-2.l finger3-3.l finger2-1.l finger2-2.l finger2-3.l lthumb finger1-2.l finger1-3.l --randomizeJointAngles 5 90 90 1 finger5-1.l finger4-1.l finger3-1.l finger2-1.l lthumb --randomizeJointAngles 2 75 75 2 lthumb finger1-2.l --randomizeJointAngles 1 45 45 3 lthumb --randomizeJointAngles 3 0 65 1 finger2-1.l finger2-2.l finger2-3.l"
./GroundTruthDumper $FROM $NATURAL_LHAND --repeat $FINGER_POSES $SELECT_LHAND $RANDOM_POSITION_ROTATION $RANDOMIZE_LEFT_HAND $OUT
checkForError "LHand - All fingers closed except Finger 2 ( pointer )"
#Done
#Let's count it and store the numbers so we don't have to spam disk reads on every training..
wc -l $outputDir/2d_$1 > $outputDir/count_$1
#wc -l $outputDir/3d_$1 > $outputDir/count_$1
wc -l $outputDir/bvh_$1 > $outputDir/count_$1
}
#----------------------------------------------------------------------------------------------------------------------------------------------------
#----------------------------------------------------------------------------------------------------------------------------------------------------
#----------------------------------------------------------------------------------------------------------------------------------------------------
#----------------------------------------------------------------------------------------------------------------------------------------------------
# ./BVHGUI2 --from dataset/lhand.$BVH_TYPE --set 3 -90 --set 4 0 --set 5 -135
MIN_HAND_DEPTH="200"
MAX_HAND_DEPTH="2000" #1500
MIN_HAND_RZ="-90"
MAX_HAND_RZ="-90"
MIN_HAND_RY="-50"
MAX_HAND_RY="50"
#If we have a quaternion we can handle all orientations!
if [ "$1" == "--quaternions" ]; then
MIN_HAND_RZ="-179.9"
MAX_HAND_RZ="179.9"
MIN_HAND_RY="-179.9"
MAX_HAND_RY="179.9"
fi
MIN_HAND_RX="-179.9"
MAX_HAND_RX="179.9"
generateLeftHandDataset lhand_all.csv $MIN_HAND_DEPTH $MAX_HAND_DEPTH $MIN_HAND_RZ $MIN_HAND_RY $MIN_HAND_RX $MAX_HAND_RZ $MAX_HAND_RY $MAX_HAND_RX
#./ReshapeCSV --from dataset/bvh_lhand_all.csv --faces 20 > dataset/category_lhand_all.csv
generateRightHandDataset rhand_all.csv $MIN_HAND_DEPTH $MAX_HAND_DEPTH $MIN_HAND_RZ $MIN_HAND_RY $MIN_HAND_RX $MAX_HAND_RZ $MAX_HAND_RY $MAX_HAND_RX
#./ReshapeCSV --from dataset/bvh_rhand_all.csv --faces 20 > dataset/category_rhand_all.csv
echo "Done Generating Hands.."
exit 0
MIN_HAND_RX="-135"
MAX_HAND_RX="-45"
generateRightHandDataset rhand_front.csv $MIN_HAND_DEPTH $MAX_HAND_DEPTH $MIN_HAND_RZ $MIN_HAND_RY $MIN_HAND_RX $MAX_HAND_RZ $MAX_HAND_RY $MAX_HAND_RX
generateLeftHandDataset lhand_front.csv $MIN_HAND_DEPTH $MAX_HAND_DEPTH $MIN_HAND_RZ $MIN_HAND_RY $MIN_HAND_RX $MAX_HAND_RZ $MAX_HAND_RY $MAX_HAND_RX
MIN_HAND_RX="45"
MAX_HAND_RX="135"
generateRightHandDataset rhand_back.csv $MIN_HAND_DEPTH $MAX_HAND_DEPTH $MIN_HAND_RZ $MIN_HAND_RY $MIN_HAND_RX $MAX_HAND_RZ $MAX_HAND_RY $MAX_HAND_RX
generateLeftHandDataset lhand_back.csv $MIN_HAND_DEPTH $MAX_HAND_DEPTH $MIN_HAND_RZ $MIN_HAND_RY $MIN_HAND_RX $MAX_HAND_RZ $MAX_HAND_RY $MAX_HAND_RX
MIN_HAND_RX="-45"
MAX_HAND_RX="45"
generateRightHandDataset rhand_left.csv $MIN_HAND_DEPTH $MAX_HAND_DEPTH $MIN_HAND_RZ $MIN_HAND_RY $MIN_HAND_RX $MAX_HAND_RZ $MAX_HAND_RY $MAX_HAND_RX
generateLeftHandDataset lhand_left.csv $MIN_HAND_DEPTH $MAX_HAND_DEPTH $MIN_HAND_RZ $MIN_HAND_RY $MIN_HAND_RX $MAX_HAND_RZ $MAX_HAND_RY $MAX_HAND_RX
MIN_HAND_RX="135"
MAX_HAND_RX="225"
generateRightHandDataset rhand_right.csv $MIN_HAND_DEPTH $MAX_HAND_DEPTH $MIN_HAND_RZ $MIN_HAND_RY $MIN_HAND_RX $MAX_HAND_RZ $MAX_HAND_RY $MAX_HAND_RX
generateLeftHandDataset lhand_right.csv $MIN_HAND_DEPTH $MAX_HAND_DEPTH $MIN_HAND_RZ $MIN_HAND_RY $MIN_HAND_RX $MAX_HAND_RZ $MAX_HAND_RY $MAX_HAND_RX
#--svg tmp/ --bvh randomRHand.$BVH_TYPE
#----------------------------------------------------------------------------------------------------------------------------------------------------
#----------------------------------------------------------------------------------------------------------------------------------------------------
#----------------------------------------------------------------------------------------------------------------------------------------------------
#----------------------------------------------------------------------------------------------------------------------------------------------------
exit 0
@@ -0,0 +1,320 @@
#!/bin/bash
#Colors for easier output
red=$(printf "\033[31m")
green=$(printf "\033[32m")
yellow=$(printf "\033[33m")
blue=$(printf "\033[34m")
magenta=$(printf "\033[35m")
cyan=$(printf "\033[36m")
white=$(printf "\033[37m")
normal=$(printf "\033[m")
#We can use R to gather statistics about the generated ground truth..
if ! [ -x "$(command -v R)" ]; then
echo 'Warning: R is not installed.' >&2
sudo apt-get install r-base
fi
function getStatistics
{
#use R to generate statistics
#sudo apt-get install r-base
R -q -e "x <- read.csv('$1', header = T); summary(x); sd(x[ , 1])" > $2
cat $1 | wc -l >> $2
}
#We move to the correct directory..
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd "$DIR"
cd ..
#Where is our datasets located, compared to the current directory..
datasetDir="dataset/MotionCapture"
#MocapNET1 -> datasetSubDir="01 02 03 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19"
datasetSubDir="h36 01 02 03 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 45 46 47 49 54 55 56 60 61 62 63 64 69 70 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 93 94 102 103 104 105 106 107 108 111 113 114 115 117 118 120 121 122 123 124 125 126 127 128 131 132 133 134 135 136 137 138 139 140 141 142 143 144"
#datasetSubDir="h36"
#Where is our output located
outputDir="dataset/"
# Use --printparams in view commands to view the commands that are given to the utility at stderr
VIEW_COMMANDS=" "
RAND_UPPER_BODY="--perturbJointAngles 2 30.0 rshoulder lshoulder --perturbJointAngles 2 16.0 relbow lelbow --perturbJointAngles 2 10.0 abdomen chest"
RAND_LOWER_BODY="--perturbJointAngles 2 30.0 rhip lhip --perturbJointAngles 4 10.0 lknee rknee lfoot rfoot --perturbJointAngles 2 10.0 abdomen chest"
RANDOMIZE_LEFT_HAND="--randomizeJointAngles 15 -65 0 1 finger5-1.l finger5-2.l finger5-3.l finger4-1.l finger4-2.l finger4-3.l finger3-1.l finger3-2.l finger3-3.l finger2-1.l finger2-2.l finger2-3.l lthumb finger1-2.l finger1-3.l --randomizeJointAngles 5 -90 0 1 finger5-1.l finger4-1.l finger3-1.l finger2-1.l lthumb --randomizeJointAngles 2 -75 75 2 lthumb finger1-2.l --randomizeJointAngles 1 -45 0 3 lthumb"
RANDOMIZE_RIGHT_HAND="--randomizeJointAngles 15 0 65 1 finger5-1.r finger5-2.r finger5-3.r finger4-1.r finger4-2.r finger4-3.r finger3-1.r finger3-2.r finger3-3.r finger2-1.r finger2-2.r finger2-3.r rthumb finger1-2.r finger1-3.r --randomizeJointAngles 5 0 90 1 finger5-1.r finger4-1.r finger3-1.r finger2-1.r rthumb --randomizeJointAngles 2 -75 75 2 rthumb finger1-2.r --randomizeJointAngles 1 0 45 3 rthumb"
FILTER_OUT_POSES_WITH_HANDS_IN_SIDE="--filterout 0 0 -130.0 0 90 0 1920 1080 570.7 570.3 6 rhand lhip 0 120 rhand rhip 0 120 rhand lhand 0 150 lhand rhip 0 120 lhand lhip 0 120 lhand rhand 0 150"
#FILTER_OUT_POSES_WITH_HANDS_IN_SIDE=" "
DONT_USE_END_JOINTS="0"
USE_END_JOINTS="1"
HIDEBODY="--hide2DLocationOfJoints $DONT_USE_END_JOINTS 8 abdomen chest eye.r eye.l toe1-2.r toe5-3.r toe1-2.l toe5-3.l" #We want to contain these joints in the BVH file and solve them, but they do not correspond to the BODY25 format so we hide them as 2D points..
SELECTBODY="--selectJoints $USE_END_JOINTS 23 hip eye.r eye.l abdomen chest neck head rshoulder relbow rhand lshoulder lelbow lhand rhip rknee rfoot lhip lknee lfoot toe1-2.r toe5-3.r toe1-2.l toe5-3.l $HIDEBODY"
HIDEUPPERBODY="--hide2DLocationOfJoints $DONT_USE_END_JOINTS 4 abdomen chest eye.r eye.l" #We want to contain these joints in the BVH file and solve them, but they do not correspond to the BODY25 format so we hide them as 2D points..
SELECTUPPERBODY="--selectJoints $USE_END_JOINTS 13 hip eye.r eye.l abdomen chest neck head rshoulder relbow rhand lshoulder lelbow lhand $HIDEUPPERBODY"
HIDELOWERBODY="--hide2DLocationOfJoints $DONT_USE_END_JOINTS 6 abdomen chest toe1-2.r toe5-3.r toe1-2.l toe5-3.l"
SELECTLOWERBODY="--selectJoints $USE_END_JOINTS 14 hip abdomen chest neck rhip rknee rfoot lhip lknee lfoot toe1-2.r toe5-3.r toe1-2.l toe5-3.l $HIDELOWERBODY"
SELECT_RHAND="--selectJoints $USE_END_JOINTS 16 rhand finger5-1.r finger5-2.r finger5-3.r finger4-1.r finger4-2.r finger4-3.r finger3-1.r finger3-2.r finger3-3.r finger2-1.r finger2-2.r finger2-3.r rthumb finger1-2.r finger1-3.r"
SELECT_LHAND="--selectJoints $USE_END_JOINTS 16 lhand finger5-1.l finger5-2.l finger5-3.l finger4-1.l finger4-2.l finger4-3.l finger3-1.l finger3-2.l finger3-3.l finger2-1.l finger2-2.l finger2-3.l lthumb finger1-2.l finger1-3.l"
#FAR
MIN_DEPTH="900" #1000 original
MAX_DEPTH="4500" #3000 is too small
ITERATIONS="1" #Smallest size..
#ITERATIONS="2" #float32 targeting 16GB RAM
#ITERATIONS="8" #float16 targeting 16GB RAM
#Get number of bytes in RAM
RAM=`free | grep Mem | tr -s ' '| cut -f2 -d ' '`
if [ "$RAM" -gt "11286464" ]; then
echo "More than 12GB";
ITERATIONS="0"
fi
if [ "$RAM" -gt "15297500" ]; then
echo "More than 16GB";
ITERATIONS="1"
fi
if [ "$RAM" -gt "31861780" ]; then
echo "More than 32GB";
ITERATIONS="2"
fi
#Uncomment next line to override settings and make the
#minimum training set for development
#ITERATIONS="0"
totaldatasetsToGo=`echo "$datasetSubDir" | awk '{print NF}'`
function generateDataset
{
datasetsProcessed=0
rm $outputDir/$1
rm $outputDir/count_$1
rm $outputDir/2d_$1
#rm $outputDir/3d_$1
rm $outputDir/bvh_$1
for d in $datasetSubDir
do
if [ -d $datasetDir/$d ]
then
echo "Generating $1 - $green Found $d directory $normal"
datasetFile=`ls $datasetDir/$d | grep bvh`
((datasetsProcessed++))
#-------------------------------------------------------
for f in $datasetFile
do
echo "$green Generating $1 - $datasetsProcessed/$totaldatasetsToGo - $datasetDir/$d/$f file $normal"
#||||||||||||||||||||||||||||||||||||||||||||||||||||||||
BVHFILE="$datasetDir/$d/$f" # --svg $outputDir
./GroundTruthDumper $VIEW_COMMANDS --haltonerror --from $BVHFILE --filtergimballocks 4 $3 --repeat $ITERATIONS $2 --occlusions --csv $outputDir $1 2d+bvh # --bvh $outputDir/$f-random.bvh
#||||||||||||||||||||||||||||||||||||||||||||||||||||||||
done
#-------------------------------------------------------
else
echo "$red Could not find $d directory $normal"
fi
done
#Let's count it and store the numbers so we don't have to spam disk reads on every training..
wc -l $outputDir/2d_$1 > $outputDir/count_$1
#wc -l $outputDir/3d_$1 >> $outputDir/count_$1
wc -l $outputDir/bvh_$1 >> $outputDir/count_$1
}
#------------------------------------------------------------------------------------------------------------
# MocapNET 1
# \ /
# \ BACK /
# \ /
# BACK \ / BACK
# \/
#-----------/\-------------
# / \
# FRONT / \ FRONT
# / FRONT \
# / \
#Old way to do that ( works if you don't go very far in depth )
#------------------------------------------------------------------------------------------------------------
#MINIMUM_POSITION="-1400 -300 $MIN_DEPTH"
#MINIMUM_ROTATION="-25 -178 -35"
#MAXIMUM_POSITION="1400 300 $MAX_DEPTH"
#MAXIMUM_ROTATION="25 178 35"
#generateDataset dataBack.csv "--flipRandomizationOrientation --randomizeranges $MINIMUM_POSITION -35 -179.999999 -35 $MAXIMUM_POSITION 35 -90 35 $MINIMUM_POSITION -35 90 -35 $MAXIMUM_POSITION 35 180 35"
#generateDataset dataAll.csv "--randomize $MINIMUM_POSITION -35 -179.999999 -35 $MAXIMUM_POSITION 35 180 35"
#generateDataset dataFront.csv "--randomize $MINIMUM_POSITION -35 -90 -35 $MAXIMUM_POSITION 35 90 35"
#------------------------------------------------------------------------------------------------------------
#New extra extra fine detail rotated by 45 degrees
# \ /
# \ BACK /
# \ /
# \ /
# \/
# LEFT /\ RIGHT
# / \
# / \
# / FRONT \
# / \
#------------------------------------------------------------------------------------------------------------
MIN_LIM="-45"
MAX_LIM="45"
#I have added 20 degrees on every limit more than the default
#to have some overlap and redundancy when switching between datasets
#---------------------------
FRONT_MIN_ORIENTATION="-55" #-45 default , -55 with 10 deg safety
FRONT_MAX_ORIENTATION="55" # 45 default , 55 with 10 deg safety
#---------------------------
BACK_MIN_ORIENTATION="125" # 135 default , 125 with 10 deg safety
BACK_MAX_ORIENTATION="235" # 225 default , 235 with 10 deg safety
#---------------------------
LEFT_MIN_ORIENTATION="-145" #-135 default
LEFT_MAX_ORIENTATION="-35" #-45 default
#---------------------------
RIGHT_MIN_ORIENTATION="35" # 45 default
RIGHT_MAX_ORIENTATION="145" # 135 default
# $FILTER_OUT_POSES_WITH_HANDS_IN_SIDE
#rm $outputDir/2d_filteredPosesRHand.csv
#rm $outputDir/bvh_filteredPosesRHand.csv
#./GroundTruthDumper --haltonerror --filtergimballocks --from filteredPosesRHand.bvh $SELECTUPPERBODY $RAND_UPPER_BODY --csvOrientation front --randomize2D $MIN_DEPTH $MAX_DEPTH -10 -45 -0 10 45 10 $SELECTUPPERBODY --occlusions --csv $outputDir #filteredPosesRHand.csv 2d+bvh
#exit 0
FILTER_OUT="$FILTER_OUT_POSES_WITH_HANDS_IN_SIDE"
#UPPER BODY
generateDataset upperbody_all.csv "$FILTER_OUT --randomize2D $MIN_DEPTH $MAX_DEPTH $MIN_LIM -179.999999 $MIN_LIM $MAX_LIM 180 $MAX_LIM" "$SELECTUPPERBODY"
./ReshapeCSV dataset/bvh_upperbody_all.csv > dataset/category_upperbody_all.csv
echo "Category size = "#cat dataset/category_upperbody_all.csv | wc -c
#-----------------------------------------------
generateDataset upperbody_front.csv "$FILTER_OUT --csvOrientation front --randomize2D $MIN_DEPTH $MAX_DEPTH $MIN_LIM $FRONT_MIN_ORIENTATION $MIN_LIM $MAX_LIM $FRONT_MAX_ORIENTATION $MAX_LIM" "$SELECTUPPERBODY $RAND_UPPER_BODY"
generateDataset upperbody_back.csv "$FILTER_OUT --csvOrientation back --randomize2D $MIN_DEPTH $MAX_DEPTH $MIN_LIM $BACK_MIN_ORIENTATION $MIN_LIM $MAX_LIM $BACK_MAX_ORIENTATION $MAX_LIM" "$SELECTUPPERBODY $RAND_UPPER_BODY"
generateDataset upperbody_left.csv "$FILTER_OUT --csvOrientation left --randomize2D $MIN_DEPTH $MAX_DEPTH $MIN_LIM $LEFT_MIN_ORIENTATION $MIN_LIM $MAX_LIM $LEFT_MAX_ORIENTATION $MAX_LIM" "$SELECTUPPERBODY $RAND_UPPER_BODY"
generateDataset upperbody_right.csv "$FILTER_OUT --csvOrientation right --randomize2D $MIN_DEPTH $MAX_DEPTH $MIN_LIM $RIGHT_MIN_ORIENTATION $MIN_LIM $MAX_LIM $RIGHT_MAX_ORIENTATION $MAX_LIM" "$SELECTUPPERBODY $RAND_UPPER_BODY"
#LOWER BODY
generateDataset lowerbody_all.csv "--randomize2D $MIN_DEPTH $MAX_DEPTH $MIN_LIM -179.999999 $MIN_LIM $MAX_LIM 180 $MAX_LIM" "$SELECTLOWERBODY"
./ReshapeCSV dataset/bvh_lowerbody_all.csv > dataset/category_lowerbody_all.csv
echo "Category size = "
cat dataset/category_lowerbody_all.csv | wc -c
#-----------------------------------------------
generateDataset lowerbody_front.csv "--csvOrientation front --randomize2D $MIN_DEPTH $MAX_DEPTH $MIN_LIM $FRONT_MIN_ORIENTATION $MIN_LIM $MAX_LIM $FRONT_MAX_ORIENTATION $MAX_LIM" "$SELECTLOWERBODY $RAND_LOWER_BODY"
generateDataset lowerbody_back.csv "--csvOrientation back --randomize2D $MIN_DEPTH $MAX_DEPTH $MIN_LIM $BACK_MIN_ORIENTATION $MIN_LIM $MAX_LIM $BACK_MAX_ORIENTATION $MAX_LIM" "$SELECTLOWERBODY $RAND_LOWER_BODY"
generateDataset lowerbody_left.csv "--csvOrientation left --randomize2D $MIN_DEPTH $MAX_DEPTH $MIN_LIM $LEFT_MIN_ORIENTATION $MIN_LIM $MAX_LIM $LEFT_MAX_ORIENTATION $MAX_LIM" "$SELECTLOWERBODY $RAND_LOWER_BODY"
generateDataset lowerbody_right.csv "--csvOrientation right --randomize2D $MIN_DEPTH $MAX_DEPTH $MIN_LIM $RIGHT_MIN_ORIENTATION $MIN_LIM $MAX_LIM $RIGHT_MAX_ORIENTATION $MAX_LIM" "$SELECTLOWERBODY $RAND_LOWER_BODY"
exit 0 # <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <>
#This is a better hand dataset generator that ignores poses
./createRandomHandDataset.sh
exit 0 # <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <>
#This hand is just based on CMU poses
#LEFT HAND
generateDataset lhand_front.csv "--csvOrientation front --randomize2D $MIN_DEPTH $MAX_DEPTH $MIN_LIM $FRONT_MIN_ORIENTATION $MIN_LIM $MAX_LIM $FRONT_MAX_ORIENTATION $MAX_LIM" "$SELECT_LHAND $RANDOMIZE_LEFT_HAND"
generateDataset lhand_back.csv "--csvOrientation back --randomize2D $MIN_DEPTH $MAX_DEPTH $MIN_LIM $BACK_MIN_ORIENTATION $MIN_LIM $MAX_LIM $BACK_MAX_ORIENTATION $MAX_LIM" "$SELECT_LHAND $RANDOMIZE_LEFT_HAND"
generateDataset lhand_left.csv "--csvOrientation left --randomize2D $MIN_DEPTH $MAX_DEPTH $MIN_LIM $LEFT_MIN_ORIENTATION $MIN_LIM $MAX_LIM $LEFT_MAX_ORIENTATION $MAX_LIM" "$SELECT_LHAND $RANDOMIZE_LEFT_HAND"
generateDataset lhand_right.csv "--csvOrientation right --randomize2D $MIN_DEPTH $MAX_DEPTH $MIN_LIM $RIGHT_MIN_ORIENTATION $MIN_LIM $MAX_LIM $RIGHT_MAX_ORIENTATION $MAX_LIM" "$SELECT_LHAND $RANDOMIZE_LEFT_HAND"
#RIGHT HAND
generateDataset rhand_front.csv "--csvOrientation front --randomize2D $MIN_DEPTH $MAX_DEPTH $MIN_LIM $FRONT_MIN_ORIENTATION $MIN_LIM $MAX_LIM $FRONT_MAX_ORIENTATION $MAX_LIM" "$SELECT_RHAND $RANDOMIZE_RIGHT_HAND"
generateDataset rhand_back.csv "--csvOrientation back --randomize2D $MIN_DEPTH $MAX_DEPTH $MIN_LIM $BACK_MIN_ORIENTATION $MIN_LIM $MAX_LIM $BACK_MAX_ORIENTATION $MAX_LIM" "$SELECT_RHAND $RANDOMIZE_RIGHT_HAND"
generateDataset rhand_left.csv "--csvOrientation left --randomize2D $MIN_DEPTH $MAX_DEPTH $MIN_LIM $LEFT_MIN_ORIENTATION $MIN_LIM $MAX_LIM $LEFT_MAX_ORIENTATION $MAX_LIM" "$SELECT_RHAND $RANDOMIZE_RIGHT_HAND"
generateDataset rhand_right.csv "--csvOrientation right --randomize2D $MIN_DEPTH $MAX_DEPTH $MIN_LIM $RIGHT_MIN_ORIENTATION $MIN_LIM $MAX_LIM $RIGHT_MAX_ORIENTATION $MAX_LIM" "$SELECT_RHAND $RANDOMIZE_RIGHT_HAND"
exit 0 # <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <>
#WHOLE BODY AT ONCE
generateDataset body_all.csv "$FILTER_OUT --randomize2D $MIN_DEPTH $MAX_DEPTH $MIN_LIM -179.999999 $MIN_LIM $MAX_LIM 180 $MAX_LIM" "$SELECTBODY"
./ReshapeCSV dataset/bvh_body_all.csv > dataset/category_body_all.csv
echo "Category size = "
cat dataset/category_body_all.csv | wc -c
#-----------------------------------------------
generateDataset body_front.csv "$FILTER_OUT --csvOrientation front --randomize2D $MIN_DEPTH $MAX_DEPTH $MIN_LIM $FRONT_MIN_ORIENTATION $MIN_LIM $MAX_LIM $FRONT_MAX_ORIENTATION $MAX_LIM" "$SELECTBODY"
generateDataset body_back.csv "$FILTER_OUT --csvOrientation back --randomize2D $MIN_DEPTH $MAX_DEPTH $MIN_LIM $BACK_MIN_ORIENTATION $MIN_LIM $MAX_LIM $BACK_MAX_ORIENTATION $MAX_LIM" "$SELECTBODY"
generateDataset body_left.csv "$FILTER_OUT --csvOrientation left --randomize2D $MIN_DEPTH $MAX_DEPTH $MIN_LIM $LEFT_MIN_ORIENTATION $MIN_LIM $MAX_LIM $LEFT_MAX_ORIENTATION $MAX_LIM" "$SELECTBODY"
generateDataset body_right.csv "$FILTER_OUT --csvOrientation right --randomize2D $MIN_DEPTH $MAX_DEPTH $MIN_LIM $RIGHT_MIN_ORIENTATION $MIN_LIM $MAX_LIM $RIGHT_MAX_ORIENTATION $MAX_LIM" "$SELECTBODY"
exit 0 # <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <>
echo "Getting statistics for front view.."
cat dataset/bvh_body_front.csv | cut -d',' -f 5 > frontOrientations
getStatistics frontOrientations dataset/bvh_body_front_statistics.txt
cat dataset/bvh_body_front_statistics.txt
rm frontOrientations
echo "Getting statistics for back view.."
cat dataset/bvh_body_back.csv | cut -d',' -f 5 > backOrientations
getStatistics backOrientations dataset/bvh_body_back_statistics.txt
cat dataset/bvh_body_back_statistics.txt
rm backOrientations
echo "Getting statistics for left view.."
cat dataset/bvh_body_left.csv | cut -d',' -f 5 > leftOrientations
getStatistics leftOrientations dataset/bvh_body_left_statistics.txt
cat dataset/bvh_body_left_statistics.txt
rm leftOrientations
echo "Getting statistics for right view.."
cat dataset/bvh_body_right.csv | cut -d',' -f 5 > rightOrientations
getStatistics rightOrientations dataset/bvh_body_right_statistics.txt
cat dataset/bvh_body_right_statistics.txt
rm rightOrientations
echo "Getting statistics for all view.."
cat dataset/bvh_body_all.csv | cut -d',' -f 5 > allOrientations
getStatistics allOrientations dataset/bvh_body_all_statistics.txt
cat dataset/bvh_body_all_statistics.txt
rm allOrientations
echo "Done.."
exit 0
+67
View File
@@ -0,0 +1,67 @@
#!/bin/bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd "$DIR"
cd ..
red=$(printf "\033[31m")
green=$(printf "\033[32m")
yellow=$(printf "\033[33m")
blue=$(printf "\033[34m")
magenta=$(printf "\033[35m")
cyan=$(printf "\033[36m")
white=$(printf "\033[37m")
normal=$(printf "\033[m")
SELECTBODY="--selectJoints 21 hip abdomen chest neck head rcollar rshoulder relbow rhand lcollar lshoulder lelbow lhand rhip rknee rfoot lhip lknee lfoot toe3-2.r toe3-2.l"
SELECTRHAND="--selectJoints 11 rhand rthumb1 rthumb2 rindex1 rindex2 rmid1 rmid2 rring1 rring2 rpinky1 rpinky2"
SELECTLHAND="--selectJoints 11 lhand lthumb1 lthumb2 lindex1 lindex2 lmid1 lmid2 lring1 lring2 lpinky1 lpinky2"
datasetDir="dataset/MotionCapture"
datasetSubDir="01 02 03 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19"
outputDir="dataset/"
rm $outputDir/2d_body_test.csv
rm $outputDir/3d_body_test.csv
rm $outputDir/bvh_body_test.csv
#create a small test file with one example
#rm $outputDir/testSMALL.csv
# ./GroundTruthDumper --from MotionCapture/01/01_01.bvh --offsetPositionRotation 0 750 2500 0 0 0 --maxFrames 1 --csv $outputDir testSMALL.csv
#PRODUCESVG="--svg $outputDir/svg"
PRODUCESVG=" "
datasetsProcessed=0
totaldatasetsToGo=`echo "$datasetSubDir" | awk '{print NF}'`
rm $outputDir/test.csv
for d in $datasetSubDir
do
if [ -d $datasetDir/$d ]
then
echo "$green Found $d directory $normal"
datasetFile=`ls $datasetDir/$d | grep bvh`
((datasetsProcessed++))
#-------------------------------------------------------
for f in $datasetFile
do
echo "$green Generating Test - $datasetsProcessed/$totaldatasetsToGo - $datasetDir/$d/$f file $normal"
#||||||||||||||||||||||||||||||||||||||||||||||||||||||||
BVHFILE="$datasetDir/$d/$f" # --svg $outputDir
#./GroundTruthDumper --from $BVHFILE --csv $outputDir test.csv# --bvh $outputDir/$f-random.bvh
./GroundTruthDumper --from $BVHFILE $SELECTBODY --offsetPositionRotation 0 750 2000 0 0 0 --occlusions --csv $outputDir body_test.csv 2d+bvh $PRODUCESVG #--to ~/Documents/Programming/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/Scenes/testBVH.conf --bvh $outputDir/$f-random.bvh --svg $outputDir/svg
#exit 0
#./GroundTruthDumper --from $BVHFILE --setPositionRotation 0 400 0 0 0 0 --csv $outputDir test.csv# --bvh $outputDir/$f-random.bvh
#||||||||||||||||||||||||||||||||||||||||||||||||||||||||
done
#-------------------------------------------------------
else
echo "$red Could not find $d directory $normal"
fi
done
exit 0
+37
View File
@@ -0,0 +1,37 @@
#!/bin/bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd "$DIR"
cd ..
#Valgrind can also be downloaded..
#https://www.valgrind.org/downloads/current.html
#Simple dependency checker that will apt-get stuff if something is missing
SYSTEM_DEPENDENCIES="valgrind"
for REQUIRED_PKG in $SYSTEM_DEPENDENCIES
do
PKG_OK=$(dpkg-query -W --showformat='${Status}\n' $REQUIRED_PKG|grep "install ok installed")
echo "Checking for $REQUIRED_PKG: $PKG_OK"
if [ "" = "$PKG_OK" ]; then
echo "No $REQUIRED_PKG. Setting up $REQUIRED_PKG."
#If this is uncommented then only packages that are missing will get prompted..
#sudo apt-get --yes install $REQUIRED_PKG
#if this is uncommented then if one package is missing then all missing packages are immediately installed..
sudo apt-get install $SYSTEM_DEPENDENCIES
break
fi
done
#------------------------------------------------------------------------------
valgrind --tool=memcheck --leak-check=yes --show-reachable=yes --track-origins=yes --num-callers=20 --track-fds=yes ./MocapNETLiveWebcamDemo --from shuffle $@ 2>error.txt
exit 0
@@ -0,0 +1,93 @@
#!/bin/bash
DATASET=""
if (( $#<1 ))
then
echo "Please provide arguments first argument is dataset "
exit 1
else
DATASET=$1-data
fi
# $1 holds the video file we want to process ( it should be something like path/to/videofile.mp4 )
#DATASET now holds the output directory we will create ( it should be something like path/to/videofile.mp4-data/ )
#Remember the directory where user started
STARTDIR=`pwd`
#Remember the directory where the script is ( and where MocapNET is :) )
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
#Please give the path to openpose here..
OPENPOSE_DIR="/home/ammar/Documents/3dParty/openpose/"
OPENPOSE_BINARY_DIR="/home/ammar/Documents/3dParty/openpose/build/examples/openpose/"
#Dataset dumping using ffmpeg
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
#Create the new dataset directory
mkdir $DATASET
#Dump the video files using our naming scheme
ffmpeg -i $1 -r 30 -q:v 1 $DATASET/colorFrame_0_%05d.jpg
#Make sure we start at frame 0
cp $DATASET/colorFrame_0_00001.jpg $DATASET/colorFrame_0_00000.jpg
#We now want to grab an absolute path to our dataset
cd $DATASET
FULL_PATH_TO_DATASET=`pwd`
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
#2D pose estimation using OpenPose
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
cd $OPENPOSE_DIR
LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64 $OPENPOSE_BINARY_DIR/openpose.bin -number_people_max 1 --hand --face --write_json $FULL_PATH_TO_DATASET -image_dir $FULL_PATH_TO_DATASET $@
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
#2D pose conversion to CSV using our tool
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
cd "$DIR"
cd ..
./convertOpenPoseJSONToCSV --from $DATASET
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
#3D pose estimation using MocapNET2
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
cd "$DIR"
cd ..
./MocapNET2CSV --from $FULL_PATH_TO_DATASET/2dJoints_v1.4.csv --mt --show 3 --save
cp out.bvh $FULL_PATH_TO_DATASET/predicted.bvh
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
cd $STARTDIR
exit 0
+37
View File
@@ -0,0 +1,37 @@
#!/bin/bash
#This is a script to dump a video file to JPG files
#it uses ffmpeg so make sure you have sudo apt-get install ffmpeg
#If you do ./dump_video.sh yourvideo.mp4
#There should be an output folder yourvideo.mp4-data that has all the frames of the video
#you can then point OpenPose to this directory to convert them to JSON 2D detections
STARTDIR=`pwd`
#Switch to this directory
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd "$DIR"
DATASET=""
if (( $#<1 ))
then
echo "Please provide arguments first argument is dataset "
exit 1
else
DATASET=$1-data
fi
THEDATETAG=`date +"%y-%m-%d_%H-%M-%S"`
mkdir $DATASET
ffmpeg -i $1 -r 30 -q:v 1 $DATASET/colorFrame_0_%05d.jpg
cp $DATASET/colorFrame_0_00001.jpg $DATASET/colorFrame_0_00000.jpg
cd $DATASET
cd ..
cd $STARTDIR
exit 0
@@ -0,0 +1,48 @@
#!/bin/bash
#Simple dependency checker that will apt-get stuff if something is missing
# sudo apt-get install gnuplot
SYSTEM_DEPENDENCIES="gnuplot"
for REQUIRED_PKG in $SYSTEM_DEPENDENCIES
do
PKG_OK=$(dpkg-query -W --showformat='${Status}\n' $REQUIRED_PKG|grep "install ok installed")
echo "Checking for $REQUIRED_PKG: $PKG_OK"
if [ "" = "$PKG_OK" ]; then
echo "No $REQUIRED_PKG. Setting up $REQUIRED_PKG."
#If this is uncommented then only packages that are missing will get prompted..
#sudo apt-get --yes install $REQUIRED_PKG
#if this is uncommented then if one package is missing then all missing packages are immediately installed..
sudo apt-get install $SYSTEM_DEPENDENCIES
break
fi
done
#------------------------------------------------------------------------------
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd "$DIR"
cd ..
./GroundTruthDumper --from dataset/CMU_Sample_05_01.bvh --selectJoints 0 23 hip eye.r eye.l abdomen chest neck head rshoulder relbow rhand lshoulder lelbow lhand rhip rknee rfoot lhip lknee lfoot toe1-2.r toe5-3.r toe1-2.l toe5-3.l --tuneIterations 130 100 130 0.01 5 30 20 > tuneIterations.dat
#set view 45,45; set view map; set yrange [9:90]; set zrange [30:90];
# set dgrid3d 25,25 qnorm 4;
#splot \"tuneIterations.dat\" using 1:3:2 with points pointsize 3 pointtype 7;
#HCD tuning iteration hyperparameter
GNUPLOT_CMD="set terminal png size 1000,800 font \"Helvetica,34\"; set output \"tuneIterations.png\"; set isosample 160; set pm3d at b; set palette defined (65 \"black\", 70 \"red\", 80 \"yellow\", 90 \"yellow\", 100 \"white\"); set view 30,45; set hidden3d; set xrange [1:25]; set yrange [9:90]; set zrange [30:90]; set style fill solid; set xlabel \"HCD Iterations\" rotate parallel; set ylabel \"Frames per second\" rotate parallel; set zlabel \"Mean average error in mm\" rotate parallel; set ztics 30; set title \"Mean average error in mm\"; set ytics 30; set multiplot; splot \"tuneIterations.dat\" using 1:3:2 with lines palette lw 2 title \" \"; splot \"tuneIterations.dat\" using 1:3:2 with points palette pointsize 1 pointtype 7 title \" \"; "
gnuplot -e "$GNUPLOT_CMD"
echo "Result of experiment is now ready @ tuneIterations.png"
timeout 10 gpicview tuneIterations.png
exit 0
+54
View File
@@ -0,0 +1,54 @@
#/bin/bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd "$DIR/../dependencies"
DEPENDENCIES_PATH=`pwd`
sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config ffmpeg libavcodec-dev libavformat-dev libavcodec-dev libavformat-dev libswscale-dev libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff5-dev libdc1394-22-dev libeigen3-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev sphinx-common libtbb-dev yasm libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libopenexr-dev libgstreamer-plugins-base1.0-dev libavutil-dev libavfilter-dev libavresample-dev libpython3-all-dev python3-numpy python3-dev
#cd "$1"
echo "Will Install @ `pwd`"
#Want a different version?
#Check https://opencv.org/releases/ for versions and
#change the OPENCV_VERSION in the next line..
OPENCV_VERSION="3.2.0"
echo "Downloading"
wget http://ammar.gr/programs/opencv-$OPENCV_VERSION.zip
wget http://ammar.gr/programs/opencv_contrib-$OPENCV_VERSION.tar.gz
#wget https://codeload.github.com/opencv/opencv/zip/$OPENCV_VERSION -O opencv-$OPENCV_VERSION.zip
#wget https://codeload.github.com/opencv/opencv_contrib/zip/$OPENCV_VERSION -O opencv_contrib-$OPENCV_VERSION.tar.gz
echo "Extracting"
#tar xvzf opencv_contrib-$OPENCV_VERSION.tar.gz
unzip opencv_contrib-$OPENCV_VERSION.zip
unzip opencv-$OPENCV_VERSION.zip
echo "Building"
cd opencv-$OPENCV_VERSION
mkdir build
cd build
cmake -DOPENCV_ENABLE_NONFREE=ON -DOPENCV_EXTRA_MODULES_PATH=$DEPENDENCIES_PATH/opencv_contrib-$OPENCV_VERSION/modules ..
make -j5
echo "Do you want to install OpenCV to your system ? "
echo
echo -n " (Y/N)?"
read answer
if test "$answer" != "N" -a "$answer" != "n";
then
sudo make install
fi
cd "$DIR"
echo "Done"
exit 0
@@ -0,0 +1,32 @@
#!/bin/bash
#This script should be run after you have dumped a video to a directory using the dump_video.sh utility
#You should give a full path to this utility i.e. ./processDatasetWithOpenpose.sh "~/myDatasets/yourvideo.mp4-data/"
#and also dont forget to change the PATH_TO_OPENPOSE to the directory that has your openpose.bin!
PATH_TO_OPENPOSE="PLEASE/CHANGE/THIS/"
STARTDIR=`pwd`
#Switch to this directory
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
DATASET=""
if (( $#<1 ))
then
echo "Please provide arguments first argument is dataset "
exit 1
else
DATASET=$1
$PATH_TO_OPENPOSE/openpose.bin -number_people_max 1 --hand --face --write_json $DATASET -image_dir $DATASET $@
cd "$DIR"
echo "Went back to $DIR"
echo "Hopefully the path you have given is an absolute path.."
./convertBody25JSONToCSV -i $DATASET
exit 0
+47
View File
@@ -0,0 +1,47 @@
#!/bin/bash
FROMDATASET="$1"
X=0
# sudo apt-get install imagemagick
if (( $# != 1 )); then
echo "Please run giving the path to download and build"
echo "$0 \"DatasetNameSource\" "
exit 0
fi
TOTAL_FRAMES=100000
cd $FROMDATASET
echo "Spliting Dataset $FROMDATASET "
echo "Please wait .. "
for (( i=$X; i<=$TOTAL_FRAMES; i++ ))
do
XNUM=`printf %05u $i`
if [ -f "colorFrame_0_$XNUM.jpg" ]
then
width=$(identify -format "%w" "colorFrame_0_$XNUM.jpg")> /dev/null
height=$(identify -format "%h" "colorFrame_0_$XNUM.jpg")> /dev/null
halfWidth=$((width / 2))
echo "$width x $height -> 2x $halfWidth x $height"
#First crop second half ( before source file gets rewritten )
convert colorFrame_0_$XNUM.jpg -crop "$halfWidth"x$height+$halfWidth+0 colorFrame_1_$XNUM.jpg
convert colorFrame_0_$XNUM.jpg -crop "$halfWidth"x$height+0+0 colorFrame_0_$XNUM.jpg
else
break
fi
echo -n "."
done
echo "Passed TOTAL_FRAMES (!) this is a bug! :S"
cd ..
exit 0
+135
View File
@@ -0,0 +1,135 @@
#!/bin/bash
#Script last updated 25-03-2022
#Script that seems to be able to build bazel/tf2 on Ubuntu 20.04
#I really deeply dislike the bazel build system which is bloated and obfuscated for no reason, just Google "NIH syndrome"
#However Tensorflow2 is a great NN framework
# See this video "How To Make Package Managers Cry" -> https://www.youtube.com/watch?v=NSemlYagjIU#t=19m0s
echo "Check CUDA"
ls /usr/local/cuda/extras/CUPTI/lib64
ls /usr/local/cuda
ls /usr/local/cuda/lib64/ | grep libcudnn.so
nvcc -V
VERSION="2.8"
#Get number of bytes in RAM
RAM=`free | grep Mem | tr -s ' '| cut -f2 -d ' '`
BazelPleaseSlowDown="--local_resources 2048,.5,1.0"
if [ "$RAM" -gt "11286464" ]; then
echo "More than 12GB";
BazelPleaseSlowDown=" "
fi
if [ "$RAM" -gt "15297500" ]; then
echo "More than 16GB";
BazelPleaseSlowDown=" "
fi
if [ "$RAM" -gt "31861780" ]; then
echo "More than 32GB";
BazelPleaseSlowDown=" "
fi
#Tensorflow is a great Neural network library that unfortunately is coupled to the terrible Bazel build system
#This is a download and build script for Ubuntu 20.04, that should work building release 2.8
sudo apt-get install python3-dev python3-pip python3-venv python3-tk
pip3 install -U --user pip numpy wheel packaging
pip3 install -U --user keras_preprocessing --no-deps
cd ~/Documents
mkdir 3dParty
cd 3dParty
#wget https://github.com/bazelbuild/bazel/releases/download/4.2.1/bazel-4.2.1-installer-linux-x86_64.sh
#chmod +x bazel-4.2.1-installer-linux-x86_64.sh
#./bazel-4.2.1-installer-linux-x86_64.sh --user
#r2.8
mkdir -p "$HOME/.bazel/bin" && cd "$HOME/.bazel/bin" && curl -fLO https://releases.bazel.build/4.2.1/release/bazel-4.2.1-linux-x86_64 && chmod +x bazel-4.2.1-linux-x86_64
#Create shared directory
if [ -f ~/.bashrc ]
then
if cat ~/.bashrc | grep -q "BAZEL_CANCER"
then
echo "Bazel includes seem to be set-up.."
else
USER=`whoami`
echo "#BAZEL_CANCER" >> ~/.bashrc
echo "source $HOME/.bazel/bin/bazel-complete.bash" >> ~/.bashrc
echo "export PATH=\"\$PATH:\$HOME/bin\"" >> ~/.bashrc
source ~/.bashrc
fi
fi
if [ ! -d tensorflow ]
then
git clone https://github.com/tensorflow/tensorflow.git
fi
cd tensorflow
git pull
git checkout r$VERSION
#Make sure to check your target CPU and when asked used the correct -march= / -mtune=
# for example for an old intel i7 -march=nehalem is used..
#https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html
echo "Answers to configure questions :"
echo "/usr/bin/python3"
echo "/usr/lib/python3/dist-packages"
echo "cuda Y"
echo "tensorrt Y"
echo "CUDA 11.2"
echo "CuDNN 8"
echo "TensorRT 8"
echo "/usr/local/cuda/,/usr/local/cuda/include/,/usr/local/cuda/bin/,/usr/local/cuda/lib64/,/usr/local/cuda/lib64/,/usr/local/tensorrt-8.2.3/,/usr/local/tensorrt-8.2.3/include/,/usr/local/tensorrt-8.2.3/lib/,"
echo "Compute capability 6.1 ( for GTX 1050 + cards )"
#Attempt to inform the configure script on how to find the CUDA stuff..
export CUDNN_INSTALL_PATH=/usr/local/cuda/,/usr/local/cuda/include/,/usr/local/cuda/bin/,/usr/local/cuda/lib64/,/usr/local/cuda/lib64/,/usr/local/tensorrt-8.2.3/,/usr/local/tensorrt-8.2.3/include/,/usr/local/tensorrt-8.2.3/lib/
./configure
bazel clean --expunge
#You should use CUDA 11.2 and cudnn-11.2-linux-x64-v8.1.1.33 and TensorRT 8.2.3
bazel build --config=opt --config=cuda --config=mkl --config=monolithic $BazelPleaseSlowDown //tensorflow/tools/pip_package:build_pip_package
./bazel-bin/tensorflow/tools/pip_package/build_pip_package ~/Documents/3dParty/
#To install
#pip3 --user install ~/Documents/3dParty/tensorflow-2.4.0-cp36-cp36m-linux_x86_64.whl
bazel build --config opt --config=cuda --config=monolithic //tensorflow/tools/lib_package:libtensorflow
cp bazel-bin/tensorflow/tools/lib_package/libtensorflow.tar.gz ~/Documents/3dParty/libtensorflow-r$VERSION.tar.gz
#Build tensorflow lite
#https://www.tensorflow.org/lite/guide/build_cmake
mkdir tflite_buld
cd tflite_buld/
cmake ../tensorflow/lite
cmake --build . -j
echo "Please visit ~/Documents/3dParty/ to collect your tensorflow python3 wheel, and C Library.."
echo "Will now use : python -c 'import tensorflow as tf;' to test your tensorflow"
python -c 'import tensorflow as tf;'
exit 0
+93
View File
@@ -0,0 +1,93 @@
#!/bin/bash
#Script source repository https://github.com/AmmarkoV/MyScripts/blob/master/Tensorflow/tensorflowBuild.sh
#Script last updated 23-06-2020
#Script that seems to be able to build bazel/tf2 on Ubuntu 20.04
#I really deeply dislike the bazel build system which is bloated and obfuscated for no reason, just Google "NIH syndrome"
#However Tensorflow2 is a great NN framework
# See this video "How To Make Package Managers Cry" -> https://www.youtube.com/watch?v=NSemlYagjIU#t=19m0s
#Get number of bytes in RAM
RAM=`free | grep Mem | tr -s ' '| cut -f2 -d ' '`
BazelPleaseSlowDown="--local_resources 2048,.5,1.0"
if [ "$RAM" -gt "11286464" ]; then
echo "More than 12GB";
BazelPleaseSlowDown=" "
fi
if [ "$RAM" -gt "15297500" ]; then
echo "More than 16GB";
BazelPleaseSlowDown=" "
fi
if [ "$RAM" -gt "31861780" ]; then
echo "More than 32GB";
BazelPleaseSlowDown=" "
fi
#Tensorflow is a great Neural network library that unfortunately is coupled to the terrible Bazel build system
#This is a download and build script for Ubuntu 18.04, that should work building release 1.15
sudo apt-get install python3-dev python3-pip python3-venv python3-tk
pip install -U --user pip six numpy wheel setuptools mock 'future>=0.17.1'
pip install -U --user keras_applications --no-deps
pip install -U --user keras_preprocessing --no-deps
cd ~/Documents
mkdir 3dParty
cd 3dParty
wget http://ammar.gr/mocapnet/bazel-0.24.1-installer-linux-x86_64-for-tensorflow-r1.15.sh
chmod +x bazel-0.24.1-installer-linux-x86_64-for-tensorflow-r1.15.sh
./bazel-0.24.1-installer-linux-x86_64-for-tensorflow-r1.15.sh --user
#Create shared directory
if [ -f ~/.bashrc ]
then
if cat ~/.bashrc | grep -q "BAZEL_CANCER"
then
echo "Bazel includes seem to be set-up.."
else
USER=`whoami`
echo "#BAZEL_CANCER" >> ~/.bashrc
echo "source ~/.bazel/bin/bazel-complete.bash" >> ~/.bashrc
echo "export PATH=\"\$PATH:\$HOME/bin\"" >> ~/.bashrc
source ~/.bashrc
fi
fi
if [ ! -d tensorflow ]
then
git clone https://github.com/tensorflow/tensorflow.git
fi
cd tensorflow
git pull
git checkout r1.15
./configure
bazel clean --expunge
#Flags for bazel if you have gcc<5.0
#--cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0"
#--noincompatible_do_not_split_linking_cmdline
bazel build --config=opt --config=cuda --config=mkl --config=monolithic $BazelPleaseSlowDown //tensorflow/tools/pip_package:build_pip_package
./bazel-bin/tensorflow/tools/pip_package/build_pip_package ~/Documents/3dParty/
bazel build --config opt --config=cuda --config=monolithic //tensorflow/tools/lib_package:libtensorflow
cp bazel-bin/tensorflow/tools/lib_package/libtensorflow.tar.gz ~/Documents/3dParty/libtensorflow-r1.15.tar.gz
echo "Please visit ~/Documents/3dParty/ to collect your tensorflow python3 wheel, and C Library.."
exit 0
@@ -0,0 +1,21 @@
project( GroundTruthDumper )
cmake_minimum_required( VERSION 2.8.13 )
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/modules ${CMAKE_MODULE_PATH})
add_executable(
GroundTruthDumper
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Applications/BVHTester/main.c
${CMAKE_SOURCE_DIR}/dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/TrajectoryParser/InputParser_C.c
${BVH_SOURCE}
)
target_link_libraries(GroundTruthDumper rt m pthread )
#add_dependencies(GroundTruthDumper OGLRendererSandbox)
set_target_properties(GroundTruthDumper PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
)
@@ -0,0 +1,6 @@
To simplify package maintenance the GroundTruthGenerator uses the code from the BVHTester of RGBDAcquisition
If you want to browse the code, i.e. to find about different command line options this is the [main.c](https://github.com/AmmarkoV/RGBDAcquisition/blob/master/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Applications/BVHTester/main.c)
All the implementation files to parse BVH files are part of the MotionCaptureLoader module of the RGDAcquisition OGL Renderer Sandbox. You can [find the bvh code here](https://github.com/AmmarkoV/RGBDAcquisition/tree/master/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader)
Sorry for having different stuff in different places but it really minimizes the effort needed to relase the code and it also reduces the number of possible bugs from keeping the same code in sync in different machines etc.
@@ -0,0 +1,19 @@
project( helloWorld )
cmake_minimum_required(VERSION 3.5)
#-----------------------------------------------
# This is the converter utilities..
#-----------------------------------------------
project( helloWorld )
add_executable(helloWorld main.cpp)
target_link_libraries(helloWorld rt dl m )
set_target_properties(helloWorld PROPERTIES DEBUG_POSTFIX "D")
set_target_properties(helloWorld PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
)
@@ -0,0 +1,8 @@
#include <iostream>
int main() {
std::cout << "\n\n\n\n\n\nHello World!\n";
std::cout << "Congrats, If you can read this you can compile C++ code using CMake..!\n\n\n\n\n";
return 0;
}
+14
View File
@@ -0,0 +1,14 @@
#!/bin/bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd "$DIR"
mkdir build
cd build
cmake ..
make
cd "$DIR"
./helloWorld
exit 0
@@ -0,0 +1,45 @@
project( JointEstimator2D )
cmake_minimum_required(VERSION 3.5)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
#set(CMAKE_CXX_STANDARD 11)
include_directories(${TENSORFLOW_INCLUDE_ROOT})
add_library(
JointEstimator2D SHARED
jointEstimator2D.cpp
cameraControl.cpp
visualization.cpp
${CMAKE_SOURCE_DIR}/src/Tensorflow/tensorflow.cpp
${CMAKE_SOURCE_DIR}/src/Tensorflow/tf_utils.cpp
)
target_link_libraries(JointEstimator2D rt dl m Tensorflow TensorflowFramework )
set_target_properties(JointEstimator2D PROPERTIES DEBUG_POSTFIX "D")
set_target_properties(JointEstimator2D PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
)
find_package(OpenCV REQUIRED)
INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS})
add_executable(WebcamAnd2DJoints webcamAnd2DJoints.cpp)
target_link_libraries(WebcamAnd2DJoints rt dl m ${OpenCV_LIBRARIES} JointEstimator2D Tensorflow TensorflowFramework)
set_target_properties(WebcamAnd2DJoints PROPERTIES DEBUG_POSTFIX "D")
set_target_properties(WebcamAnd2DJoints PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
)
@@ -0,0 +1,433 @@
#include "cameraControl.hpp"
#include "../MocapNET2/MocapNETLib2/IO/commonSkeleton.hpp"
#include <cstdlib>
const unsigned int noiseThreshold = 30; //pixels
/**
* @brief In order to have the best possible quality we can crop the input frame to only perform detection around the area of the previous skeleton
* This code performs this crop and tries to get the best detection window
* @ingroup demo
* @bug This code is oriented to a single 2D skeleton detected, Multiple skeletons will confuse it and there is no logic to handle them
* @retval 1=Success/0=Failure
*/
int getMaximumCropWindow(
unsigned int * x,
unsigned int * y,
unsigned int * width,
unsigned int * height,
struct boundingBox * bboxExternal,
unsigned int inputWidth2DJointDetector,
unsigned int inputHeight2DJointDetector,
unsigned int fullFrameWidth,
unsigned int fullFrameHeight
)
{
//Make a local copy in case of failure
struct boundingBox bboxLocal = *bboxExternal;
struct boundingBox * bbox = &bboxLocal;
float paddingPercent=0.2; // 0.1 = 10% etc
if ( (bbox!=0) && (bbox->populated) )
{
unsigned int previousX = *x;
unsigned int previousY = *y;
unsigned int previousWidth = *width;
unsigned int previousHeight = *height;
//std::cerr<<"Previous Bounding Box was "<<*x<<","<<*y<<" to "<<*x+*width<<","<<*y+*height<<" \n";
// Bring bounding box to normal coordinates
//------------------------------------------------
bbox->minimumX+= (float) *x;
bbox->maximumX+= (float) *x;
bbox->minimumY+= (float) *y;
bbox->maximumY+= (float) *y;
//Calculate the dimensions of the bounding box body and its center
//----------------------------------------------------------------------------------------------------------
float bodyWidth = bbox->maximumX - bbox->minimumX;
float bodyHeight = bbox->maximumY - bbox->minimumY;
float bodyCenterX = bbox->minimumX + (float) bodyWidth/2;
float bodyCenterY = bbox->minimumY + (float) bodyHeight/2;
//If the body is smaller than our input size lets get some more detail in so we avoid scaling up
//----------------------------------------------------------------------------------------------------------------------------------------------------
if (inputWidth2DJointDetector >bodyWidth )
{
bodyWidth = inputWidth2DJointDetector;
}
if (inputHeight2DJointDetector> bodyHeight )
{
bodyHeight = inputHeight2DJointDetector;
}
//Given that we have our new size and center we can now calculate the new offset from center
//--------------------------------------------------------------------------------------------------------------------------------------------------------
float bodyOffsetX = (float) bodyWidth/2;
float bodyOffsetY = (float) bodyHeight/2;
//And using the new offset derive the new bounding box
//--------------------------------------------------------------------------------------------------------------------------------------------------------
float pixelsPaddedX = paddingPercent * bodyWidth;
float pixelsPaddedY = paddingPercent * bodyHeight;
//We now have a preliminary bounding box BUT the final bounding box we want is a rectangle so we need to keep the biggest dimension
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
if ( bodyOffsetX+pixelsPaddedX> bodyOffsetY+pixelsPaddedY)
{
bodyOffsetX = bodyOffsetX + pixelsPaddedX;
bodyOffsetY = bodyOffsetX + pixelsPaddedX;
}
else
{
bodyOffsetX = bodyOffsetY + pixelsPaddedY;
bodyOffsetY = bodyOffsetY + pixelsPaddedY;
}
//We now have a rectangle bounding box
//----------------------------------------------------------------
bbox->minimumX = bodyCenterX - bodyOffsetX;
bbox->maximumX = bodyCenterX + bodyOffsetX;
bbox->minimumY = bodyCenterY - bodyOffsetY;
bbox->maximumY = bodyCenterY + bodyOffsetY;
//We do a last bounds check
//--------------------------------------------------------------------------------------------------------------------------------------------------------
signed int limitLX=0,limitLY=0,limitRX=0,limitRY=0;
if (bbox->minimumX < 0 )
{
limitLX=-1*bbox->minimumX;
bbox->minimumX = 0;
}
if (bbox->minimumY < 0 )
{
limitLY=-1*bbox->minimumY;
bbox->minimumY = 0;
}
if (bbox->maximumX > fullFrameWidth )
{
limitRX=bbox->maximumX-fullFrameWidth;
bbox->maximumX = fullFrameWidth;
}
if (bbox->maximumY > fullFrameHeight )
{
limitRY=bbox->maximumY-fullFrameHeight;
bbox->maximumY = fullFrameHeight;
}
//We now have a preliminary bounding box the rectangle might be in a corner and fall out of bounds
//--------------------------------------------------------------------------------------------------------------------------------------------------------
//We are maybe constrained left/up add what we lost right/down..!
if (limitLX>0)
{
bbox->maximumX += limitLX;
}
if (limitLY>0)
{
bbox->maximumY += limitLY;
}
//We are maybe constrained right/down we subtract what we lost left/up ..!
if (limitRX>0)
{
bbox->minimumX -= limitRX;
}
if (limitRY>0)
{
bbox->minimumY -= limitRY;
}
if ( (limitLX!=0) || (limitLY!=0) || (limitRX!=0) || (limitRY!=0) )
{
//We have failed to initially resolve the bounding box..!
//std::cerr<<"Initial resolve the bounding box X1:"<<limitLX<<",Y1:"<<limitLY<<",X2:"<<limitRX<<",Y2:"<<limitRY<<"..\n";
//return 0;
}
//We one last time check for bound limits
limitLX=0,limitLY=0,limitRX=0,limitRY=0;
if (bbox->minimumX < 0 )
{
limitLX=1;
bbox->minimumX = 0;
}
if (bbox->minimumY < 0 )
{
limitLY=1;
bbox->minimumY = 0;
}
if (bbox->maximumX > fullFrameWidth )
{
limitRX=1;
bbox->maximumX = fullFrameWidth;
}
if (bbox->maximumY > fullFrameHeight )
{
limitRY=1;
bbox->maximumY = fullFrameHeight;
}
if ( (limitLX!=0) || (limitLY!=0) || (limitRX!=0) || (limitRY!=0) )
{
//We have failed to resolve the bounding box..!
//std::cerr<<"We have failed to resolve the bounding box X1:"<<limitLX<<",Y1:"<<limitLY<<",X2:"<<limitRX<<",Y2:"<<limitRY<<"..\n";
//std::cerr<<"bounding box was X1:"<<bbox->minimumX<<",Y1:"<<bbox->minimumY<<",X2:"<<bbox->maximumX<<",Y2:"<<bbox->maximumY<<"..\n";
return 0;
}
//And our output is ready for use..!
//--------------------------------------------------------------------------------------------------------------------------------------------------------
if (
( abs(previousX - (unsigned int) bbox->minimumX ) > noiseThreshold ) ||
( abs(previousY - (unsigned int) bbox->minimumY ) > noiseThreshold ) ||
( abs(previousWidth - (unsigned int) ( bbox->maximumX - bbox->minimumX ) ) > 2*noiseThreshold ) ||
( abs(previousHeight - (unsigned int) ( bbox->maximumY - bbox->minimumY ) ) > 2*noiseThreshold )
)
{
*x=(unsigned int) bbox->minimumX ;
*y=(unsigned int) bbox->minimumY ;
*width = (unsigned int) bbox->maximumX - bbox->minimumX;
*height= (unsigned int) bbox->maximumY - bbox->minimumY;
if (*width == *height +1 )
{
*width = *height;
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------------
//std::cerr<<"New MAX Bounding Box is "<<*x<<","<<*y<<" to "<<*x+*width<<","<<*y+*height<<" Image("<<fullFrameWidth<<","<<fullFrameHeight<<")\n";
if ( (*width!=0) && (*height!=0) )
{
//Success..!
*bboxExternal=bboxLocal;
return 1;
}
}
else
{
fprintf(stderr,"Bounding box is too similar with previous so keeping previous..\n");
//std::cerr<<"New MAX Bounding Box would have been "<< bbox->minimumX<<","<< bbox->minimumY<<" to "<< bbox->maximumX<<","<< bbox->maximumY<<" Image("<<fullFrameWidth<<","<<fullFrameHeight<<")\n";
}
}
return 0;
}
/**
* @brief In order to have the best possible quality we can crop the input frame to only perform detection around the area of the previous skeleton
* This code performs this crop and tries to get the best detection window
* @ingroup demo
* @bug This code is oriented to a single 2D skeleton detected, Multiple skeletons will confuse it and there is no logic to handle them
* @retval 1=Success/0=Failure
*/
int getBestCropWindow(
int maximumCrop,
unsigned int * x,
unsigned int * y,
unsigned int * width,
unsigned int * height,
struct boundingBox * bbox,
unsigned int inputWidth2DJointDetector,
unsigned int inputHeight2DJointDetector,
unsigned int fullFrameWidth,
unsigned int fullFrameHeight
)
{
//fprintf(stderr,"getBestCropWindow(%u,%u,%u,%u)\n",*x,*y,*width,*height);
//fprintf(stderr,"input image size is %u,%u\n",fullFrameWidth,fullFrameHeight);
if (bbox==0) { return 0; }
if (maximumCrop)
{
if ( getMaximumCropWindow(
x,
y,
width,
height,
bbox,
inputWidth2DJointDetector,
inputHeight2DJointDetector,
fullFrameWidth,
fullFrameHeight
)
)
{
return 1;
}
//If we fail to get Maximum Crop Window we will settle with normal crop window
}
//fprintf(stderr,"Previous crop started at %u,%u\n", *x,*y);
if ( (bbox!=0) && (bbox->populated) )
{
//fprintf(stderr,"This means that the bounding box (%0.2f,%0.2f) -> (%0.2f,%0.2f)\n",bbox->minimumX,bbox->minimumY,bbox->maximumX,bbox->maximumY);
bbox->minimumX+=(float) *x;
bbox->maximumX+=(float) *x;
bbox->minimumY+=(float) *y;
bbox->maximumY+=(float) *y;
//fprintf(stderr,"is actually (%0.2f,%0.2f) -> (%0.2f,%0.2f)\n",bbox->minimumX,bbox->minimumY,bbox->maximumX,bbox->maximumY);
}
unsigned int dimension = fullFrameHeight;
float bodyWidth = bbox->maximumX - bbox->minimumX;
float bodyHeight = bbox->maximumY - bbox->minimumY;
//fprintf(stderr,"Body starts at %0.2f and ends at %0.2f for a total of %0.2f pixels\n", bbox->minimumX , bbox->maximumX , bbox->maximumX-bbox->minimumX);
if (fullFrameWidth>=fullFrameHeight)
{
//fprintf(stderr,"Since the whole frame has %u pixels\n",fullFrameWidth);
//fprintf(stderr,"And we will use the dimension of the Y axis aka %u pixels to crop a rectangle\n",fullFrameHeight);
if ( (bbox!=0) && (bbox->populated) )
{
dimension = fullFrameHeight;
//TODO:
//if (bodyHeight<dimension) { dimension = bodyHeight; }
//if (dimension<inputHeight2DJointDetector) { dimension = inputHeight2DJointDetector; }
*width=dimension;
*height=dimension;
//-------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------
// Center on X axis..
//-------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------
float bodyCenterX = bbox->minimumX + (float) bodyWidth/2;
//fprintf(stderr,"The center X of the body lies at %0.2f\n",bodyCenterX);
//fprintf(stderr,"We can afford %u pixels left and right of the body center \n",(unsigned int) *width/2);
float cropStartX = bodyCenterX - *width/2;
if (cropStartX<0)
{
cropStartX=0; //Overflow..
}
if (cropStartX>fullFrameWidth-fullFrameHeight)
{
cropStartX=fullFrameWidth-fullFrameHeight;
}
//Neural Networks cause flicker, if we don't have exactly the same
//bounding box it's ok just keep the previous, it will help with flicker a lot..
if ( abs(*x - (unsigned int) cropStartX) > noiseThreshold )
{
*x = (unsigned int) cropStartX;
}
//fprintf(stderr,"This means starting at %u and ending at %u\n",(unsigned int) *x, *x+*width);
/*
//-------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------
// Center on Y axis..
//-------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------
float bodyCenterY = bbox->minimumY+ (float) bodyHeight/2;
//fprintf(stderr,"The center X of the body lies at %0.2f\n",bodyCenterX);
//fprintf(stderr,"We can afford %u pixels up and down of the body center \n",(unsigned int) *height/2);
float cropStartY = bodyCenterY - *height/2;
if (cropStartY<0) { cropStartY=0; } //Overflow..
if (cropStartY>fullFrameHeight) { cropStartY=fullFrameHeight; }
//Neural Networks cause flicker, if we don't have exactly the same
//bounding box it's ok just keep the previous, it will help with flicker a lot..
if ( abs(*y - (unsigned int) cropStartY) > 4 )
{
*y = (unsigned int) cropStartY;
}
*/
//std::cerr<<"Normal Bounding Box derived "<<*x<<","<<*y<<" to "<<*x+*width<<","<<*y+*height<<" \n";
}
else
{
//No skeleton? just crop in the center..
*x=(fullFrameWidth-fullFrameHeight)/2;
*y=0;
*width=fullFrameHeight;
*height=fullFrameHeight;
}
}
else if (fullFrameWidth<fullFrameHeight)
{
if ( (bbox!=0) && (bbox->populated) )
{
dimension = fullFrameWidth;
//TODO:
//if (bodyHeight<dimension) { dimension = bodyHeight; }
//if (dimension<inputHeight2DJointDetector) { dimension = inputHeight2DJointDetector; }
*width=dimension;
*height=dimension;
//-------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------
// Center on X axis..
//-------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------
float bodyCenterY = bbox->minimumY + (float) bodyHeight/2;
//fprintf(stderr,"The center X of the body lies at %0.2f\n",bodyCenterX);
//fprintf(stderr,"We can afford %u pixels left and right of the body center \n",(unsigned int) *width/2);
float cropStartY = bodyCenterY - *width/2;
if (cropStartY<0)
{
cropStartY=0; //Overflow..
}
if (cropStartY>fullFrameHeight-fullFrameWidth)
{
cropStartY=fullFrameHeight-fullFrameWidth;
}
//Neural Networks cause flicker, if we don't have exactly the same
//bounding box it's ok just keep the previous, it will help with flicker a lot..
if ( abs(*y - (unsigned int) cropStartY) > noiseThreshold )
{
*y = (unsigned int) cropStartY;
}
}
else
{
//No skeleton? just crop in the center..
*x=0;
*y=(fullFrameHeight-fullFrameWidth)/2;
*width=fullFrameWidth;
*height=fullFrameWidth;
}
}
if (
( *x + *width > fullFrameWidth ) ||
( *y + *height > fullFrameHeight )
)
{
//We failed..!
*x=0;
*y=0;
*width=fullFrameWidth;
*height=fullFrameWidth;
return 0;
}
return 1;
}
@@ -0,0 +1,19 @@
#pragma once
#include "opencv2/opencv.hpp"
using namespace cv;
int getBestCropWindow(
int maximumCrop,
unsigned int * x,
unsigned int * y,
unsigned int * width,
unsigned int * height,
struct boundingBox * bbox,
unsigned int inputWidth2DJointDetector,
unsigned int inputHeight2DJointDetector,
unsigned int fullFrameWidth,
unsigned int fullFrameHeight
);
@@ -0,0 +1,725 @@
#include "jointEstimator2D.hpp"
#include <vector>
#include <algorithm> // std::sort
#include <stdio.h>
#include <string.h>
#include <time.h>
unsigned long tickBaseJointEstimator = 0;
unsigned long GetTickCountMicrosecondsJointEstimator()
{
struct timespec ts;
if ( clock_gettime(CLOCK_MONOTONIC,&ts) != 0)
{
return 0;
}
if (tickBaseJointEstimator==0)
{
tickBaseJointEstimator = ts.tv_sec*1000000 + ts.tv_nsec/1000;
return 0;
}
return ( ts.tv_sec*1000000 + ts.tv_nsec/1000 ) - tickBaseJointEstimator;
}
int dumpHeatmapToCSVFile(const char * filename,struct JointEstimator2D * jnet,std::vector<float> heatmap)
{
unsigned int width = jnet->heatmapWidth2DJointDetector;
unsigned int height = jnet->heatmapHeight2DJointDetector;
FILE * fp = fopen(filename,"w");
if (fp!=0)
{
//---------------------------
// Header
//---------------------------
for (int x=0; x<width; x++)
{
if (x!=0)
{
fprintf(fp,",");
}
fprintf(fp,"x=%u",x);
}
fprintf(fp,"\n");
//---------------------------
//---------------------------
// Body
//---------------------------
unsigned int i=0;
for (int y=0; y<height; y++)
{
for (int x=0; x<width; x++)
{
if (x!=0)
{
fprintf(fp,",");
}
if (heatmap[i]>0.01)
{
fprintf(fp,"%f",heatmap[i]);
}
else if (-0.01>heatmap[i])
{
fprintf(fp,"%f",heatmap[i]);
}
else
{
fprintf(fp,"0");
}
++i;
}
fprintf(fp,"\n");
}
//---------------------------
fclose(fp);
return 1;
}
return 0;
}
int loadJointEstimator2D(struct JointEstimator2D * jnet,int joint2DEstimatorSelected,int usePAFs,unsigned int forceCPU)
{
memset(jnet,0,sizeof(struct JointEstimator2D));
const char networkPathOpenPoseMiniStatic[]="dataset/combinedModel/openpose_model.pb";
const char networkPathVnectStatic[]="dataset/combinedModel/vnect_sm_pafs_8.1k.pb";
const char networkPathFORTHStatic[]="dataset/combinedModel/mobnet2_tiny_vnect_sm_1.9k.pb";
jnet->networkPath = (char*) networkPathFORTHStatic;
jnet->joint2DSensitivityPercent=30;
char networkInputLayer[]="input_1";
char networkOutputLayer[]="k2tfout_0";
jnet->numberOfOutputTensors = 3;
jnet->heatmapWidth2DJointDetector= 46;
jnet->heatmapHeight2DJointDetector= 46;
jnet->inputWidth2DJointDetector = 368;
jnet->inputHeight2DJointDetector = 368;
jnet->numberOfHeatmaps = 19;
//-----------------------------------------------------------------------------
switch (joint2DEstimatorSelected)
{
case JOINT_2D_ESTIMATOR_FORTH :
jnet->networkPath=(char*) networkPathFORTHStatic;
networkOutputLayer[8]='0';
jnet->joint2DSensitivityPercent=30;
jnet->numberOfOutputTensors = 3;
break;
case JOINT_2D_ESTIMATOR_VNECT :
jnet->networkPath = (char*) networkPathVnectStatic;
networkOutputLayer[8]='1';
jnet->joint2DSensitivityPercent=20;
jnet->numberOfOutputTensors = 4;
break;
case JOINT_2D_ESTIMATOR_OPENPOSE :
jnet->networkPath=(char*) networkPathOpenPoseMiniStatic;
networkOutputLayer[8]='1';
jnet->joint2DSensitivityPercent=40;
jnet->numberOfOutputTensors = 4;
break;
default :
fprintf(stderr,"No 2D Joint Estimator Selected..\n");
break;
};
//-----------------------------------------------------------------------------
if (
loadTensorflowInstance(
&jnet->network,
jnet->networkPath,
networkInputLayer,
networkOutputLayer,
forceCPU
)
)
{
return 1;
}
//-----------------------------------------------------------------------------
return 0;
}
int unloadJointEstimator2D(struct JointEstimator2D * jnet)
{
return unloadTensorflow(&jnet->network);
}
int sortBlobsBasedOnMaximumActivation(struct HeatmapBlob blobA,struct HeatmapBlob blobB)
{
return blobA.peakValue > blobB.peakValue;
}
int updateSubpixelPeak(struct JointEstimator2D * jnet,struct HeatmapBlob * blob,std::vector<float> heatmap,unsigned int width,unsigned int height)
{
//Uncomment to disable subpixel code..
//blob->subpixelPeakX = (float) blob->peakX;
//blob->subpixelPeakY = (float) blob->peakY;
//return 0;
#define DEBUG_SUBPIXEL_GRADIENT 0
#if DEBUG_SUBPIXEL_GRADIENT
std::vector<float> gradientX(width*height);
std::vector<float> gradientY(width*height);
#endif
if (blob->peakValue==0.0)
{
return 0;
}
float vX=(float) blob->peakX;
float vY=(float) blob->peakY;
float normalizedValue=0.0;
unsigned int location=0;
for (signed int y=0; y<blob->height; y++)
{
for (signed int x=0; x<blob->width; x++)
{
//fprintf(stderr,"Blob element (x=%u,y=%u) ",x,y);
location = (width * (y+blob->y)) + (x+blob->x);
//fprintf(stderr,"Location %u",location);
if (location<heatmap.size())
{
normalizedValue=(float) heatmap[location] / blob->peakValue;
normalizedValue= normalizedValue / ( blob->width * blob->height);
//fprintf(stderr,"NormalValue %0.2f",normalizedValue);
signed int peakInRelationToBlobX = (signed int) ((signed int) blob->peakX - (signed int) blob->x);
signed int peakInRelationToBlobY = (signed int) ((signed int) blob->peakY - (signed int) blob->y);
signed int relativePositionToPeakX = (signed int) ( (signed int) x - (signed int) peakInRelationToBlobX);
signed int relativePositionToPeakY = (signed int) ( (signed int) y - (signed int) peakInRelationToBlobY);
//fprintf(stderr,"Ppeak %d,%d",posX,posY);
float nX=(float) relativePositionToPeakX*normalizedValue;
float nY=(float) relativePositionToPeakY*normalizedValue;
//fprintf(stderr,"Add %f,%f\n",nX,nY);
#if DEBUG_SUBPIXEL_GRADIENT
gradientX[location]=nX;
gradientY[location]=nY;
#endif
if ( (nX!=nX) || (nY!=nY) )
{
//Handle NaN
}
else
{
//fprintf(stderr,"%f,%f ",nX,nY);
vX=vX+nX;
vY=vY+nY;
}
}
else
{
fprintf(stderr,"updateSubpixelPeak overflow..\n");
return 0;
}
}
}
#if DEBUG_SUBPIXEL_GRADIENT
char filename[512];
snprintf(filename,512,"GradientX.csv");
dumpHeatmapToCSVFile(filename,jnet,gradientX);
snprintf(filename,512,"GradientY.csv");
dumpHeatmapToCSVFile(filename,jnet,gradientY);
snprintf(filename,512,"Values.csv");
dumpHeatmapToCSVFile(filename,jnet,heatmap);
#endif
blob->subpixelPeakX = vX;
blob->subpixelPeakY = vY;
return 1;
}
int isNeighborWithBlob(char * blobLabels,int x,int y,int width,int height)
{
for (int iY=-1; iY<1; iY++)
{
for (int iX=-1; iX<=1; iX++)
{
if ( (iX==0) && (iY==0) )
{
}
else if (
(iX+x>=0) &&
(iY+y>=0) &&
(iX+x<width) &&
(iY+y<height)
)
{
int location = width * (y+iY) + (x+iX);
if (blobLabels[location]!=0)
{
return blobLabels[location];
}
}
}
}
return 0;
}
std::vector<struct HeatmapBlob> getBlobsFromHeatmap(struct JointEstimator2D * jnet,unsigned int heatmapID,std::vector<float> heatmap)
{
unsigned int width = jnet->heatmapWidth2DJointDetector;
unsigned int height = jnet->heatmapHeight2DJointDetector;
struct HeatmapBlob emptyBlob;
emptyBlob.x=width+1;
emptyBlob.y=height+1;
emptyBlob.width=0;
emptyBlob.height=0;
emptyBlob.width=0;
emptyBlob.peakX=0;
emptyBlob.peakY=0;
emptyBlob.peakValue=0.0;
emptyBlob.subpixelPeakX=0.0;
emptyBlob.subpixelPeakY=0.0;
std::vector<struct HeatmapBlob> blobsEncountered;
char blobLabels[width*height]= {0};
unsigned int currentBlobLabel=1;
int onHorizontalBlob=0;
int labelID=0;
unsigned int i=0;
float threshold = 0.1; //(float) jnet->joint2DSensitivityPercent/100;
for (int y=0; y<height; y++)
{
for (int x=0; x<width; x++)
{
if ( heatmap[i] > threshold )
{
if (!onHorizontalBlob)
{
//We were not on a horizontal blob so we need to search..!
labelID=isNeighborWithBlob(blobLabels,x,y,width,height);
if (!labelID)
{
//Our search did not give us a result
//This is a new blob disconnected from previous blobs..!
blobLabels[i]=currentBlobLabel;
onHorizontalBlob=currentBlobLabel;
labelID=currentBlobLabel-1;
++currentBlobLabel;
blobsEncountered.push_back(emptyBlob);
onHorizontalBlob=1;
}
else
{
//Already Existing Blob found we will add this pixel to it
onHorizontalBlob=labelID;
blobLabels[i]=onHorizontalBlob;
labelID=labelID-1;
}
}
else
{
//If we are already on a horizontal blob dont do expensive search
blobLabels[i]=onHorizontalBlob;
labelID=onHorizontalBlob-1;
}
if (labelID<blobsEncountered.size())
{
//fprintf(stderr,"Hit at %u,%u\n",x,y);
//fprintf(stderr,"%f ",heatmap[i]);
//Update Blob Start at X Axis
if (x<blobsEncountered[labelID].x)
{
blobsEncountered[labelID].x=x;
}
//Update Blob Start at Y Axis
if (y<blobsEncountered[labelID].y)
{
blobsEncountered[labelID].y=y;
}
//Update Blob Width
int thisLineWidth=1+x-blobsEncountered[labelID].x;
if (thisLineWidth>blobsEncountered[labelID].width)
{
blobsEncountered[labelID].width=thisLineWidth;
}
//Update Blob Height
int thisLineHeight=1+y-blobsEncountered[labelID].y;
if (thisLineHeight>blobsEncountered[labelID].height)
{
blobsEncountered[labelID].height=thisLineHeight;
}
//Update Peak to use as center later..
if (blobsEncountered[labelID].peakValue<heatmap[i])
{
blobsEncountered[labelID].peakValue=heatmap[i];
blobsEncountered[labelID].peakX=x;
blobsEncountered[labelID].peakY=y;
}
}
}//Above activation threshold..
else
{
//We just left a blob..
onHorizontalBlob=0;
}
++i;
} //End of X loop
//We just left a line so the blob has ended..
onHorizontalBlob=0;
} //End of Y loop
for (int blobID=0; blobID<blobsEncountered.size(); blobID++)
{
updateSubpixelPeak(jnet,&blobsEncountered[blobID],heatmap,width,height);
}
//Make sure the best value is first..
std::sort(blobsEncountered.begin(), blobsEncountered.end(),sortBlobsBasedOnMaximumActivation);
/*
fprintf(stderr,"Heatmap %u %s--------\n",heatmapID,UT_COCOBodyNames[heatmapID]);
for (int blobID=0; blobID<blobsEncountered.size(); blobID++)
{
fprintf(stderr,"Blob %u/%lu - ",blobID,blobsEncountered.size());
fprintf(stderr,"x=%u,y=%u(%ux%u) "
,blobsEncountered[blobID].x,blobsEncountered[blobID].y
,blobsEncountered[blobID].width,blobsEncountered[blobID].height
);
fprintf(stderr,"pX=%u,pY=%u>",blobsEncountered[blobID].peakX,blobsEncountered[blobID].peakY);
fprintf(stderr,"%0.2f",blobsEncountered[blobID].peakValue);
fprintf(stderr," subpixel(%0.2f,%0.2f)",blobsEncountered[blobID].subpixelPeakX,blobsEncountered[blobID].subpixelPeakY);
fprintf(stderr,"\n");
}
*/
return blobsEncountered;
}
int estimate2DSkeletonsFromHeatmaps(struct JointEstimator2D * jnet,struct Skeletons2DDetected * result,std::vector<std::vector<float> > heatmaps)
{
//char filename[512];
//fprintf(stderr,"New Frame:\n");
unsigned long startTime = GetTickCountMicrosecondsJointEstimator();
int blobsProceesed=0;
for (int heatmapID=0; heatmapID<heatmaps.size(); heatmapID++)
{
unsigned int body25ID = heatmapCorrespondenceToBODY25[heatmapID];
if (heatmapID!=UT_COCO_Bkg)
{
result->skeletons[0].body.joint2D[body25ID].x = 0;
result->skeletons[0].body.joint2D[body25ID].y = 0;
result->skeletons[0].body.active[body25ID]=0.0;
//--------------------------------------------------------
std::vector<struct HeatmapBlob> blobs = getBlobsFromHeatmap(jnet,heatmapID,heatmaps[heatmapID]);
if (blobs.size()>0)
{
result->skeletons[0].body.isPopulated=1;
float x=(float) blobs[0].subpixelPeakX/ jnet->heatmapWidth2DJointDetector;
float y=(float) blobs[0].subpixelPeakY/ jnet->heatmapHeight2DJointDetector;
result->skeletons[0].body.joint2D[body25ID].x = x;
result->skeletons[0].body.joint2D[body25ID].y = y;
if ( (x!=0) && (y!=0) ) {
result->skeletons[0].body.active[body25ID]=1.0;
}
if (blobsProceesed==0)
{
//Update Bbox Min
result->skeletons[0].body.bbox2D[0].x = x;
result->skeletons[0].body.bbox2D[0].y = y;
//Update Bbox Max
result->skeletons[0].body.bbox2D[1].x = x;
result->skeletons[0].body.bbox2D[1].y = y;
}
else
{
// if Min X > current X
if (result->skeletons[0].body.bbox2D[0].x > x )
{
result->skeletons[0].body.bbox2D[0].x =x;
}
// if Min Y > current Y
if (result->skeletons[0].body.bbox2D[0].y > y )
{
result->skeletons[0].body.bbox2D[0].y =y;
}
// if Max X < current X
if (result->skeletons[0].body.bbox2D[1].x < x )
{
result->skeletons[0].body.bbox2D[1].x =x;
}
// if Max Y < current Y
if (result->skeletons[0].body.bbox2D[1].y < y )
{
result->skeletons[0].body.bbox2D[1].y =y;
}
}
++blobsProceesed;
}
//--------------------------------------------------------
//snprintf(filename,512,"heatmap_%u.csv",heatmapID);
//dumpHeatmapToCSVFile(filename,jnet,heatmaps[0]);
//--------------------------------------------------------
}
}
/*
The following joints are not covered by the current networks
BODY25_MidHip,
BODY25_LBigToe,
BODY25_LSmallToe,
BODY25_LHeel,
BODY25_RBigToe,
BODY25_RSmallToe,
BODY25_RHeel,
*/
//Mid hip can be approximated by LHip and RHip
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
if (
(result->skeletons[0].body.joint2D[BODY25_RHip].x!=0) && (result->skeletons[0].body.joint2D[BODY25_LHip].x!=0) &&
(result->skeletons[0].body.joint2D[BODY25_RHip].y!=0) && (result->skeletons[0].body.joint2D[BODY25_LHip].y!=0)
)
{
result->skeletons[0].body.joint2D[BODY25_MidHip].x = (float) (result->skeletons[0].body.joint2D[BODY25_RHip].x+result->skeletons[0].body.joint2D[BODY25_LHip].x)/2;
result->skeletons[0].body.joint2D[BODY25_MidHip].y = (float) (result->skeletons[0].body.joint2D[BODY25_RHip].y+result->skeletons[0].body.joint2D[BODY25_LHip].y)/2;
result->skeletons[0].body.jointAccuracy[BODY25_MidHip] = (result->skeletons[0].body.jointAccuracy[BODY25_RHip]+result->skeletons[0].body.jointAccuracy[BODY25_LHip])/2;
result->skeletons[0].body.active[BODY25_MidHip] = 1.0;
//fprintf(stderr,"Mid hip populated and resides @ (%0.2f,%0.2f)\n",result->skeletons[0].body.joint2D[BODY25_MidHip].x,result->skeletons[0].body.joint2D[BODY25_MidHip].y);
} else
{
result->skeletons[0].body.joint2D[BODY25_MidHip].x = 0;
result->skeletons[0].body.joint2D[BODY25_MidHip].y = 0;
result->skeletons[0].body.jointAccuracy[BODY25_MidHip] = 0;
result->skeletons[0].body.active[BODY25_MidHip] = 0.0;
//fprintf(stderr,"Cannot populate Mid hip, this will degrade output!\n");
}
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
result->numberOfSkeletonsDetected=1;
unsigned long endTime = GetTickCountMicrosecondsJointEstimator();
// fprintf(stderr,"Resolving joint subpixel peaks took %lu microseconds\n",endTime-startTime);
return 1;
}
int convertNormalized2DJointsToOriginalImageCoordinates(
struct JointEstimator2D * jnet,
float * x,
float * y,
int correctOffset
)
{
//It is very common for points to be empty, they cannot be normalized so its best if we have
//a quick path for them..
if ( (*x==0.0) && (*y==0.0) ) {
return 1;
}
if (*x>1.0) {
*x=1.0;
}
if (*y>1.0) {
*y=1.0;
}
float normalizedX = *x;
float normalizedY = *y;
//fprintf(stderr,"Initial point is %0.2f,%0.2f\n",normalizedX,normalizedY);
float frameOfReferenceOfTensorflowX = normalizedX * jnet->inputWidth2DJointDetector;
float frameOfReferenceOfTensorflowY = normalizedY * jnet->inputHeight2DJointDetector;
//fprintf(stderr,"Tensorflow point is %0.2f,%0.2f\n",frameOfReferenceOfTensorflowX,frameOfReferenceOfTensorflowY);
float scaleFromTensorflowToBoundingBoxX = (float) jnet->crop.croppedDimensionWidth / jnet->inputWidth2DJointDetector;
float scaleFromTensorflowToBoundingBoxY = (float) jnet->crop.croppedDimensionHeight / jnet->inputHeight2DJointDetector;
*x = /*jnet->crop.offsetX +*/ (frameOfReferenceOfTensorflowX * scaleFromTensorflowToBoundingBoxX);
*y = /*jnet->crop.offsetY +*/ (frameOfReferenceOfTensorflowY * scaleFromTensorflowToBoundingBoxY);
if (correctOffset)
{
*x += jnet->crop.offsetX;
*y += jnet->crop.offsetY;
}
//fprintf(stderr,"Final point is %0.2f,%0.2f\n",*x,*y);
return 1;
}
std::vector<std::vector<float> > getHeatmaps(struct JointEstimator2D * jnet,unsigned char * rgbData,unsigned int width,unsigned int height)
{
// pass the frame to the Estimator
unsigned long startTime = GetTickCountMicrosecondsJointEstimator();
std::vector<std::vector<float> > joint2DOutput = predictTensorflowOnArrayOfHeatmaps(
&jnet->network,
(unsigned int) width,
(unsigned int) height,
(float*) rgbData,
jnet->heatmapWidth2DJointDetector,
jnet->heatmapHeight2DJointDetector,
jnet->numberOfOutputTensors
);
unsigned long endTime = GetTickCountMicrosecondsJointEstimator();
//fprintf(stderr,"Running 2D joint estimator took %lu microseconds\n",endTime-startTime);
return joint2DOutput;
}
int estimate2DSkeletonsFromImage(struct JointEstimator2D * jnet,struct Skeletons2DDetected * result,unsigned char * rgbData,unsigned int width,unsigned int height)
{
/*
unsigned long startTime = GetTickCountMicroseconds();
std::vector<cv::Point_<float> > pointsOf2DSkeleton = predictAndReturnSingleSkeletonOf2DCOCOJoints(
&jnet->network,
bgr,
minThreshold,
visualize,
saveVisualization,
frameNumber,
inputWidth2DJointDetector,
inputHeight2DJointDetector,
heatmapWidth2DJointDetector,
heatmapHeight2DJointDetector,
numberOfHeatmaps,
numberOfOutputTensors
);
unsigned long endTime = GetTickCountMicroseconds();
*fps = convertStartEndTimeFromMicrosecondsToFPS(startTime,endTime);
*/
// pass the frame to the Estimator
std::vector<std::vector<float> > joint2DOutput = predictTensorflowOnArrayOfHeatmaps(
&jnet->network,
(unsigned int) width,
(unsigned int) height,
(float*) rgbData,
jnet->heatmapWidth2DJointDetector,
jnet->heatmapHeight2DJointDetector,
jnet->numberOfOutputTensors
);
return 0;
}
int restore2DJointsToInputFrameCoordinates(struct JointEstimator2D * jnet,struct Skeletons2DDetected * input)
{
for (unsigned int skID=0; skID<input->numberOfSkeletonsDetected; skID++)
{
for (int i=0; i<BODY25_PARTS; i++)
{
//fprintf(stderr,"normalized(%0.2f,%0.2f) ",input->skeletons[skID].body.joint2D[i].x,input->skeletons[skID].body.joint2D[i].y);
convertNormalized2DJointsToOriginalImageCoordinates(jnet,&input->skeletons[skID].body.joint2D[i].x,&input->skeletons[skID].body.joint2D[i].y,1);
//fprintf(stderr,"regular(%0.2f,%0.2f) ",input->skeletons[skID].body.joint2D[i].x,input->skeletons[skID].body.joint2D[i].y);
}
/* //Currently dont have hand and head networks..!
for (int i=0; i<COCO_HAND_PARTS; i++)
{
convertNormalized2DJointsToOriginalImageCoordinates(jnet,&input->skeletons[skID].leftHand.joint2D[i].x,&input->skeletons[skID].leftHand.joint2D[i].y,1);
}
for (int i=0; i<COCO_HAND_PARTS; i++)
{
convertNormalized2DJointsToOriginalImageCoordinates(jnet,&input->skeletons[skID].rightHand.joint2D[i].x,&input->skeletons[skID].rightHand.joint2D[i].y,1);
}
for (int i=0; i<OP_HEAD_PARTS; i++)
{
convertNormalized2DJointsToOriginalImageCoordinates(jnet,&input->skeletons[skID].head.joint2D[i].x,&input->skeletons[skID].head.joint2D[i].y,1);
}
*/
}
return 1;
}
float percentOf2DPointsMissing(struct Skeletons2DDetected * input)
{
if (input->numberOfSkeletonsDetected==0) {
return 100.0;
}
unsigned int jointsThatExist=0;
unsigned int jointsThatShouldExist=0;
if (input->skeletons[0].body.isPopulated)
{
jointsThatShouldExist=BODY25_PARTS-2;
for (int jID=0; jID<BODY25_PARTS; jID++)
{
if ( input->skeletons[0].body.active[jID] )
{
++jointsThatExist;
}
}
//fprintf(stderr,"%u/%u joints observed\n",jointsThatExist,jointsThatShouldExist);
float percentOf2DPointsThatExist = (float) 100 * jointsThatExist / jointsThatShouldExist;
return (float) 100.0 - percentOf2DPointsThatExist;
}
//fprintf(stderr,"Body is not populated\n");
return 100.0;
}
@@ -0,0 +1,296 @@
#pragma once
/** @file mocapnet.hpp
* @brief The MocapNET C library
* As seen in https://www.youtube.com/watch?v=fH5e-KMBvM0 , the MocapNET network requires two types of input.
* The first is an uncompressed list of (x,y,v) joints and the second an NSDM array. To add to those the output consists of BVH
* frames that must be accompanied by a header. This library internally handles all of these details.
* @author Ammar Qammaz (AmmarkoV)
*/
#include "../Tensorflow/tensorflow.hpp"
#include "../MocapNET2/MocapNETLib2/IO/commonSkeleton.hpp"
#include <iostream>
#include <vector>
/**
* @brief 2D Skeletons Retreieved
*/
struct Skeletons2DDetected
{
unsigned int numberOfSkeletonsDetected;
struct skeletonStructure skeletons[16];
};
struct InputImageCrop
{
unsigned int offsetX;
unsigned int offsetY;
unsigned int croppedDimensionWidth;
unsigned int croppedDimensionHeight;
//cropBBox,
unsigned int frameWidth;
unsigned int frameHeight;
};
/**
* @brief MocapNET consists of separate classes/ensembles that are invoked for particular orientations.
* This structure holds the required tensorflow instances to make MocapNET work.
*/
struct JointEstimator2D
{
struct TensorflowInstance network;
char * networkPath;
float joint2DSensitivityPercent;
unsigned int numberOfOutputTensors;
unsigned int heatmapWidth2DJointDetector;
unsigned int heatmapHeight2DJointDetector;
unsigned int inputWidth2DJointDetector;
unsigned int inputHeight2DJointDetector;
unsigned int numberOfHeatmaps;
struct InputImageCrop crop;
int doCrop;
};
/**
* @brief Each Blob is a rectangular area..
* with one peak..
*/
struct HeatmapBlob
{
unsigned int x;
unsigned int y;
unsigned int width;
unsigned int height;
unsigned int peakX;
unsigned int peakY;
float peakValue;
float subpixelPeakX;
float subpixelPeakY;
};
/**
* @brief This is a list of included Joint 2D Estimators included.
*/
enum JOINT_2D_ESTIMATOR_SELECTED
{
JOINT_2D_ESTIMATOR_NONE=0,
JOINT_2D_ESTIMATOR_FORTH,
JOINT_2D_ESTIMATOR_VNECT,
JOINT_2D_ESTIMATOR_OPENPOSE,
//-----------------------------
JOINT_2D_ESTIMATOR_NUMBER
};
/**
* @brief This is an array of names for the input Joints expected from the utilities.
*/
static const char * UT_COCOBodyNames[] =
{
"Nose", //0
"Neck", //1
"RShoulder", //2
"RElbow", //3
"RWrist", //4
"LShoulder", //5
"LElbow", //6
"LWrist", //7
"RHip", //8
"RKnee", //9
"RAnkle", //10
"LHip", //11
"LKnee", //12
"LAnkle", //13
"REye", //14
"LEye", //15
"REar", //16
"LEar", //17
"Bkg", //18
//=================
"End of Joint Names"
};
/**
* @brief This is a list of included Joint 2D Estimators included.
*/
enum JOINT_2D_ESTIMATOR_PART_LABEL
{
JOINT_2D_ESTIMATOR_PART_OF_NOTHING=0,
JOINT_2D_ESTIMATOR_PART_OF_TORSO,
JOINT_2D_ESTIMATOR_PART_OF_HEAD,
JOINT_2D_ESTIMATOR_PART_OF_LEFT,
JOINT_2D_ESTIMATOR_PART_OF_RIGHT,
//-----------------------------
JOINT_2D_ESTIMATOR_NUMBER_OF_PARTS
};
/**
* @brief We want to distinguish limbs with labels ( to color them )
*/
static const int UT_COCOSkeletonJointsPartLabel[] =
{
// Part of Joint
JOINT_2D_ESTIMATOR_PART_OF_TORSO, //UT_COCO_Nose,
JOINT_2D_ESTIMATOR_PART_OF_TORSO, //UT_COCO_Neck,
JOINT_2D_ESTIMATOR_PART_OF_RIGHT, //UT_COCO_RShoulder,
JOINT_2D_ESTIMATOR_PART_OF_RIGHT, //UT_COCO_RElbow,
JOINT_2D_ESTIMATOR_PART_OF_RIGHT, //UT_COCO_RWrist,
JOINT_2D_ESTIMATOR_PART_OF_LEFT, //UT_COCO_LShoulder,
JOINT_2D_ESTIMATOR_PART_OF_LEFT, //UT_COCO_LElbow,
JOINT_2D_ESTIMATOR_PART_OF_LEFT, //UT_COCO_LWrist,
JOINT_2D_ESTIMATOR_PART_OF_RIGHT, //UT_COCO_RHip,
JOINT_2D_ESTIMATOR_PART_OF_RIGHT, //UT_COCO_RKnee,
JOINT_2D_ESTIMATOR_PART_OF_RIGHT, //UT_COCO_RAnkle,
JOINT_2D_ESTIMATOR_PART_OF_LEFT, //UT_COCO_LHip,
JOINT_2D_ESTIMATOR_PART_OF_LEFT, //UT_COCO_LKnee,
JOINT_2D_ESTIMATOR_PART_OF_LEFT, //UT_COCO_LAnkle,
JOINT_2D_ESTIMATOR_PART_OF_HEAD, //UT_COCO_REye,
JOINT_2D_ESTIMATOR_PART_OF_HEAD, //UT_COCO_LEye,
JOINT_2D_ESTIMATOR_PART_OF_HEAD, //UT_COCO_REar,
JOINT_2D_ESTIMATOR_PART_OF_HEAD, //UT_COCO_LEar,
JOINT_2D_ESTIMATOR_PART_OF_NOTHING //UT_COCO_Bkg
};
/**
* @brief This is a programmer friendly enumerator of joint names expected from the utilities ( hence the prefix UT_ ) .
* Please notice that these are not necessarily the same when converting to different data formats ( COCO / BODY25 / MocapNET etc )
*/
enum UT_COCOSkeletonJoints
{
UT_COCO_Nose=0,
UT_COCO_Neck,
UT_COCO_RShoulder,
UT_COCO_RElbow,
UT_COCO_RWrist,
UT_COCO_LShoulder,
UT_COCO_LElbow,
UT_COCO_LWrist,
UT_COCO_RHip,
UT_COCO_RKnee,
UT_COCO_RAnkle,
UT_COCO_LHip,
UT_COCO_LKnee,
UT_COCO_LAnkle,
UT_COCO_REye,
UT_COCO_LEye,
UT_COCO_REar,
UT_COCO_LEar,
UT_COCO_Bkg,
//---------------------
UT_COCO_PARTS
};
/**
* @brief This is the parent relation map of COCO skeleton joints , we can easily find a joints parent using this enumerator
*/
static const int UT_COCOSkeletonJointsParentRelationMap[] =
{
// Parent Joint
UT_COCO_Nose, //UT_COCO_Nose,
UT_COCO_Nose, //UT_COCO_Neck,
UT_COCO_Neck, //UT_COCO_RShoulder,
UT_COCO_RShoulder, //UT_COCO_RElbow,
UT_COCO_RElbow, //UT_COCO_RWrist,
UT_COCO_Neck, //UT_COCO_LShoulder,
UT_COCO_LShoulder, //UT_COCO_LElbow,
UT_COCO_LElbow, //UT_COCO_LWrist,
UT_COCO_Neck, //UT_COCO_RHip,
UT_COCO_RHip, //UT_COCO_RKnee,
UT_COCO_RKnee, //UT_COCO_RAnkle,
UT_COCO_Neck, //UT_COCO_LHip,
UT_COCO_LHip, //UT_COCO_LKnee,
UT_COCO_LKnee, //UT_COCO_LAnkle,
UT_COCO_Nose, //UT_COCO_REye,
UT_COCO_Nose, //UT_COCO_LEye,
UT_COCO_REye, //UT_COCO_REar,
UT_COCO_LEye, //UT_COCO_LEar,
UT_COCO_Bkg //UT_COCO_Bkg
};
/**
* @brief An array of indexes to the parents of BODY25 skeleton joints
*/
static const int heatmapCorrespondenceToBODY25[] =
{
BODY25_Nose, // UT_COCO_Nose=0,
BODY25_Neck, // UT_COCO_Neck,
BODY25_RShoulder, //UT_COCO_RShoulder,
BODY25_RElbow,// UT_COCO_RElbow,
BODY25_RWrist,// UT_COCO_RWrist,
BODY25_LShoulder,//UT_COCO_LShoulder,
BODY25_LElbow,//UT_COCO_LElbow,
BODY25_LWrist,//UT_COCO_LWrist,
BODY25_RHip,//UT_COCO_RHip,
BODY25_RKnee,//UT_COCO_RKnee,
BODY25_RAnkle,//UT_COCO_RAnkle,
BODY25_LHip,//UT_COCO_LHip,
BODY25_LKnee,//UT_COCO_LKnee,
BODY25_LAnkle,//UT_COCO_LAnkle,
BODY25_REye,//UT_COCO_REye,
BODY25_LEye,//UT_COCO_LEye,
BODY25_REar,//UT_COCO_REar,
BODY25_LEar,//UT_COCO_LEar,
BODY25_Bkg,//UT_COCO_Bkg,
};
unsigned long GetTickCountMicrosecondsJointEstimator();
/**
* @brief Load a 2D Joint Estimator from a .pb file on disk
* @ingroup jointestimator
* @param Pointer to a struct JointEstimator2D that will hold the tensorflow instances on load.
* @param Quality setting, can currently be 1.0 ( highest quality ), 1.5 or 2.0 ( highest performance )
* @param Flag that controls the use of PAFs
* @param Force the usage of CPU for MocapNET ( should be 1 as MocapNET is designed for CPU while GPU handles 2D )
* @retval 1 = Success loading the files , 0 = Failure
*/
int loadJointEstimator2D(struct JointEstimator2D * jnet,int joint2DEstimatorSelected,int usePAFs,unsigned int forceCPU);
int unloadJointEstimator2D(struct JointEstimator2D * jnet);
int convertNormalized2DJointsToOriginalImageCoordinates(
struct JointEstimator2D * jnet,
float * x,
float * y,
int correctOffset
);
int estimate2DSkeletonsFromImage(struct JointEstimator2D * jnet,struct Skeletons2DDetected * result,unsigned char * rgbData,unsigned int width,unsigned int height);
int restore2DJointsToInputFrameCoordinates(struct JointEstimator2D * jnet,struct Skeletons2DDetected * input);
float percentOf2DPointsMissing(struct Skeletons2DDetected * input);
int estimate2DSkeletonsFromHeatmaps(struct JointEstimator2D * jnet,struct Skeletons2DDetected * result,std::vector<std::vector<float> > heatmaps);
std::vector<std::vector<float> > getHeatmaps(struct JointEstimator2D * jnet,unsigned char * rgbData,unsigned int width,unsigned int height);
@@ -0,0 +1,217 @@
#include "visualization.hpp"
#include "cameraControl.hpp"
int visualizeHeatmaps(struct JointEstimator2D * jointEstimator,std::vector<std::vector<float> > heatmapNNOutput,unsigned int frameNumber)
{
unsigned int cols = jointEstimator->heatmapWidth2DJointDetector;
unsigned int rows = jointEstimator->heatmapHeight2DJointDetector;
unsigned int hm = jointEstimator->numberOfHeatmaps;
std::vector<cv::Mat> heatmaps;
for(int i=0; i<hm; ++i)
{
cv::Mat h(rows,cols, CV_32FC1);
for(int r=0; r<rows; ++r)
{
for(int c=0; c<cols; ++c)
{
int pos = r*cols+c;
h.at<float>(r,c) = heatmapNNOutput[i][pos];
}
}
heatmaps.push_back(h);
}
#define DISPLAY_ALL_HEATMAPS 1
//This code segment will display every returned heatmap in it's own window..
#if DISPLAY_ALL_HEATMAPS
int visualize=1;
if (visualize)
{
unsigned int x=0;
unsigned int y=0;
char windowLabel[128];
snprintf(windowLabel,128,"T");
for(int i=0; i<18; ++i)
{
snprintf(windowLabel,128,"Heatmap %u",i);
if (frameNumber==0)
{
cv::namedWindow(windowLabel,1);
cv::moveWindow(windowLabel, x,y);
++frameNumber;
}
cv::imshow(windowLabel,heatmaps[i]);
y=y+rows+30;
if (y>700)
{
x=x+cols;
y=0;
}
}
}
#endif
return 1;
}
//Basic Skeleton Visualization with big fonts to be legible on cluttered skeletons
void dj_drawExtractedSkeletons(
cv::Mat img,
struct Skeletons2DDetected * sk,
float factorX,
float factorY
)
{
cv::Scalar red = cv::Scalar(0,0,255);
cv::Scalar green = cv::Scalar(0,255,0);
cv::Scalar blue = cv::Scalar(255,0,0);
cv::Scalar color=blue;
//Just the lines ( background layer)
for (int skID=0; skID<sk->numberOfSkeletonsDetected; skID++)
{
for (int i=0; i<UT_COCO_PARTS; i++)
{
unsigned int jointID = heatmapCorrespondenceToBODY25[i%18];
struct point2D * jointPoint = & sk->skeletons[skID].body.joint2D[jointID];
unsigned int parentID = heatmapCorrespondenceToBODY25[UT_COCOSkeletonJointsParentRelationMap[i%18]];
if (parentID!=jointID)
{
struct point2D * parentPoint = & sk->skeletons[skID].body.joint2D[parentID];
if (
(jointPoint->x > 0) &&
(jointPoint->y > 0) &&
(parentPoint->x > 0) &&
(parentPoint->y > 0)
)
{
cv::Point_<float> jointPointCV;
jointPointCV.x = jointPoint->x * factorX;
jointPointCV.y = jointPoint->y * factorY;
cv::Point_<float> parentPointCV;
parentPointCV.x = parentPoint->x * factorX;
parentPointCV.y = parentPoint->y * factorY;
switch (UT_COCOSkeletonJointsPartLabel[i%18])
{
case JOINT_2D_ESTIMATOR_PART_OF_TORSO:
case JOINT_2D_ESTIMATOR_PART_OF_HEAD:
color=blue;
break;
case JOINT_2D_ESTIMATOR_PART_OF_LEFT:
color=red;
break;
case JOINT_2D_ESTIMATOR_PART_OF_RIGHT:
color=green;
break;
};
cv::line(img,jointPointCV,parentPointCV,color,2.0);
}
}
}
}
//Just the points and text ( foreground )
char textInfo[512];
for (int skID=0; skID<sk->numberOfSkeletonsDetected; skID++)
{
for (int i=0; i<UT_COCO_PARTS; i++)
{
unsigned int jointID = heatmapCorrespondenceToBODY25[i%18];
struct point2D * jointPoint = & sk->skeletons[skID].body.joint2D[jointID];
cv::Point_<float> jointPointCV;
jointPointCV.x = jointPoint->x * factorX;
jointPointCV.y = jointPoint->y * factorY;
if ( (jointPointCV.x>0) && (jointPointCV.y>0) )
{
cv::circle(img,jointPointCV,3,cv::Scalar(255,0,0),3,8,0);
snprintf(textInfo,512,"%s(%u)",UT_COCOBodyNames[i],i);
cv::putText(img, textInfo , jointPointCV, cv::FONT_HERSHEY_DUPLEX, 0.3, cv::Scalar::all(255), 1,8);
}
}
}
}
int cropAndResizeCVMatToMatchSkeleton(
struct JointEstimator2D * jest,
cv::Mat & frame,
struct Skeletons2DDetected * sk
)
{
int tryForMaximumCrop=0;
int result=0;
jest->crop.frameWidth=frame.size().width;
jest->crop.frameHeight=frame.size().height;
if (sk->numberOfSkeletonsDetected>0)
{
//------------------------------------------------------------------------------------
sk->skeletons[0].bbox2D.minimumX = sk->skeletons[0].body.bbox2D[0].x;
sk->skeletons[0].bbox2D.minimumY = sk->skeletons[0].body.bbox2D[0].y;
convertNormalized2DJointsToOriginalImageCoordinates(
jest,
&sk->skeletons[0].bbox2D.minimumX,
&sk->skeletons[0].bbox2D.minimumY,
0
);
//------------------------------------------------------------------------------------
sk->skeletons[0].bbox2D.maximumX = sk->skeletons[0].body.bbox2D[1].x;
sk->skeletons[0].bbox2D.maximumY = sk->skeletons[0].body.bbox2D[1].y;
convertNormalized2DJointsToOriginalImageCoordinates(
jest,
&sk->skeletons[0].bbox2D.maximumX,
&sk->skeletons[0].bbox2D.maximumY,
0
);
//------------------------------------------------------------------------------------
sk->skeletons[0].bbox2D.populated=1;
}
if (
getBestCropWindow(
tryForMaximumCrop,
&jest->crop.offsetX,
&jest->crop.offsetY,
&jest->crop.croppedDimensionWidth,
&jest->crop.croppedDimensionHeight,
&sk->skeletons[0].bbox2D,
jest->inputWidth2DJointDetector,
jest->inputHeight2DJointDetector,
frame.size().width,
frame.size().height
)
)
{
if (jest->crop.croppedDimensionWidth!=jest->crop.croppedDimensionHeight)
{
fprintf(stderr,"Bounding box produced was not a rectangle (%ux%u)..!\n",jest->crop.croppedDimensionWidth,jest->crop.croppedDimensionHeight);
}
cv::Rect rectangleROI(
jest->crop.offsetX,
jest->crop.offsetY,
jest->crop.croppedDimensionWidth,
jest->crop.croppedDimensionHeight
);
frame = frame(rectangleROI);
sk->skeletons[0].bbox2D.populated=0;
result=1;
}
cv::resize(frame,frame,cv::Size(jest->inputWidth2DJointDetector,jest->inputHeight2DJointDetector));
return result;
}
@@ -0,0 +1,31 @@
#pragma once
#include "opencv2/opencv.hpp"
/** @file webcam.cpp
* @brief This is a simple test file to make sure your camera or video files can be opened using OpenCV
* @author Ammar Qammaz (AmmarkoV)
*/
#include <stdio.h>
#include <vector>
#include "jointEstimator2D.hpp"
#include "../MocapNET2/MocapNETLib2/IO/commonSkeleton.hpp"
using namespace cv;
int visualizeHeatmaps(struct JointEstimator2D * jointEstimator,std::vector<std::vector<float> > heatmapNNOutput,unsigned int frameNumber);
void dj_drawExtractedSkeletons(
cv::Mat img,
struct Skeletons2DDetected * sk,
float factorX,
float factorY
);
int cropAndResizeCVMatToMatchSkeleton(
struct JointEstimator2D * jest,
cv::Mat & frame,
struct Skeletons2DDetected * sk
);
@@ -0,0 +1,157 @@
#include "opencv2/opencv.hpp"
/** @file webcam.cpp
* @brief This is a simple test file to make sure your camera or video files can be opened using OpenCV
* @author Ammar Qammaz (AmmarkoV)
*/
#include <stdio.h>
#include "cameraControl.hpp"
#include "jointEstimator2D.hpp"
#include "visualization.hpp"
#include "../MocapNET2/MocapNETLib2/IO/commonSkeleton.hpp"
using namespace cv;
int main(int argc, char *argv[])
{
unsigned int width = 640;
unsigned int height = 480;
const char * webcam = 0;
int heatmapDebugVisualizations=0;
//------------------------------------------------------
// Parse arguments
//------------------------------------------------------
for (int i=0; i<argc; i++)
{
if (strcmp(argv[i],"--from")==0)
{
if (argc>i+1)
{
webcam = argv[i+1];
}
} else
if (strcmp(argv[i],"--debug")==0)
{
heatmapDebugVisualizations = 1;
} else
if (strcmp(argv[i],"--size")==0)
{
if (argc>i+2)
{
width = atoi(argv[i+1]);
height = atoi(argv[i+2]);
}
}
}
//------------------------------------------------------
VideoCapture cap(webcam); // open the default camera
std::cerr<<"Trying to open webcam ("<<webcam<<" @ "<<width<<","<<height<<") \n";
if (!cap.isOpened()) // check if succeeded to connect to the camera
{
std::cerr<<"Openning camera failed\n";
return 1;
}
if (strstr(webcam,"/dev/video")!=0)
{
cap.set(cv::CAP_PROP_FRAME_WIDTH,width);
cap.set(cv::CAP_PROP_FRAME_HEIGHT,height);
}
struct JointEstimator2D jointEstimator;
if (loadJointEstimator2D(&jointEstimator,JOINT_2D_ESTIMATOR_FORTH,1,0))
{
cv::Mat viewMat = Mat(Size(jointEstimator.inputWidth2DJointDetector,jointEstimator.inputHeight2DJointDetector),CV_8UC3, Scalar(0,0,0));
struct Skeletons2DDetected result= {0};
//cv::namedWindow("Video Input Feed",1);
//cv::moveWindow("Video Input Feed",0,368);
cv::namedWindow("Skeletons",1);
cv::moveWindow("Skeletons",0,0);
unsigned int frameNumber=0;
unsigned long elapsedTime=0;
unsigned int brokenFrames = 0;
for(;;)
{
Mat frame;
cap >> frame;
if ( (frame.size().width>0) && (frame.size().height>0) )
{
if (
!cropAndResizeCVMatToMatchSkeleton(
&jointEstimator,
frame,
&result
)
)
{
fprintf(stderr,"Failed to crop input video\n");
}
//imshow("Video Input Feed", frame);
frame.copyTo(viewMat);
// viewMat.setTo(Scalar(0,0,0));
//This needs to be done to get tensorflow output..
frame.convertTo(frame,CV_32FC3);
//Keep time
unsigned long startTime = GetTickCountMicrosecondsJointEstimator();
std::vector<std::vector<float> > heatmaps = getHeatmaps(
&jointEstimator,
frame.data,
jointEstimator.inputWidth2DJointDetector,
jointEstimator.inputHeight2DJointDetector
);
if (heatmaps.size()>0)
{
if (heatmapDebugVisualizations)
{ visualizeHeatmaps(&jointEstimator,heatmaps,frameNumber); }
estimate2DSkeletonsFromHeatmaps(&jointEstimator,&result,heatmaps);
//Keep time
unsigned long endTime = GetTickCountMicrosecondsJointEstimator();
elapsedTime += endTime - startTime;
dj_drawExtractedSkeletons(
viewMat,
&result,
jointEstimator.inputWidth2DJointDetector,
jointEstimator.inputHeight2DJointDetector
);
imshow("Skeletons", viewMat);
}
++frameNumber;
}
else
{
std::cerr<<"Broken frame.. \n";
++brokenFrames;
}
waitKey(1);
if (brokenFrames>10) { break; }
}
if (frameNumber>0)
{
fprintf(stderr,"Elapsed time is %lu microsconds for %u frames\n",elapsedTime,frameNumber);
fprintf(stderr,"Framerate : %0.2f fps\n",(float) elapsedTime/(1000* frameNumber));
}
}
// the camera will be deinitialized automatically in VideoCapture destructor
return 0;
}
@@ -0,0 +1,24 @@
project( BVHGUI2 )
cmake_minimum_required( VERSION 2.8.13 )
#cmake_minimum_required(VERSION 3.5)
find_package(OpenCV REQUIRED)
INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS})
#set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set(CMAKE_CXX_STANDARD 11)
include_directories(${TENSORFLOW_INCLUDE_ROOT})
add_executable(BVHGUI2 bvhGUI2.cpp
${BVH_SOURCE} )
target_link_libraries(BVHGUI2 rt dl m ${OpenCV_LIBRARIES} ${OPENGL_LIBS} Tensorflow TensorflowFramework MocapNETLib2 )
set_target_properties(BVHGUI2 PROPERTIES DEBUG_POSTFIX "D")
set_target_properties(BVHGUI2 PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
)
@@ -0,0 +1,554 @@
#include "opencv2/opencv.hpp"
/** @file bvhgui.cpp
* @brief This is a simple test file to play with the BVH armature
* #Hands up
* // ./BVHGUI --set 241 290.0 --set 242 80 --set 284 117 --set 283 113
* #Close up hands / face
* // ./BVHGUI --set 1 -70 --set 2 -60 --set 241 290.0 --set 242 80 --set 282 187 --set 283 252 --set 284 112
* @author Ammar Qammaz (AmmarkoV)
*/
#include <stdio.h>
#include "../MocapNETLib2/mocapnet2.hpp"
#include "../MocapNETLib2/IO/bvh.hpp"
#include "../MocapNETLib2/visualization/visualization.hpp"
#include "../MocapNETLib2/visualization/opengl.hpp"
#include <vector>
#include "../../../dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/bvh_loader.h"
#include "../../../dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/edit/bvh_rename.h"
#define NORMAL "\033[0m"
#define BLACK "\033[30m" /* Black */
#define RED "\033[31m" /* Red */
#define GREEN "\033[32m" /* Green */
#define YELLOW "\033[33m" /* Yellow */
using namespace cv;
int visualizeOpenGLEnabled=0;
struct applicationState
{
std::vector<float>bvhConfiguration;
std::vector<std::vector<float> > bvh2DPoints;
unsigned int numberOfBVHMotionValuesPerFrame;
int previousDistance;
int distance;
int positiveRotation;
int negativeRotation;
int previousPositiveRotation;
int previousNegativeRotation;
int rotation;
int selectedMotionChannel,previousSelection;
int visualizationType,previousVisualizationType;
int play;
int stop;
int save;
int copyClipboard;
int frameID;
int numberOfFrames;
int redraw;
};
int controls(cv::Mat & controlMat,struct applicationState * state)
{
cv::imshow("3D Control",controlMat);
cv::createTrackbar("Stop Demo", "3D Control", &state->stop, 1);
cv::createTrackbar("Play", "3D Control", &state->play,1);
cv::createTrackbar("Frame", "3D Control", &state->frameID,state->numberOfFrames);
cv::createTrackbar("Clipboard Pose", "3D Control", &state->copyClipboard, 1);
if (visualizeOpenGLEnabled)
{
cv::createTrackbar("Visualization Type", "3D Control", &state->visualizationType, 1);
}
cv::createTrackbar("Save", "3D Control", &state->save, 1);
cv::createTrackbar("Distance ", "3D Control", &state->distance, 1360);
cv::createTrackbar("Selected Motion Channel", "3D Control", &state->selectedMotionChannel, state->numberOfBVHMotionValuesPerFrame-1);
cv::createTrackbar("Positive Value ", "3D Control", &state->positiveRotation, 360);
cv::createTrackbar("Negative Value ", "3D Control", &state->negativeRotation, 360);
return 1;
}
static void onMouse( int event, int x, int y, int, void* stateUncast)
{
struct applicationState * state = (struct applicationState *) stateUncast;
if( event != EVENT_LBUTTONDOWN )
return;
if (visualizeOpenGLEnabled)
{
clickOpenGLView(x,y,event);
}
else
{
fprintf(stderr,"Unhandled click @ %u,%u \n",x,y);
}
}
int main(int argc, char *argv[])
{
unsigned int visWidth=1920;
unsigned int visHeight=1080;
struct applicationState state;
state.numberOfBVHMotionValuesPerFrame=MOCAPNET_OUTPUT_NUMBER;
state.rotation=0;
state.previousDistance=0;
state.distance=150;
state.numberOfFrames=1;
state.previousSelection=0;
state.selectedMotionChannel=0;
state.visualizationType=0;
state.stop=0;
state.save=0;
state.copyClipboard=0;
state.previousVisualizationType=2;// <- force redraw on first loop
state.redraw=1;
int useBVH=0;
int forcePosition=1; //By default we want the output to be centered..
int forceRotation=0;
float forcedRotation=0;
const char * bvhFilename=0;
struct BVH_MotionCapture bvhMotion= {0};
for (int i=0; i<argc; i++)
{
if (strcmp(argv[i],"--distance")==0)
{
if(argc>i+1)
{
state.distance=atoi(argv[i+1]);
}
}
else if (strcmp(argv[i],"--size")==0)
{
if(argc>i+2)
{
visWidth=atoi(argv[i+1]);
visHeight=atoi(argv[i+2]);
}
}
else if (strcmp(argv[i],"--unconstrained")==0)
{
forcePosition=0;
forceRotation=0;
}
else if (strcmp(argv[i],"--rotation")==0)
{
if(argc>i+1)
{
forceRotation=1;
forcedRotation=atof(argv[i+1]);
state.selectedMotionChannel=4;
state.rotation=atoi(argv[i+1]);
}
}
else if (strcmp(argv[i],"--from")==0)
{
if(argc>i+1)
{
if ( bvh_loadBVH(argv[i+1], &bvhMotion, 1.0) )
{
bvhFilename=argv[i+1];
bvh_renameJointsForCompatibility(&bvhMotion);
state.frameID=0;
state.numberOfFrames=bvhMotion.numberOfFrames;
state.play=1;
state.numberOfBVHMotionValuesPerFrame=bvhMotion.numberOfValuesPerFrame;
useBVH=1;
}
else
{
fprintf(stderr,"File `%s` does not exist\n",argv[i+1]);
return 1;
}
}
}
else
if (strcmp(argv[i],"--opengl")==0)
{
visualizeOpenGLEnabled=1;
state.visualizationType=1;
state.previousVisualizationType=state.visualizationType;
state.redraw=3; //Draw 3 consequtive frames to take care of OGL initialization
state.previousSelection=6;
state.selectedMotionChannel=6;
}
}
if ( !initializeBVHConverter(bvhFilename,visWidth,visHeight,1) )
{
fprintf(stderr,"Failed to initialize BVH code from %s ..\n",bvhFilename);
return 0;
}
if (getBVHNumberOfValuesPerFrame() != state.numberOfBVHMotionValuesPerFrame)
{
fprintf(stderr,"Inconsistency, internal BVH state reports different number of frames compared to external BVH state..\n");
fprintf(stderr,"Internal(%u) External(%u) ..\n",getBVHNumberOfValuesPerFrame(),state.numberOfBVHMotionValuesPerFrame);
fprintf(stderr,"Cannot continue ..\n");
return 0;
}
state.bvhConfiguration.clear();
for (int i=0; i<state.numberOfBVHMotionValuesPerFrame; i++)
{
state.bvhConfiguration.push_back(0.0);
}
state.bvhConfiguration[2]=(float) -1 * state.distance;
fprintf(stderr,"Our bvh configuration will be held in vectors of %lu elements\n",state.bvhConfiguration.size());
fprintf(stderr,"Initializing OpenCV Visualization code ... ");
cv::Mat viewMat = Mat(Size(visWidth,visHeight),CV_8UC3, Scalar(0,0,0));
cv::imshow("BVH", viewMat);
cv::moveWindow("BVH",300,0);
setMouseCallback("BVH", onMouse, (void*) &state );
cv::Mat controlMat = Mat(Size(300,1),CV_8UC3, Scalar(0,0,0));
controls(controlMat,&state);
cv::moveWindow("3D Control",0,0); //y=inputHeight2DJointDetector
fprintf(stderr,"ok!\n");
for (int i=0; i<argc; i++)
{
if (strcmp(argv[i],"--changeJointDimensions")==0)
{
if(argc>i+7)
{
changeJointDimensions(
atof(argv[i+1]),
atof(argv[i+2]),
atof(argv[i+3]),
atof(argv[i+4]),
atof(argv[i+5]),
atof(argv[i+6]),
atof(argv[i+7]),
atof(argv[i+8]),
atof(argv[i+9])
);
}
else
{
fprintf(stderr,"Incorrect number of parameters given..\n");
return 0;
}
}
else if (strcmp(argv[i],"--set")==0)
{
// To focus only on head..
//./BVHGUI2 --set 1 -65 --set 2 -25
// In OpenGL mode
//./BVHGUI2 --set 1 -14.8 --set 2 2 --opengl
// To focus on RHand
// ./BVHGUI2 --from dataset/rhand.bvh --set 2 -45 --set 3 -90 --set 5 -90
if(argc>i+2)
{
unsigned int bvhMotionID = atoi(argv[i+1]);
float bvhMotionValue = atof(argv[i+2]);
unsigned int maximumValidMotionID = getBVHNumberOfValuesPerFrame();
if (useBVH)
{
maximumValidMotionID = bvhMotion.jointHierarchySize;
}
if (bvhMotionID<maximumValidMotionID)
{
char name[512]= {0};
if (useBVH)
{
bvh_getMotionChannelName(&bvhMotion,bvhMotionID,name,512);
bvhMotion.motionValues[bvhMotionID]=bvhMotionValue;
}
else
{
getBVHMotionValueName(bvhMotionID,name,512);
}
fprintf(stderr,YELLOW "joint[%s]=%0.2f\n" NORMAL,name,bvhMotionValue);
state.bvhConfiguration[bvhMotionID]=bvhMotionValue;
if (bvhMotionID==2)
{
state.distance=-1*bvhMotionValue;
}
}
else
{
fprintf(stderr,RED "Set command jID out of bounds ( requested %u , limit is %u )\n" NORMAL,bvhMotionID,maximumValidMotionID);
}
}
else
{
fprintf(stderr,RED "Not enough arguments for set command\n" NORMAL);
}
}
}
while(!state.stop)
{
if (useBVH)
{
unsigned int mIDStart=state.frameID * bvhMotion.numberOfValuesPerFrame;
if (state.bvhConfiguration.size() != state.numberOfBVHMotionValuesPerFrame)
{
fprintf(stderr,"Inconsistency in number of vector allocated and motion values loaded..\n");
}
else if (bvhMotion.numberOfFrames * bvhMotion.numberOfValuesPerFrame != bvhMotion.motionValuesSize)
{
fprintf(stderr,"Inconsistency in number of frames and motion values..\n");
}
else if (mIDStart<bvhMotion.motionValuesSize)
{
for (unsigned int i=0; i<state.numberOfBVHMotionValuesPerFrame; i++)
{
state.bvhConfiguration[i]=bvhMotion.motionValues[(mIDStart+i)%bvhMotion.motionValuesSize];
}
//----------------------------------------------------------------------------------------
if (forcePosition)
{
state.bvhConfiguration[0]=0;
state.bvhConfiguration[1]=0;
state.bvhConfiguration[2]=(float) -1 * state.distance;
}
//----------------------------------------------------------------------------------------
if (forceRotation)
{
state.bvhConfiguration[3]=0;
state.bvhConfiguration[4]=forcedRotation;
state.bvhConfiguration[5]=0;
}
//----------------------------------------------------------------------------------------
if (!state.redraw)
{
state.redraw=1;
}
}
else
{
fprintf(stderr,"Frame %u exceeds allocated number of motion values\n",state.frameID);
}
}
if (state.copyClipboard)
{
char valueStr[10];
char motionVectorStringUnsafe[10000]={0};
snprintf(motionVectorStringUnsafe,10000,"echo \"%0.2f",state.bvhConfiguration[0]);
for (unsigned int i=1; i<state.numberOfBVHMotionValuesPerFrame; i++)
{
snprintf(valueStr,10,",%0.2f",state.bvhConfiguration[i]);
strcat(motionVectorStringUnsafe,valueStr);
}
strcat(motionVectorStringUnsafe,"\" | xclip -selection clipboard");
int i=system(motionVectorStringUnsafe);
if (i!=0)
{
fprintf(stderr,"Failed copying to clipboard.. :( \n");
}
state.copyClipboard=0;
}
if (state.save)
{
std::vector<std::vector<float> > bvhFrames;
bvhFrames.push_back(state.bvhConfiguration);
state.save=0;
controls(controlMat,&state);
writeBVHFile(
"out.bvh",
bvhHeader,
0,// int prependTPose,
bvhFrames
);
fprintf(stderr,GREEN "Saved..\n" NORMAL);
}
if (state.previousDistance!=state.distance)
{
if (!state.redraw)
{
state.redraw=1;
}
state.previousDistance=state.distance;
state.bvhConfiguration[2]=(float) -1 * state.distance;
}
//if (!state.play)
//{
if (state.visualizationType!=state.previousVisualizationType)
{
if (!state.redraw)
{
state.redraw=1;
}
state.previousVisualizationType=state.visualizationType;
}
if (state.selectedMotionChannel!=state.previousSelection)
{
if (!state.redraw)
{
state.redraw=1;
}
state.previousSelection=state.selectedMotionChannel;
state.rotation=state.bvhConfiguration[state.selectedMotionChannel];
if (state.rotation<0)
{
state.negativeRotation=-1*state.rotation;
}
else
{
state.positiveRotation=state.rotation;
}
controls(controlMat,&state);
}
if (state.previousPositiveRotation!=state.positiveRotation)
{
state.previousPositiveRotation=state.positiveRotation;
state.rotation=state.positiveRotation;
}
else if (state.previousNegativeRotation!=state.negativeRotation)
{
state.previousNegativeRotation=state.negativeRotation;
state.rotation=-1* state.negativeRotation;
}
if ( state.bvhConfiguration[state.selectedMotionChannel]!=state.rotation )
{
if (!state.redraw)
{
state.redraw=1;
}
state.bvhConfiguration[state.selectedMotionChannel]=state.rotation;
if (state.rotation<0)
{
state.negativeRotation=-1*state.rotation;
}
else
{
state.positiveRotation=state.rotation;
}
}
// }
if (state.redraw)
{
//fprintf(stderr,"redraw..\n");
memset(viewMat.data,0,visWidth*visHeight*3*sizeof(char));
//cv::Mat * openGLMatForVisualization = 0;
if ( (visualizeOpenGLEnabled) && (state.visualizationType) )
{
//fprintf(stderr,"updateOpenGLView\n");
updateOpenGLView(state.bvhConfiguration);
//fprintf(stderr,"visualizeOpenGL\n");
unsigned int openGLFrameWidth=visWidth,openGLFrameHeight=visHeight;
char * openGLFrame = visualizeOpenGL(&openGLFrameWidth,&openGLFrameHeight);
//=====================================================================
if (openGLFrame!=0)
{
fprintf(stderr,"Got Back an OpenGL frame..!\n");
cv::Mat openGLMat(openGLFrameHeight, openGLFrameWidth, CV_8UC3);
unsigned char * initialPointer = openGLMat.data;
openGLMat.data=(unsigned char * ) openGLFrame;
cv::cvtColor(openGLMat,viewMat,COLOR_RGB2BGR);
openGLMat.data=initialPointer;
}//=====================================================================
else
{
fprintf(stderr,"Failed getting an OpenGL frame..!\n");
}
}
else
{
if (state.bvhConfiguration.size()>0)
{
//fprintf(stderr,"Converting %lu bvh vector\n",state.bvhConfiguration.size());
state.bvh2DPoints = convertBVHFrameTo2DPoints(state.bvhConfiguration);//visWidth,visHeight);
drawSkeleton(viewMat,state.bvh2DPoints,0,0,1);
}
}
char message[1024];
snprintf(message,1024,"Frame : %u / %u",state.frameID,state.numberOfFrames);
cv::putText(viewMat,message, cv::Point(10,30), cv::FONT_HERSHEY_DUPLEX, 0.5, cv::Scalar::all(255), 0.2, 8 );
if (useBVH)
{
char motionChannelName[512];
getBVHMotionValueName(state.selectedMotionChannel,motionChannelName,512);
snprintf(message,1024,"Selected motion channel #%u : %s ( value %0.2f )",state.selectedMotionChannel,motionChannelName,state.bvhConfiguration[state.selectedMotionChannel]);
}
else
{
snprintf(message,1024,"Selected motion channel #%u : %s ( value %0.2f )",state.selectedMotionChannel,MocapNETOutputArrayNames[state.previousSelection],state.bvhConfiguration[state.selectedMotionChannel]);
}
cv::putText(viewMat,message, cv::Point(10,50), cv::FONT_HERSHEY_DUPLEX, 0.5, cv::Scalar::all(255), 0.2, 8 );
if (visualizeOpenGLEnabled)
{
snprintf(message,1024,"OpenGL Model motion channel name : %s",OpenCOLLADANames[state.previousSelection/3]);
cv::putText(viewMat,message, cv::Point(10,70), cv::FONT_HERSHEY_DUPLEX, 0.5, cv::Scalar::all(255), 0.2, 8 );
}
if (state.redraw>=1)
{
--state.redraw;
}
//state.redraw=0;
}
imshow("BVH", viewMat);
waitKey(15);
if (useBVH)
{
if (state.play)
{
++state.frameID;
state.frameID = state.frameID % state.numberOfFrames;
}
}
}
// the camera will be deinitialized automatically in VideoCapture destructor
return 0;
}
@@ -0,0 +1,16 @@
project( BVHTemplate )
cmake_minimum_required( VERSION 2.8.7 )
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/modules ${CMAKE_MODULE_PATH})
add_executable(BVHTemplate main.c ${BVH_SOURCE} )
target_link_libraries(BVHTemplate rt m pthread )
#add_dependencies(BVHTemplate OGLRendererSandbox)
set_target_properties(BVHTemplate PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
)
@@ -0,0 +1,29 @@
project( CSVClusterPlot )
cmake_minimum_required( VERSION 2.8.13 )
#cmake_minimum_required(VERSION 3.5)
find_package(OpenCV REQUIRED)
INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS})
#set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set(CMAKE_CXX_STANDARD 11)
include_directories(${TENSORFLOW_INCLUDE_ROOT})
add_executable(
CSVClusterPlot
csvClusterPlot.cpp
perform2DClustering.cpp
perform3DClustering.cpp
${BVH_SOURCE}
)
target_link_libraries(CSVClusterPlot rt dl m ${OpenCV_LIBRARIES} ${OPENGL_LIBS} Tensorflow TensorflowFramework MocapNETLib2 )
#set_target_properties(CSVClusterPlot PROPERTIES DEBUG_POSTFIX "D")
set_target_properties(CSVClusterPlot PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
)
@@ -0,0 +1,759 @@
#include "opencv2/opencv.hpp"
/** @file csvClusterPlot.cpp
* @brief
* @author Ammar Qammaz (AmmarkoV)
*/
#include <stdio.h>
#include <sys/stat.h> //mkdir
#include "../MocapNETLib2/mocapnet2.hpp"
#include "../MocapNETLib2/IO/bvh.hpp"
#include "../MocapNETLib2/visualization/visualization.hpp"
#include "../MocapNETLib2/visualization/opengl.hpp"
#include "../MocapNETLib2/IO/csvRead.hpp"
#include <vector>
#include "../../../dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/bvh_loader.h"
#include "../../../dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/edit/bvh_filter.h"
#include "../../../dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/edit/bvh_rename.h"
#include "../../../dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/edit/bvh_randomize.h"
#include "perform2DClustering.hpp"
#include "perform3DClustering.hpp"
//#include <stdint.h>
using namespace cv;
int visualizeOpenGLEnabled=0;
#define BOOST_CONTRAST 2.0
char MocapNET1List[]="src/MocapNET2/CSVClusterPlot/listOfFilesToClusterMocapNET1";
char defaultList[]="src/MocapNET2/CSVClusterPlot/listOfFilesToCluster";
const char * perturbList1[] =
{
" ",
"rshoulder",
"lshoulder",
"rhip",
"lhip"
};
const char * perturbList2[] =
{
" ",
"rhand",
"relbow",
"lelbow",
"lhand",
"lknee",
"rknee",
"lfoot",
"rfoot"
};
const char * perturbList3[] =
{
" ",
"abdomen",
"chest"
};
/*
#define rotationSetting 0"
#define handToCloseHipMin "45"
#define handToCloseHipMax "90"
#define handToFarHipMin "100"
#define handToFarHipMax "160"
#define handToHandMin "150"
#define handToHandMax "250"
*/
#define rotationSetting "90"
#define handToCloseHipMin "0"
#define handToCloseHipMax "120"
#define handToFarHipMin "0"
#define handToFarHipMax "120"
#define handToHandMin "0"
#define handToHandMax "150"
const char * removeNeutralPosesRules[] =
{
"0", // 0 | Move Armature to 0 X Position
"0", // 1 | Move Armature to 0 Y Position
"-130.0", // 2 | Move Armature to -130.0 Z Position
"0", // 3 | Rotate Armature to 0deg X Rotation
rotationSetting, // 4 | Rotate Armature to 0deg Y Rotation
"0", // 5 | Rotate Armature to 0deg Z Rotation
//--------------------------------------------------------------------------
"1920", // 6 | Virtual 2D Rendering Width
"1080",// 7 | Virtual 2D Rendering Height
"570.7", // 8 | Virtual 2D Rendering Focal Length X
"570.3", // 9 | Virtual 2D Rendering Focal Length Y
//--------------------------------------------------------------------------
"6", // 10 | Number of joint rules
//--------------------------------------------------------------------------
"rhand", // 11 | Joint A
"lhip", // 12 | Joint B
handToFarHipMin, // 13 | Minimum Acceptable 2D Distance
handToFarHipMax, // 14 | Maximum Acceptable 2D Distance
"rhand", // 15 | Joint A
"rhip", // 16| Joint B
handToCloseHipMin, // 17 | Minimum Acceptable 2D Distance
handToCloseHipMax, // 18 | Maximum Acceptable 2D Distance
"rhand", // 19 | Joint A
"lhand", // 20 | Joint B
handToHandMin, // 21 | Minimum Acceptable 2D Distance
handToHandMax, // 22 | Maximum Acceptable 2D Distance
//--------------------------------------------------------------------------
"lhand", // 23 | Joint A
"rhip", // 24| Joint B
handToFarHipMin, // 25 | Minimum Acceptable 2D Distance
handToFarHipMax, // 26 | Maximum Acceptable 2D Distance
"lhand", // 27 | Joint A
"lhip", // 28| Joint B
handToCloseHipMin, // 29 | Minimum Acceptable 2D Distance
handToCloseHipMax, // 30 | Maximum Acceptable 2D Distance
"lhand", // 31 | Joint A
"rhand", // 32 | Joint B
handToHandMin, // 33 | Minimum Acceptable 2D Distance
handToHandMax // 34 | Maximum Acceptable 2D Distance
};
void convertHeatmapValueToRGB(float heatmap,unsigned char * R,unsigned char * G,unsigned char * B)
{
float r = fminf(1.0f, (fmaxf(0.5f, heatmap) - 0.5f) * 6.0f);
float g = fminf(1.0f, heatmap * 3.0f) - fminf(1.0f, fmaxf(0.0f, heatmap - 0.666f) * 3.0f);
float b = fmaxf(0.0f, 1.0f - fmaxf(0.0f, heatmap - 0.333f) * 6.0f);
if (heatmap==0.0)
{
r=0.0;
g=0.0;
b=0.0;
}
else if (heatmap<0.1)
{
r=0.0;
g=0.0;
b=0.3+10*heatmap;
if (b>=1.0)
{
b=1.0;
}
}
else if (heatmap>=1.0) //Cap
{
if (heatmap>=2.0)
{
r=1.0;
g=0.0;
b=1.0; //Final Limit
}
else
{
r=1.0 ;
g=0.0;
b=heatmap-1.0;
}
}
r=r*255.0;
g=g*255.0;
b=b*255.0;
*R = (unsigned char) r;
*G = (unsigned char) g;
*B = (unsigned char) b;
}
int draw2DClustering(cv::Mat &viewMat,struct BVH_MotionCapture * bvhMotion,std::vector<std::vector<float> > aPose,struct applicationState * state,const char * line, char * videoPath,unsigned int width,unsigned int height)
{
char buffer[1024]= {0};
memset(viewMat.data,0,width*height*3*sizeof(char));
/*
if ( state->maxAccumulatedSample > state->accumulatedSamples )
{
state->maxAccumulatedSample=state->accumulatedSamples;
}*/
unsigned char R,G,B;
//------------------------------------------------------------------------------
for (int y=0; y<height; y++)
{
for (int x=0; x<width; x++)
{
float heatmap = (float) state->accumulatedImage[y*width+x] / state->maxAccumulatedSample;
heatmap*=BOOST_CONTRAST;
convertHeatmapValueToRGB(heatmap,&R,&G,&B);
unsigned int pos=(y*width*3) + x*3;
viewMat.data[pos++]=B;
viewMat.data[pos++]=G;
viewMat.data[pos]=R;
}
//add a sidebar with the colors legend..
for (int x=width-5; x<width; x++)
{
float heatmapScaleValue = 1.0 - ((float) y / height);
heatmapScaleValue*=BOOST_CONTRAST; //;
convertHeatmapValueToRGB(heatmapScaleValue,&R,&G,&B);
unsigned int pos=(y*width*3) + x*3;
viewMat.data[pos++]=B;
viewMat.data[pos++]=G;
viewMat.data[pos]=R;
}
if (y%50==0)
{
float heatmapScaleValue = 1.0 - ((float) y / height);
heatmapScaleValue*=state->maxAccumulatedSample;
snprintf(buffer,1024,"%0.0f",heatmapScaleValue);
cv::putText(viewMat,buffer, cv::Point(width-50,y), cv::FONT_HERSHEY_DUPLEX, 0.3, cv::Scalar::all(255), 0.2, 8 );
}
}
drawSkeleton(viewMat,aPose,0,0,1);
snprintf(buffer,1024,"%lu accumulated samples, max heatmap value = %lu",state->accumulatedSamples,state->maxAccumulatedSample);
cv::putText(viewMat,buffer, cv::Point(10,30), cv::FONT_HERSHEY_DUPLEX, 0.5, cv::Scalar::all(255), 0.2, 8 );
snprintf(buffer,1024,"%s added with %u samples",line,bvhMotion->numberOfFrames);
cv::putText(viewMat,buffer, cv::Point(10,50), cv::FONT_HERSHEY_DUPLEX, 0.5, cv::Scalar::all(255), 0.2, 8 );
if (videoPath!=0)
{
snprintf(buffer,1024,"Label : %s ",videoPath);
cv::putText(viewMat,buffer, cv::Point(10,70), cv::FONT_HERSHEY_DUPLEX, 0.5, cv::Scalar::all(255), 0.2, 8 );
}
return 1;
}
int draw3DClustering(cv::Mat &viewMat,struct clusteringOf3DPoses * state,unsigned int width,unsigned int height,unsigned int depth)
{
memset(viewMat.data,0,width*height*3*sizeof(char));
unsigned char R,G,B;
//------------------------------------------------------------------------------
for (int y=0; y<height; y++)
{
for (int x=0; x<width; x++)
{
unsigned int hits=0;
for (int z=0; z<depth; z++)
{
unsigned long memoryLocation = (unsigned long) (z*width*height) + (y*width)+ x;
hits+=state->space[memoryLocation].element;
}
float heatmap = (float) hits / (depth*255);
heatmap*=10;
convertHeatmapValueToRGB(heatmap,&R,&G,&B);
unsigned int pos=(y*width*3) + x*3;
viewMat.data[pos++]=B;
viewMat.data[pos++]=G;
viewMat.data[pos]=R;
}
}
return 1;
}
int main(int argc, char *argv[])
{
struct clusteringOf3DPoses * state3D = (struct clusteringOf3DPoses *) malloc(sizeof(struct clusteringOf3DPoses) );
if (state3D==0)
{
fprintf(stderr,"Could not allocate enough memory to start csvClusterPlot..\n");
return 1;
}
memset(state3D,0,sizeof(struct clusteringOf3DPoses));
struct applicationState * state = (struct applicationState *) malloc(sizeof(struct applicationState) );
if (state==0)
{
fprintf(stderr,"Could not allocate enough memory to start csvClusterPlot..\n");
free(state3D);
return 1;
}
state->rotation=0;
state->previousSelection=0;
state->selectedJoint=0;
state->visualizationType=0;
state->stop=0;
state->save=0;
state->previousVisualizationType=2;// <- force redraw on first loop
state->redraw=1;
state->maxAccumulatedSample= 0;
int randomize=0;
int filterPoses=0;
int go3DMode=0;
unsigned int visualizationFrameNumber=0;
int saveVideo=0;
char * videoPath=0;
char videoFrameFinalFilename[512]= {0};
float skeletonDistance=-160;
unsigned int WIDTH = 1000;
unsigned int HEIGHT = 1000;
unsigned int DEPTH = 1000;
char * selectedSource = defaultList;
for (int i=0; i<argc; i++)
{
if (strcmp(argv[i],"--mocapnet1")==0)
{
selectedSource=MocapNET1List;
}
else if (strcmp(argv[i],"--saveVideo")==0)
{
if(argc>i+1)
{
videoPath=argv[i+1];
saveVideo=1;
mkdir(videoPath,0777);
}
}
else if (strcmp(argv[i],"--from")==0)
{
if(argc>i+1)
{
selectedSource=argv[i+1];
}
}
else if (strcmp(argv[i],"--rotation")==0)
{
if(argc>i+1)
{
state->rotation=atoi(argv[i+1]);
}
}
else if (strcmp(argv[i],"--randomize")==0)
{
randomize=1;
}
else if (strcmp(argv[i],"--filter")==0)
{
filterPoses=1;
}
else if (strcmp(argv[i],"--size")==0)
{
//To produce higher resolution heatmap..
// ./CSVClusterPlot --rotation 90 --onlyrhand --size 1920 1080 --distance -130 --filter
if(argc>i+2)
{
WIDTH=atoi(argv[i+1]);
HEIGHT=atoi(argv[i+2]);
}
}
else if (strcmp(argv[i],"--depth")==0)
{
if(argc>i+1)
{
DEPTH=atoi(argv[i+1]);
}
}
else if (strcmp(argv[i],"--distance")==0)
{
if(argc>i+1)
{
skeletonDistance=atof(argv[i+1]);
}
}
}
state->accumulatedImage = (unsigned long * ) malloc( (WIDTH) * (HEIGHT) * sizeof (unsigned long) );
if (state->accumulatedImage==0)
{
fprintf(stderr,"Could not allocate enough memory to start csvClusterPlot..\n");
free(state);
free(state3D);
return 1;
}
for (int y=0; y<HEIGHT; y++)
{
for (int x=0; x<WIDTH; x++)
{
state->accumulatedImage[y*WIDTH+x]=0;
}
}
state->accumulatedSamples=0;;
cv::Mat viewMat = Mat(Size(WIDTH,HEIGHT),CV_8UC3, Scalar(0,0,0));
namedWindow("BVH",1);
//controls(controlMat,&state);
//cv::moveWindow("3D Control",0,0); //y=inputHeight2DJointDetector
cv::moveWindow("BVH",0,0);
initializeBVHConverter(0,WIDTH,HEIGHT,1);
//------------------------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------------------
std::vector<char> activeJoints;
activeJoints.clear();
for (int i=0; i<MOCAPNET_OUTPUT_NUMBER; i++)
{
activeJoints.push_back(1);
}
activeJoints[ getBVHJointIDFromJointName("hip")]=0;
activeJoints[ getBVHJointIDFromJointName("lThigh")]=0;
activeJoints[ getBVHJointIDFromJointName("rThigh")]=0;
activeJoints[ getBVHJointIDFromJointName("lButtock")]=0;
activeJoints[ getBVHJointIDFromJointName("rButtock")]=0;
activeJoints[ getBVHJointIDFromJointName("abdomen")]=0;
//------------------------------------------------------------------------------------------------------------------
for (int i=0; i<argc; i++)
{
if (strcmp(argv[i],"--3d")==0)
{
//Sample use
// ./CSVClusterPlot --3d rHand --size 500 500 --depth 500 --distance -250
// ./CSVClusterPlot --3d rHand --size 256 256 --depth 256 --distance -500
go3DMode=1;
for (int z=0; z<MOCAPNET_OUTPUT_NUMBER; z++)
{
activeJoints[z]=0;
}
//activeJoints[ getBVHJointIDFromJointName("rForeArm")]=1;
if(argc>i+1)
{
activeJoints[ getBVHJointIDFromJointName(argv[i+1])]=1;
}
else
{
fprintf(stderr,"We need a limb to focus on e.g. rHand <- capitalization is imporant..\n");
}
}
else if (strcmp(argv[i],"--onlylimbs")==0)
{
for (int z=0; z<MOCAPNET_OUTPUT_NUMBER; z++)
{
activeJoints[z]=0;
}
activeJoints[ getBVHJointIDFromJointName("rShin")]=1;
activeJoints[ getBVHJointIDFromJointName("rFoot")]=1;
activeJoints[ getBVHJointIDFromJointName("lShin")]=1;
activeJoints[ getBVHJointIDFromJointName("lFoot")]=1;
activeJoints[ getBVHJointIDFromJointName("neck")]=1;
activeJoints[ getBVHJointIDFromJointName("head")]=1;
activeJoints[ getBVHJointIDFromJointName("lForeArm")]=1;
activeJoints[ getBVHJointIDFromJointName("lHand")]=1;
activeJoints[ getBVHJointIDFromJointName("rForeArm")]=1;
activeJoints[ getBVHJointIDFromJointName("rHand")]=1;
}
else if (strcmp(argv[i],"--onlyrhand")==0)
{
for (int z=0; z<MOCAPNET_OUTPUT_NUMBER; z++)
{
activeJoints[z]=0;
}
activeJoints[ getBVHJointIDFromJointName("rForeArm")]=1;
activeJoints[ getBVHJointIDFromJointName("rHand")]=1;
}
else if (strcmp(argv[i],"--onlylhand")==0)
{
for (int z=0; z<MOCAPNET_OUTPUT_NUMBER; z++)
{
activeJoints[z]=0;
}
activeJoints[ getBVHJointIDFromJointName("lForeArm")]=1;
activeJoints[ getBVHJointIDFromJointName("lHand")]=1;
}
else if (strcmp(argv[i],"--onlyrleg")==0)
{
for (int z=0; z<MOCAPNET_OUTPUT_NUMBER; z++)
{
activeJoints[z]=0;
}
activeJoints[ getBVHJointIDFromJointName("rShin")]=1;
activeJoints[ getBVHJointIDFromJointName("rFoot")]=1;
}
else if (strcmp(argv[i],"--onlylleg")==0)
{
for (int z=0; z<MOCAPNET_OUTPUT_NUMBER; z++)
{
activeJoints[z]=0;
}
activeJoints[ getBVHJointIDFromJointName("lShin")]=1;
activeJoints[ getBVHJointIDFromJointName("lFoot")]=1;
}
}
//------------------------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------------------
state->redraw=1;
srand(time(NULL));
//find dataset/MotionCapture/ -type f -name "*.bvh" > src/MocapNET2/CSVClusterPlot/listOfFilesToCluster
struct BVH_MotionCapture bvhMotion= {0};
char buffer[1024]= {0};
FILE * fp =0;
fp=fopen(selectedSource,"r");
if (fp==0)
{
fprintf(stderr,"Cannot open list of files to cluster\n");
free(state->accumulatedImage);
free(state);
free(state3D);
return 0;
}
char * line = NULL;
size_t len = 0;
ssize_t read;
unsigned int numberOfLinesProcessed=0;
unsigned long numberOfPosesLoaded=0;
while ((read = getline(&line, &len, fp)) != -1)
{
if (line!=0)
{
++numberOfLinesProcessed;
//-----------------------------------------------------------------
int lineLength=strlen(line);
if (lineLength>0)
{
if (line[lineLength-1]==10)
{
line[lineLength-1]=0;
}
if (line[lineLength-1]==13)
{
line[lineLength-1]=0;
}
}
if (lineLength>1)
{
if (line[lineLength-2]==10)
{
line[lineLength-2]=0;
}
if (line[lineLength-2]==13)
{
line[lineLength-2]=0;
}
}
//-----------------------------------------------------------------
fprintf(stderr,"Loading `%s`\n",line);
if ( bvh_loadBVH(line, &bvhMotion, 1.0) )
{
numberOfPosesLoaded+=bvhMotion.numberOfFrames;
bvh_renameJointsForCompatibility(&bvhMotion);
if (filterPoses)
{
filterOutPosesThatAreCloseToRules(&bvhMotion,35,removeNeutralPosesRules);
}
if (randomize)
{
//--perturbJointAngles 4 38.0 rshoulder lshoulder rhip lhip --perturbJointAngles 8 10.0 rhand relbow lelbow lhand lknee rknee lfoot rfoot
bvh_PerturbJointAngles(
&bvhMotion,
4,
38.0,
perturbList1,
0
);
bvh_PerturbJointAngles(
&bvhMotion,
8,
10.0,
perturbList2,
0
);
bvh_PerturbJointAngles(
&bvhMotion,
2,
10.0,
perturbList3,
0
);
}
if (go3DMode)
{
//3D Voxel Clustering Mode
std::vector<std::vector<float> > aPose = collect3DPoses(state3D,activeJoints,&bvhMotion,skeletonDistance,WIDTH,HEIGHT,DEPTH);
//memset(viewMat.data,0,WIDTH*HEIGHT*3*sizeof(char));
if (numberOfLinesProcessed%5==0)
{ draw3DClustering(viewMat,state3D,WIDTH,HEIGHT,DEPTH); }
drawSkeleton(viewMat,aPose,0,0,1);
}
else
{
//2D Projection Mode
std::vector<std::vector<float> > aPose = collectPoses(state,activeJoints,&bvhMotion,skeletonDistance,WIDTH,HEIGHT);
if ( aPose.size()>0 )
{
state->redraw=1;
}
if (state->redraw)
{
draw2DClustering(viewMat,&bvhMotion,aPose,state,line,videoPath,WIDTH,HEIGHT);
state->redraw=1;
}
}
fprintf(stderr,"Done with %s\n",line);
bvh_free(&bvhMotion);
fprintf(stderr,"deallocation complete..\n");
imshow("BVH", viewMat);
if (saveVideo)
{
snprintf(videoFrameFinalFilename,512,"%s/colorFrame_0_%05u.png",videoPath,visualizationFrameNumber);
imwrite(videoFrameFinalFilename,viewMat);
}
++visualizationFrameNumber;
waitKey(1);
}
else
{
fprintf(stderr,"Failed to load %s \n",line);
}
}//Line not empty
} //New line read
if (line!=0)
{
free(line);
line=0;
len=0;
}
fclose(fp);
// the camera will be deinitialized automatically in VideoCapture destructor
if (go3DMode)
{
fprintf(stderr,"3D clustering accumulated %lu samples \n",state3D->accumulatedSamples);
if (state3D->fp!=0)
{
fclose(state3D->fp);
}
//------------------------------------------------------------------------
int i=system("cat dataset/header.bvh > filteredPoses.bvh");
if (i!=0) { fprintf(stderr,"Could not use header for filterPoses.bvh\n"); }
//------------------------------------------------------------------------
i=system("echo \"MOTION\" >> filteredPoses.bvh");
if (i!=0) { fprintf(stderr,"Could not add MOTION to filterPoses.bvh\n"); }
//------------------------------------------------------------------------
i=system("echo \"Frames: `cat filteredPoses.bvhm | wc -l`\" >> filteredPoses.bvh");
if (i!=0) { fprintf(stderr,"Could not add number of poses\n"); }
//------------------------------------------------------------------------
i=system("echo \"Frame Time: 0.04\" >> filteredPoses.bvh");
if (i!=0) { fprintf(stderr,"Could not add frame time\n"); }
//------------------------------------------------------------------------
i=system("cat filteredPoses.bvhm >> filteredPoses.bvh");
if (i!=0) { fprintf(stderr,"Could not add motion frames\n"); }
//------------------------------------------------------------------------
i=system("rm filteredPoses.bvhm");
if (i!=0) { fprintf(stderr,"Could not remove intermediate motion frames\n"); }
//------------------------------------------------------------------------
}
free(state);
free(state3D);
fprintf(stderr,"Done overlaying %lu poses..!\n",numberOfPosesLoaded);
imshow("BVH", viewMat);
imwrite("csvCluster.png",viewMat);
if (saveVideo)
{
//Low-Res video encoding
//snprintf(videoFrameFinalFilename,512,"ffmpeg -framerate 30 -i %s/colorFrame_0_%%05d.png -y -r 30 -threads 8 -crf 9 -pix_fmt yuv420p %s/video.mp4",videoPath,videoPath);
//High-Res video encoding
snprintf(videoFrameFinalFilename,512,"ffmpeg -framerate 30 -i %s/colorFrame_0_%%05d.png -s 1200x720 -y -r 30 -pix_fmt yuv420p -threads 8 %s/video.mp4",videoPath,videoPath);
int i=system(videoFrameFinalFilename);
if (i==0)
{
fprintf(stderr,"Successfully wrote video file %s/video.mp4.. \n",videoPath);
}
else
{
fprintf(stderr,"Failed to write a video file %s/video.mp4.. \n",videoPath);
}
fprintf(stderr,"Since we wanted to output video this is probably a scripted run, will not wait for a keystroke..\n");
waitKey(1);
}
else
{
waitKey(0);
}
free(state->accumulatedImage);
free(state);
free(state3D);
return 0;
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,282 @@
dataset/MotionCapture/01/01_02.bvh
dataset/MotionCapture/01/01_03.bvh
dataset/MotionCapture/01/01_05.bvh
dataset/MotionCapture/01/01_06.bvh
dataset/MotionCapture/01/01_07.bvh
dataset/MotionCapture/01/01_08.bvh
dataset/MotionCapture/01/01_09.bvh
dataset/MotionCapture/01/01_10.bvh
dataset/MotionCapture/01/01_11.bvh
dataset/MotionCapture/01/01_12.bvh
dataset/MotionCapture/01/01_13.bvh
dataset/MotionCapture/01/01_14.bvh
dataset/MotionCapture/02/02_01.bvh
dataset/MotionCapture/02/02_02.bvh
dataset/MotionCapture/02/02_03.bvh
dataset/MotionCapture/02/02_04.bvh
dataset/MotionCapture/02/02_05.bvh
dataset/MotionCapture/02/02_06.bvh
dataset/MotionCapture/02/02_07.bvh
dataset/MotionCapture/02/02_08.bvh
dataset/MotionCapture/02/02_09.bvh
dataset/MotionCapture/02/02_10.bvh
dataset/MotionCapture/03/03_01.bvh
dataset/MotionCapture/03/03_02.bvh
dataset/MotionCapture/03/03_03.bvh
dataset/MotionCapture/03/03_04.bvh
dataset/MotionCapture/05/05_01.bvh
dataset/MotionCapture/05/05_02.bvh
dataset/MotionCapture/05/05_03.bvh
dataset/MotionCapture/05/05_04.bvh
dataset/MotionCapture/05/05_05.bvh
dataset/MotionCapture/05/05_06.bvh
dataset/MotionCapture/05/05_07.bvh
dataset/MotionCapture/05/05_08.bvh
dataset/MotionCapture/05/05_09.bvh
dataset/MotionCapture/05/05_10.bvh
dataset/MotionCapture/05/05_11.bvh
dataset/MotionCapture/05/05_12.bvh
dataset/MotionCapture/05/05_13.bvh
dataset/MotionCapture/05/05_14.bvh
dataset/MotionCapture/05/05_15.bvh
dataset/MotionCapture/05/05_16.bvh
dataset/MotionCapture/05/05_17.bvh
dataset/MotionCapture/05/05_18.bvh
dataset/MotionCapture/05/05_19.bvh
dataset/MotionCapture/05/05_20.bvh
dataset/MotionCapture/06/06_01.bvh
dataset/MotionCapture/06/06_02.bvh
dataset/MotionCapture/06/06_03.bvh
dataset/MotionCapture/06/06_04.bvh
dataset/MotionCapture/06/06_05.bvh
dataset/MotionCapture/06/06_06.bvh
dataset/MotionCapture/06/06_07.bvh
dataset/MotionCapture/06/06_08.bvh
dataset/MotionCapture/06/06_09.bvh
dataset/MotionCapture/06/06_10.bvh
dataset/MotionCapture/06/06_11.bvh
dataset/MotionCapture/06/06_12.bvh
dataset/MotionCapture/06/06_13.bvh
dataset/MotionCapture/06/06_14.bvh
dataset/MotionCapture/06/06_15.bvh
dataset/MotionCapture/07/07_01.bvh
dataset/MotionCapture/07/07_02.bvh
dataset/MotionCapture/07/07_03.bvh
dataset/MotionCapture/07/07_04.bvh
dataset/MotionCapture/07/07_05.bvh
dataset/MotionCapture/07/07_06.bvh
dataset/MotionCapture/07/07_07.bvh
dataset/MotionCapture/07/07_08.bvh
dataset/MotionCapture/07/07_09.bvh
dataset/MotionCapture/07/07_10.bvh
dataset/MotionCapture/07/07_11.bvh
dataset/MotionCapture/07/07_12.bvh
dataset/MotionCapture/08/08_01.bvh
dataset/MotionCapture/08/08_02.bvh
dataset/MotionCapture/08/08_03.bvh
dataset/MotionCapture/08/08_04.bvh
dataset/MotionCapture/08/08_05.bvh
dataset/MotionCapture/08/08_06.bvh
dataset/MotionCapture/08/08_07.bvh
dataset/MotionCapture/08/08_08.bvh
dataset/MotionCapture/08/08_09.bvh
dataset/MotionCapture/08/08_10.bvh
dataset/MotionCapture/08/08_11.bvh
dataset/MotionCapture/09/09_01.bvh
dataset/MotionCapture/09/09_02.bvh
dataset/MotionCapture/09/09_03.bvh
dataset/MotionCapture/09/09_04.bvh
dataset/MotionCapture/09/09_05.bvh
dataset/MotionCapture/09/09_06.bvh
dataset/MotionCapture/09/09_07.bvh
dataset/MotionCapture/09/09_08.bvh
dataset/MotionCapture/09/09_09.bvh
dataset/MotionCapture/09/09_10.bvh
dataset/MotionCapture/09/09_11.bvh
dataset/MotionCapture/09/09_12.bvh
dataset/MotionCapture/10/10_01.bvh
dataset/MotionCapture/10/10_02.bvh
dataset/MotionCapture/10/10_03.bvh
dataset/MotionCapture/10/10_04.bvh
dataset/MotionCapture/10/10_05.bvh
dataset/MotionCapture/10/10_06.bvh
dataset/MotionCapture/13/13_01.bvh
dataset/MotionCapture/13/13_02.bvh
dataset/MotionCapture/13/13_03.bvh
dataset/MotionCapture/13/13_04.bvh
dataset/MotionCapture/13/13_05.bvh
dataset/MotionCapture/13/13_06.bvh
dataset/MotionCapture/13/13_07.bvh
dataset/MotionCapture/13/13_08.bvh
dataset/MotionCapture/13/13_09.bvh
dataset/MotionCapture/13/13_10.bvh
dataset/MotionCapture/13/13_11.bvh
dataset/MotionCapture/13/13_12.bvh
dataset/MotionCapture/13/13_13.bvh
dataset/MotionCapture/13/13_14.bvh
dataset/MotionCapture/13/13_15.bvh
dataset/MotionCapture/13/13_16.bvh
dataset/MotionCapture/13/13_19.bvh
dataset/MotionCapture/13/13_20.bvh
dataset/MotionCapture/13/13_21.bvh
dataset/MotionCapture/13/13_22.bvh
dataset/MotionCapture/13/13_24.bvh
dataset/MotionCapture/13/13_25.bvh
dataset/MotionCapture/13/13_26.bvh
dataset/MotionCapture/13/13_27.bvh
dataset/MotionCapture/13/13_28.bvh
dataset/MotionCapture/13/13_29.bvh
dataset/MotionCapture/13/13_30.bvh
dataset/MotionCapture/13/13_31.bvh
dataset/MotionCapture/13/13_32.bvh
dataset/MotionCapture/13/13_33.bvh
dataset/MotionCapture/13/13_34.bvh
dataset/MotionCapture/13/13_35.bvh
dataset/MotionCapture/13/13_36.bvh
dataset/MotionCapture/13/13_37.bvh
dataset/MotionCapture/13/13_38.bvh
dataset/MotionCapture/13/13_39.bvh
dataset/MotionCapture/13/13_40.bvh
dataset/MotionCapture/13/13_41.bvh
dataset/MotionCapture/13/13_42.bvh
dataset/MotionCapture/14/14_01.bvh
dataset/MotionCapture/14/14_04.bvh
dataset/MotionCapture/14/14_05.bvh
dataset/MotionCapture/14/14_06.bvh
dataset/MotionCapture/14/14_07.bvh
dataset/MotionCapture/14/14_08.bvh
dataset/MotionCapture/14/14_09.bvh
dataset/MotionCapture/14/14_10.bvh
dataset/MotionCapture/14/14_11.bvh
dataset/MotionCapture/14/14_12.bvh
dataset/MotionCapture/14/14_13.bvh
dataset/MotionCapture/14/14_14.bvh
dataset/MotionCapture/14/14_15.bvh
dataset/MotionCapture/14/14_16.bvh
dataset/MotionCapture/14/14_17.bvh
dataset/MotionCapture/14/14_18.bvh
dataset/MotionCapture/14/14_19.bvh
dataset/MotionCapture/14/14_20.bvh
dataset/MotionCapture/14/14_21.bvh
dataset/MotionCapture/14/14_22.bvh
dataset/MotionCapture/14/14_24.bvh
dataset/MotionCapture/14/14_25.bvh
dataset/MotionCapture/14/14_26.bvh
dataset/MotionCapture/14/14_27.bvh
dataset/MotionCapture/14/14_28.bvh
dataset/MotionCapture/14/14_29.bvh
dataset/MotionCapture/14/14_30.bvh
dataset/MotionCapture/14/14_31.bvh
dataset/MotionCapture/14/14_32.bvh
dataset/MotionCapture/14/14_33.bvh
dataset/MotionCapture/14/14_34.bvh
dataset/MotionCapture/14/14_35.bvh
dataset/MotionCapture/14/14_36.bvh
dataset/MotionCapture/14/14_37.bvh
dataset/MotionCapture/15/15_01.bvh
dataset/MotionCapture/15/15_02.bvh
dataset/MotionCapture/15/15_03.bvh
dataset/MotionCapture/15/15_04.bvh
dataset/MotionCapture/15/15_05.bvh
dataset/MotionCapture/15/15_06.bvh
dataset/MotionCapture/15/15_07.bvh
dataset/MotionCapture/15/15_08.bvh
dataset/MotionCapture/15/15_09.bvh
dataset/MotionCapture/15/15_10.bvh
dataset/MotionCapture/15/15_11.bvh
dataset/MotionCapture/15/15_12.bvh
dataset/MotionCapture/15/15_13.bvh
dataset/MotionCapture/15/15_14.bvh
dataset/MotionCapture/16/16_01.bvh
dataset/MotionCapture/16/16_02.bvh
dataset/MotionCapture/16/16_03.bvh
dataset/MotionCapture/16/16_04.bvh
dataset/MotionCapture/16/16_05.bvh
dataset/MotionCapture/16/16_06.bvh
dataset/MotionCapture/16/16_07.bvh
dataset/MotionCapture/16/16_08.bvh
dataset/MotionCapture/16/16_09.bvh
dataset/MotionCapture/16/16_10.bvh
dataset/MotionCapture/16/16_11.bvh
dataset/MotionCapture/16/16_12.bvh
dataset/MotionCapture/16/16_13.bvh
dataset/MotionCapture/16/16_14.bvh
dataset/MotionCapture/16/16_15.bvh
dataset/MotionCapture/16/16_16.bvh
dataset/MotionCapture/16/16_17.bvh
dataset/MotionCapture/16/16_18.bvh
dataset/MotionCapture/16/16_19.bvh
dataset/MotionCapture/16/16_20.bvh
dataset/MotionCapture/16/16_21.bvh
dataset/MotionCapture/16/16_22.bvh
dataset/MotionCapture/16/16_23.bvh
dataset/MotionCapture/16/16_24.bvh
dataset/MotionCapture/16/16_25.bvh
dataset/MotionCapture/16/16_26.bvh
dataset/MotionCapture/16/16_27.bvh
dataset/MotionCapture/16/16_28.bvh
dataset/MotionCapture/16/16_29.bvh
dataset/MotionCapture/16/16_30.bvh
dataset/MotionCapture/16/16_31.bvh
dataset/MotionCapture/16/16_32.bvh
dataset/MotionCapture/16/16_33.bvh
dataset/MotionCapture/16/16_34.bvh
dataset/MotionCapture/16/16_35.bvh
dataset/MotionCapture/16/16_36.bvh
dataset/MotionCapture/16/16_37.bvh
dataset/MotionCapture/16/16_38.bvh
dataset/MotionCapture/16/16_39.bvh
dataset/MotionCapture/16/16_40.bvh
dataset/MotionCapture/16/16_41.bvh
dataset/MotionCapture/16/16_42.bvh
dataset/MotionCapture/16/16_43.bvh
dataset/MotionCapture/16/16_44.bvh
dataset/MotionCapture/16/16_47.bvh
dataset/MotionCapture/16/16_48.bvh
dataset/MotionCapture/16/16_49.bvh
dataset/MotionCapture/16/16_50.bvh
dataset/MotionCapture/16/16_51.bvh
dataset/MotionCapture/16/16_52.bvh
dataset/MotionCapture/16/16_53.bvh
dataset/MotionCapture/16/16_55.bvh
dataset/MotionCapture/16/16_56.bvh
dataset/MotionCapture/16/16_58.bvh
dataset/MotionCapture/17/17_01.bvh
dataset/MotionCapture/17/17_02.bvh
dataset/MotionCapture/17/17_03.bvh
dataset/MotionCapture/17/17_04.bvh
dataset/MotionCapture/17/17_05.bvh
dataset/MotionCapture/17/17_06.bvh
dataset/MotionCapture/17/17_07.bvh
dataset/MotionCapture/17/17_08.bvh
dataset/MotionCapture/17/17_09.bvh
dataset/MotionCapture/18/18_01.bvh
dataset/MotionCapture/18/18_02.bvh
dataset/MotionCapture/18/18_03.bvh
dataset/MotionCapture/18/18_04.bvh
dataset/MotionCapture/18/18_05.bvh
dataset/MotionCapture/18/18_06.bvh
dataset/MotionCapture/18/18_07.bvh
dataset/MotionCapture/18/18_08.bvh
dataset/MotionCapture/18/18_09.bvh
dataset/MotionCapture/18/18_10.bvh
dataset/MotionCapture/18/18_11.bvh
dataset/MotionCapture/18/18_12.bvh
dataset/MotionCapture/18/18_13.bvh
dataset/MotionCapture/18/18_14.bvh
dataset/MotionCapture/18/18_15.bvh
dataset/MotionCapture/19/19_01.bvh
dataset/MotionCapture/19/19_02.bvh
dataset/MotionCapture/19/19_03.bvh
dataset/MotionCapture/19/19_04.bvh
dataset/MotionCapture/19/19_05.bvh
dataset/MotionCapture/19/19_06.bvh
dataset/MotionCapture/19/19_07.bvh
dataset/MotionCapture/19/19_08.bvh
dataset/MotionCapture/19/19_09.bvh
dataset/MotionCapture/19/19_10.bvh
dataset/MotionCapture/19/19_11.bvh
dataset/MotionCapture/19/19_12.bvh
dataset/MotionCapture/19/19_13.bvh
dataset/MotionCapture/19/19_14.bvh
dataset/MotionCapture/19/19_15.bvh
@@ -0,0 +1,125 @@
#include "perform2DClustering.hpp"
#include "../MocapNETLib2/IO/bvh.hpp"
#include "../../../dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/bvh_loader.h"
#include "../../../dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/edit/bvh_filter.h"
#include "../../../dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/edit/bvh_rename.h"
#include "../../../dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/edit/bvh_randomize.h"
std::vector<std::vector<float> > collectPoses(
struct applicationState * state,
std::vector<char> &activeJoints,
struct BVH_MotionCapture * bvhMotion,
float distance,
unsigned int width,
unsigned int height
)
{
std::vector<std::vector<float> > bvh2DPoints;
if (bvhMotion==0)
{
return bvh2DPoints;
}
std::vector<float> bvhConfiguration;
bvhConfiguration.clear();
for (int i=0; i<bvhMotion->numberOfValuesPerFrame; i++)
{
bvhConfiguration.push_back(0.0);
}
bvhConfiguration[2]=(float) -150.0;
if ( bvhConfiguration.size() < bvhMotion->numberOfValuesPerFrame)
{
return bvh2DPoints;
}
unsigned int mID=0;
fprintf(stderr,"Collecting %u poses\n",bvhMotion->numberOfFrames);
// state->maxAccumulatedSample= 0;
for (int frameID=0; frameID<bvhMotion->numberOfFrames; frameID++)
{
//fprintf(stderr,".%u",frameID);
for (int i=0; i<bvhMotion->numberOfValuesPerFrame; i++)
{
//fprintf(stderr,"%u ",i);
int motionValueID = mID % (bvhMotion->numberOfValuesPerFrame * bvhMotion->numberOfFrames);
bvhConfiguration[i]=bvhMotion->motionValues[motionValueID];
++mID;
}
//fprintf(stderr,"!");
if (bvhConfiguration.size()>5)
{
bvhConfiguration[0]=0;
bvhConfiguration[1]=0;
bvhConfiguration[2]=distance;
bvhConfiguration[3]=0;
bvhConfiguration[4]=state->rotation;
bvhConfiguration[5]=0;
bvh2DPoints = convertBVHFrameTo2DPoints(bvhConfiguration); //,width, height
if (bvh2DPoints.size()>0)
{
++state->accumulatedSamples;
for (int i=0; i<bvh2DPoints.size(); i++)
{
//We want to exclude Hip joint because it is stuck in the same place for every frame..!
if (
( activeJoints[i] ) &&
( (bvh2DPoints[i][0]>0) && (bvh2DPoints[i][1]>0) && (bvh2DPoints[i][0]<width) && (bvh2DPoints[i][1]<height) )
)
{
unsigned int x=(unsigned int) bvh2DPoints[i][0];
unsigned int y=(unsigned int) bvh2DPoints[i][1];
if ( (x<width) && (y<height) )
{
unsigned long newValue = state->accumulatedImage[y*width+x] + 1;
if (newValue<=state->accumulatedSamples)
{
state->accumulatedImage[y*width+x] = newValue;
if (state->maxAccumulatedSample<newValue)
{
state->maxAccumulatedSample=newValue;
//fprintf(stderr,"Pixel %u,%u has largest value %lu\n",x,y,newValue);
}
}
}
else
{
fprintf(stderr,"%0.2f,%0.2f wrongly casted to %u,%u",bvh2DPoints[i][0],bvh2DPoints[i][1],x,y);
}
}
}
}
else
{
fprintf(stderr,"Could not project BVH 2D points\n");
}
}
} //For every frame loop..
return bvh2DPoints;
}
@@ -0,0 +1,28 @@
#pragma once
#include <stdio.h>
#include <vector>
struct applicationState
{
int rotation;
int selectedJoint,previousSelection;
int visualizationType,previousVisualizationType;
int stop;
int save;
int redraw;
//-----------------
unsigned long * accumulatedImage;
unsigned long accumulatedSamples;
unsigned long maxAccumulatedSample;
};
std::vector<std::vector<float> > collectPoses(
struct applicationState * state,
std::vector<char> &activeJoints,
struct BVH_MotionCapture * bvhMotion,
float distance,
unsigned int width,
unsigned int height
);
@@ -0,0 +1,223 @@
#include "perform3DClustering.hpp"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "../MocapNETLib2/IO/bvh.hpp"
#include "../../../dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/bvh_loader.h"
#include "../../../dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/edit/bvh_filter.h"
#include "../../../dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/edit/bvh_rename.h"
#include "../../../dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/edit/bvh_randomize.h"
#define NORMAL "\033[0m"
#define BLACK "\033[30m" /* Black */
#define RED "\033[31m" /* Red */
#define GREEN "\033[32m" /* Green */
#define YELLOW "\033[33m" /* Yellow */
int appendBVHVectorToFile(FILE * fp, std::vector<float> vec)
{
if ( (fp!=0) && (vec.size()>0) )
{
for (unsigned int i=0; i<vec.size(); i++)
{
if (i!=0) { fprintf(fp," "); }
fprintf(fp,"%0.2f",vec[i]);
}
fprintf(fp,"\n");
return 1;
}
return 0;
}
std::vector<std::vector<float> > collect3DPoses(
struct clusteringOf3DPoses * state,
std::vector<char> &activeJoints,
struct BVH_MotionCapture * bvhMotion,
float distance,
unsigned int width,
unsigned int height,
unsigned int depth
)
{
std::vector<std::vector<float> > bvh2DPointsFront;
std::vector<std::vector<float> > bvh2DPointsSide;
if (bvhMotion==0)
{
//Return an empty vector of vectors..
return bvh2DPointsFront;
}
if (state->fp==0)
{
state->fp = fopen("filteredPoses.bvhm","w");
}
if (state->space==0)
{
state->allocatedSpaceMemorySize = width * height * depth * sizeof(struct voxelElement);
fprintf(stderr,"Will now try to allocate a huge chunk of memory (%lu bytes)\n",state->allocatedSpaceMemorySize);
state->space = (struct voxelElement * ) malloc(state->allocatedSpaceMemorySize);
if (state->space!=0)
{
fprintf(stderr,"Will now try to cleanup the huge chunk of memory (%lu bytes)\n",state->allocatedSpaceMemorySize);
memset(state->space,0,state->allocatedSpaceMemorySize);
fprintf(stderr,"Survived..\n");
} else
{
state->allocatedSpaceMemorySize=0;
fprintf(stderr,"Error allocating a huge chunk of memory..!\n");
return bvh2DPointsFront;
}
}
std::vector<float> bvhConfiguration;
bvhConfiguration.clear();
for (int i=0; i<bvhMotion->numberOfValuesPerFrame; i++)
{
bvhConfiguration.push_back(0.0);
}
bvhConfiguration[2]=(float) -150.0;
if (bvhMotion==0)
{
return bvh2DPointsFront;
}
if ( bvhConfiguration.size() < bvhMotion->numberOfValuesPerFrame)
{
return bvh2DPointsFront;
}
unsigned int mID=0;
fprintf(stderr,"Collecting %u poses\n",bvhMotion->numberOfFrames);
// state->maxAccumulatedSample= 0;
unsigned int negativesAtThisCall=0;
unsigned int hitsAtThisCall=0;
for (int frameID=0; frameID<bvhMotion->numberOfFrames; frameID++)
{
//fprintf(stderr,".%u",frameID);
for (int i=0; i<bvhMotion->numberOfValuesPerFrame; i++)
{
//fprintf(stderr,"%u ",i);
int motionValueID = mID % (bvhMotion->numberOfValuesPerFrame * bvhMotion->numberOfFrames);
bvhConfiguration[i]=bvhMotion->motionValues[motionValueID];
++mID;
}
//fprintf(stderr,"!");
if (bvhConfiguration.size()>5)
{
bvhConfiguration[0]=0;
bvhConfiguration[1]=0;
bvhConfiguration[2]=distance;
bvhConfiguration[3]=0;
bvhConfiguration[4]=0;
bvhConfiguration[5]=0;
bvhConfiguration[4]=0;
bvh2DPointsFront = convertBVHFrameTo2DPoints(bvhConfiguration); //,width,height
bvhConfiguration[4]=90;
bvh2DPointsSide = convertBVHFrameTo2DPoints(bvhConfiguration); //,width,height
bvhConfiguration[4]=0; // So the configuration we save is ok
if ( (bvh2DPointsFront.size()>0) && (bvh2DPointsSide.size()>0) && (bvh2DPointsFront.size()==bvh2DPointsSide.size()) )
{
for (int i=0; i<bvh2DPointsFront.size(); i++)
{
//We want to exclude Hip joint because it is stuck in the same place for every frame..!
if (
(activeJoints[i]) &&
( (bvh2DPointsFront[i][0]>0) && (bvh2DPointsFront[i][1]>0) && (bvh2DPointsFront[i][0]<width) && (bvh2DPointsFront[i][1]<height) ) &&
( (bvh2DPointsSide[i][0]>0) && (bvh2DPointsSide[i][1]>0) && (bvh2DPointsSide[i][0]<depth) && (bvh2DPointsSide[i][1]<height) )
)
{
unsigned int x=(unsigned int) bvh2DPointsFront[i][0];
unsigned int y=(unsigned int) bvh2DPointsFront[i][1];
unsigned int z=(unsigned int) bvh2DPointsSide[i][0];
//fprintf(stderr,"x=%u,y=%u,z=%u\n",x,y,z);
if ( (x<width) && (y<height) && (z<depth) )
{
unsigned long memoryLocation = (unsigned long) (z*width*height) + (y*width)+ x;
if (state->allocatedSpaceMemorySize>memoryLocation)
{
if (state->space[memoryLocation].element==0)
{
++state->accumulatedSamples;
appendBVHVectorToFile(state->fp, bvhConfiguration);
++hitsAtThisCall;
state->space[memoryLocation].element=1;
} else
{
++negativesAtThisCall;
if (state->space[memoryLocation].element<254)
{
state->space[memoryLocation].element+=1;
}
}
/*
if (newValue<=state->accumulatedSamples)
{
state->space[memoryLocation].element = newValue;
if (state->maxAccumulatedSample<newValue)
{
state->maxAccumulatedSample=newValue;
//fprintf(stderr,"Pixel %u,%u has largest value %lu\n",x,y,newValue);
}
} */
} else
{
fprintf(stderr,"Bad memory location for %u,%u,%u \n",x,y,z);
}
}
else
{
fprintf(stderr,"%0.2f,%0.2f wrongly casted to %u,%u",bvh2DPointsFront[i][0],bvh2DPointsFront[i][1],x,y);
}
}
}
}
else
{
fprintf(stderr,"Could not project BVH 2D points\n");
}
}
} //For every frame loop..
if (hitsAtThisCall>0)
{
fprintf(stderr,GREEN "Added %u more poses (%0.2f%% of the dataset is novel)..\n" NORMAL,hitsAtThisCall,(float) (100*hitsAtThisCall)/bvhMotion->numberOfFrames);
} else
{
fprintf(stderr,YELLOW "No new poses observed ( %u/%u negatives )..\n" NORMAL,negativesAtThisCall,bvhMotion->numberOfFrames);
}
return bvh2DPointsFront;
}
@@ -0,0 +1,35 @@
#pragma once
#include <stdio.h>
#include <vector>
struct voxelElement
{
char element;
};
struct clusteringOf3DPoses
{
FILE *fp;
struct voxelElement * space;
unsigned long allocatedSpaceMemorySize;
unsigned int width,height,depth;
unsigned long accumulatedSamples;
unsigned long maxAccumulatedSample;
};
std::vector<std::vector<float> > collect3DPoses(
struct clusteringOf3DPoses * state,
std::vector<char> &activeJoints,
struct BVH_MotionCapture * bvhMotion,
float distance,
unsigned int width,
unsigned int height,
unsigned int depth
);
@@ -0,0 +1,36 @@
project( convertH36GroundTruthToMocapNETInput )
cmake_minimum_required(VERSION 3.5)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
include_directories(${TENSORFLOW_INCLUDE_ROOT})
#-----------------------------------------------
# This is the converter utilities..
#-----------------------------------------------
add_executable(
convertH36GroundTruthToMocapNETInput
convertH36GroundTruthToMocapNETInput.cpp
../../MocapNETLib2/tools.cpp
../../MocapNETLib2/IO/jsonRead.cpp
../../MocapNETLib2/IO/jsonMocapNETHelpers.cpp
../../../../dependencies/InputParser/InputParser_C.cpp
${BVH_SOURCE}
${OPENGL_SOURCE}
../../MocapNETLib2/IO/bvh.cpp
../../MocapNETLib2/IO/conversions.cpp
../../MocapNETLib2/IO/csvRead.cpp
../../MocapNETLib2/IO/csvWrite.cpp
)
#-----------------------------------------------
target_link_libraries(convertH36GroundTruthToMocapNETInput rt dl m pthread MocapNETLib2)
set_target_properties(convertH36GroundTruthToMocapNETInput PROPERTIES DEBUG_POSTFIX "D")
set_target_properties(convertH36GroundTruthToMocapNETInput PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
)
@@ -0,0 +1,241 @@
/*
* Export utility from OpenPose BODY 25 JSON format to a more regular CSV file
* Sample call : ./convertBody25JSONToCSV --from frames/GOPR3223.MP4-data/ --label colorFrame_0_ -o .
* */
#include <iostream>
#include <vector>
#include <math.h>
#include <string.h>
#include "../../../MocapNET2/MocapNETLib2/tools.hpp"
#include "../../../MocapNET2/MocapNETLib2/mocapnet2.hpp"
#include "../../../MocapNET2/MocapNETLib2/IO/commonSkeleton.hpp"
#include "../../../MocapNET2/MocapNETLib2/IO/jsonRead.hpp"
#include "../../../MocapNET2/MocapNETLib2/IO/csvRead.hpp"
#include "../../../MocapNET2/MocapNETLib2/IO/csvWrite.hpp"
#if USE_BVH
#include "../../../../dependencies/RGBDAcquisition/tools/AmMatrix/matrix4x4Tools.h"
#include "../../../../dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/bvh_loader.h"
#include "../../../../dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/calculate/bvh_project.h"
#include "../../../../dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/calculate/bvh_transform.h"
#include "../../../../dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/ik/bvh_inverseKinematics.h"
#else
#warning "BVH code not included.."
#endif // USE_BVH
#define NORMAL "\033[0m"
#define BLACK "\033[30m" /* Black */
#define RED "\033[31m" /* Red */
#define GREEN "\033[32m" /* Green */
#define YELLOW "\033[33m" /* Yellow */
int main(int argc, char *argv[])
{
#if USE_BVH
float fX = 582.18394; //570.0
float fY = 582.52915; //570.0
unsigned int width = 1920;
unsigned int height = 1080;
struct simpleRenderer renderer= {0};
simpleRendererDefaults(
&renderer,
width,//1920
height,//1080
fX, //570.0
fY //570.0
);
simpleRendererInitialize(&renderer);
const char * path=0;
const char * label=0;
char outputPathFull[2048]= {"./h36ToMnet.csv"};
const char * outputPath=outputPathFull;
float offsetX=0.0,offsetY=0.0,offsetZ=0.0;
int flipX=0;
int flipY=1;
for (int i=0; i<argc; i++)
{
if (strcmp(argv[i],"--from")==0)
{
path = argv[i+1];
}
else if (strcmp(argv[i],"--to")==0)
{
outputPath = argv[i+1];
}
else if (strcmp(argv[i],"--offset")==0)
{
offsetX=atof(argv[i+1]);
offsetY=atof(argv[i+2]);
offsetZ=atof(argv[i+3]);
}
else if (strcmp(argv[i],"--flipX")==0)
{
offsetX=atof(argv[i+1]);
offsetY=atof(argv[i+2]);
offsetZ=atof(argv[i+3]);
}
}
std::vector<std::vector<float> > result;
std::vector<float> points2DOfASpecificFrame;
struct CSVFileContext csv= {0};
struct CSVFloatFileLine csvLine= {0};
if ( openCSVFile(&csv,path) )
{
parseCSVHeader(&csv);
while (parseNextCSVFloatLine(&csv,&csvLine))
{
points2DOfASpecificFrame.clear();
float pos3D[4]= {0};
//pos3D[3]=1.0;
float position2DX=0,position2DY=0,position2DW=0;
float center[4]= {0};
float rotation[3]= {0};
float hipX = csvLine.field[9 * 3 + 0];
float hipY = csvLine.field[9 * 3 + 1];
float hipZ = csvLine.field[9 * 3 + 2];
for (unsigned int pointID=0; pointID<csv.numberOfHeaderFields/3; pointID++)
{
//--------------------------------------
pos3D[0]=(float) (csvLine.field[pointID * 3 + 0]) + offsetX;
pos3D[1]=(float) (csvLine.field[pointID * 3 + 1]) + offsetY;
pos3D[2]=(float) -1 * (csvLine.field[pointID * 3 + 2]) + offsetZ;
//fprintf(stderr,"Projecting %0.2f,%0.2f,%0.2f : ",pos3D[0],pos3D[1],pos3D[2]);
//--------------------------------------
if (
simpleRendererRender(
&renderer,
pos3D,
center,
rotation,
ROTATION_ORDER_RPY,
&position2DX,
&position2DY,
&position2DW
)
)
{
if (flipX)
{
position2DX = width - position2DX;
}
if (flipY)
{
position2DY = height - position2DY;
}
if (position2DW>0.0)
{
//fprintf(stderr,"output is %0.2f,%0.2f \n",position2DX,position2DY);
points2DOfASpecificFrame.push_back((float) position2DX);
points2DOfASpecificFrame.push_back((float) position2DY);
}
else
{
//fprintf(stderr,"behind camera(%0.2f).. %0.2f,%0.2f \n",position2DW,position2DX,position2DY);
points2DOfASpecificFrame.push_back(0.0);
points2DOfASpecificFrame.push_back(0.0);
}
} else
{
points2DOfASpecificFrame.push_back(0.0);
points2DOfASpecificFrame.push_back(0.0);
}
}
result.push_back(points2DOfASpecificFrame);
}
if (result.size()>0)
{
FILE * fp = fopen(outputPath,"w");
if (fp!=0)
{
fprintf(fp,"frameNumber,skeletonID,totalSkeletons");
for (unsigned int pointID=0; pointID<csv.numberOfHeaderFields/3; pointID++)
{
char * pointLabel = csv.field[pointID*3].str + 4;
//Translate H36M labels to MNET labels..
if ( strcmp(pointLabel,"nose")==0 ) { fprintf(fp,",2DX_head,2DY_head,visible_head"); } else
if ( strcmp(pointLabel,"rwrist")==0 ) { fprintf(fp,",2DX_rhand,2DY_rhand,visible_rhand"); } else
if ( strcmp(pointLabel,"lwrist")==0 ) { fprintf(fp,",2DX_lhand,2DY_lhand,visible_lhand"); } else
if ( strcmp(pointLabel,"midhip")==0 ) { fprintf(fp,",2DX_hip,2DY_hip,visible_hip"); } else
//rankle/lankle instead..
if ( strcmp(pointLabel,"rheel")==0 ) { fprintf(fp,",2DX_rfoot,2DY_rfoot,visible_rfoot"); } else
if ( strcmp(pointLabel,"lheel")==0 ) { fprintf(fp,",2DX_lfoot,2DY_lfoot,visible_lfoot"); } else
if ( strcmp(pointLabel,"reye")==0 ) { fprintf(fp,",2DX_endsite_eye.r,2DY_endsite_eye.r,visible_endsite_eye.r"); } else
if ( strcmp(pointLabel,"leye")==0 ) { fprintf(fp,",2DX_endsite_eye.l,2DY_endsite_eye.l,visible_endsite_eye.l"); } else
if ( strcmp(pointLabel,"rbigtoe")==0 ) { fprintf(fp,",2DX_endsite_toe1-2.r,2DY_endsite_toe1-2.r,visible_endsite_toe1-2.r"); } else
if ( strcmp(pointLabel,"lbigtoe")==0 ) { fprintf(fp,",2DX_endsite_toe1-2.l,2DY_endsite_toe1-2.l,visible_endsite_toe1-2.l"); } else
if ( strcmp(pointLabel,"rsmalltoe")==0 ) { fprintf(fp,",2DX_endsite_toe5-3.r,2DY_endsite_toe5-3.r,visible_endsite_toe5-3.r"); } else
if ( strcmp(pointLabel,"lsmalltoe")==0 ) { fprintf(fp,",2DX_endsite_toe5-3.l,2DY_endsite_toe5-3.l,visible_endsite_toe5-3.l"); } else
{ fprintf(fp,",2DX_%s,2DY_%s,visible_%s",pointLabel,pointLabel,pointLabel); }
}
fprintf(fp,"\n");
for (unsigned int frameID=0; frameID<result.size(); frameID++)
{
fprintf(fp,"%u,0,0",frameID);
for (unsigned int pointID=0; pointID<result[frameID].size(); pointID++)
{
float normalizedPoint = result[frameID][pointID];
unsigned int element = pointID%2;
if (element==0) { normalizedPoint/= width; fprintf(fp,",%f",normalizedPoint); } else
{ normalizedPoint/= height; fprintf(fp,",%f,1",normalizedPoint); }
}
fprintf(fp,"\n");
}
fclose(fp);
}
}
closeCSVFile(&csv);
}
#else
fprintf(stderr,"This utility is only available if you compile the BVH code in..\n");
#endif
return 0;
}
@@ -0,0 +1,37 @@
project( convertOpenPoseJSONToCSV )
cmake_minimum_required(VERSION 3.5)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
include_directories(${TENSORFLOW_INCLUDE_ROOT})
#-----------------------------------------------
# This is the converter utilities..
#-----------------------------------------------
add_executable(
convertOpenPoseJSONToCSV
convertOpenPoseJSONToCSV.cpp
../../MocapNETLib2/tools.cpp
../../MocapNETLib2/IO/jsonRead.cpp
../../MocapNETLib2/IO/jsonMocapNETHelpers.cpp
../../../../dependencies/InputParser/InputParser_C.cpp
${BVH_SOURCE}
${OPENGL_SOURCE}
../../MocapNETLib2/IO/bvh.cpp
../../MocapNETLib2/IO/csvWrite.cpp
)
#-----------------------------------------------
target_link_libraries(convertOpenPoseJSONToCSV rt dl m pthread MocapNETLib2)
set_target_properties(convertOpenPoseJSONToCSV PROPERTIES DEBUG_POSTFIX "D")
set_target_properties(convertOpenPoseJSONToCSV PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
)
@@ -0,0 +1,284 @@
/*
* Export utility from OpenPose BODY25 + Hands + Face JSON format to a trivially parseable CSV file
* Check https://github.com/CMU-Perceptual-Computing-Lab/openpose/blob/master/doc/output.md on more information on OpenPose JSON files..
*
* Sample call : ./convertOpenPoseJSONToCSV --from frames/GOPR3223.MP4-data/ --label colorFrame_0_ -o .
*
* This utility converts OpenPose json output to a CSV file that can be easily parsed and used as MocapNET input
*
* My workflow when working with OpenPose is first dumping any video file that I want to process (let's call it video.mp4) to images using ffmpeg.
* This ensures a well defined framerate and a well defined 1:1 correspondence of color/json/and my output frames regardless of video container.
*
* I typically use this script -> https://github.com/AmmarkoV/RGBDAcquisition/blob/master/grabber/frames/dump_video.sh to dump the video to files
* but it is equivalent to running :
* mkdir videoFiles && ffmpeg -i video.mp4 -r 30 -q:v 1 videoFiles/colorFrame_0_%05d.jpg && cp videoFiles/colorFrame_0_00001.jpg videoFiles/colorFrame_0_00000.jpg
*
* Having a well defined serialized version of the dataset ( with serial numbers that start from 0 instead of 1 ) we can be sure on what frame each openpose output will correspond
*
* Running :
* openpose.bin -number_people_max 1 --hand --face --write_json videoFiles/ -image_dir videoFiles/
*
* The directory will be populated with colorFrame_0_xxxxx_keypoints.json files
* each of the colorFrame_0_xxxxx_keypoints.json will correspond to a colorFrame_0_xxxxx.jpg
*
* This can then be converted to a CSV file using :
* ./convertOpenPoseJSONToCSV --from videoFiles/
*
*
* If you want to use a custom json labeling scheme and not rely on images as OpenPose input you will need to :
*
* 1) provide the proper image resolution ( since the JSON files alone do not have this information )
* The image resolution is *CRUCIAL* for the software to correctly normalize input 2D points and respect the training aspect ratio
* if you don't supply the correct size a Full-HD(1920x1080p) input will be assumed. If this does not correspond to the original video resolution output will be adversly affected
* You can do this with the --size WIDTH HEIGHT parameter
*
* 2) Depending on your datasets and filenames supply the proper number of characters for a valid serial frame number length
* i.e. frame_xxxxx_keypoints.json needs --seriallength 5
* frame_xxxxxxx_keypoints.json needs --seriallength 7
* etc
*
* 3) Depending on your datasets and filenames supply the correct label for the dataset
* i.e. datasetNameA_xxxxx_keypoints.json needs --label datasetNameA
* AMoreComplexLabel_IsTHIS_0_xxxxxxx_keypoints.json needs --label AMoreComplexLabel_IsTHIS_0
* etc
*
* 4) Depending on the starting frame and ending frame of your dataset supply the --startAt X , --maxFrames X
* i.e dataset_00001_keypoints.json - dataset_00101_keypoints.json should need --startAt 1 --maxFrames 102
* i.e dataset_00000_keypoints.json - dataset_0099_keypoints.json should need --startAt 0 --maxFrames 100
*
* */
#include <iostream>
#include <vector>
#include <math.h>
#include <string.h>
#include "../../../MocapNET2/MocapNETLib2/tools.hpp"
#include "../../../MocapNET2/MocapNETLib2/mocapnet2.hpp"
#include "../../../MocapNET2/MocapNETLib2/IO/commonSkeleton.hpp"
#include "../../../MocapNET2/MocapNETLib2/IO/jsonRead.hpp"
#include "../../../MocapNET2/MocapNETLib2/IO/csvRead.hpp"
#include "../../../MocapNET2/MocapNETLib2/IO/csvWrite.hpp"
#define NORMAL "\033[0m"
#define BLACK "\033[30m" /* Black */
#define RED "\033[31m" /* Red */
#define GREEN "\033[32m" /* Green */
#define YELLOW "\033[33m" /* Yellow */
int findFirstJSONFileInDirectory(const char * path,const char * formatString, const char * label, unsigned int * frameIDOutput)
{
char filePathOfJSONFile[1025]={0};
const int maximumFilesToSearchFor=1000;
unsigned int frameID=0;
int found=0;
while (!found)
{
snprintf(filePathOfJSONFile,1024,formatString,path,label,frameID);
if( fileExists(filePathOfJSONFile) )
{
*frameIDOutput=frameID;
return 1;
}
++frameID;
if (frameID==maximumFilesToSearchFor)
{
fprintf(stderr,"Stopping search after %u checks ..\n",maximumFilesToSearchFor);
break;
//return 0;
}
}
fprintf(stderr,"findFirstJSONFileInDirectory: failed to find any JSON files.. :(\n");
fprintf(stderr,"Path : %s \n",path);
fprintf(stderr,"Format : %s \n",formatString);
fprintf(stderr,"Label : %s \n",label);
return 0;
}
int main(int argc, char *argv[])
{
unsigned int respectTrainingAspectRatio = 1;
unsigned int width=1920 , height=1080 , frameLimit=100000 , processed = 0 , serialLength = 5 ,forcedSize=0;
const char * path=0;
const char * label=0;
char outputPathFull[2048]={0};
const char * outputPath=0;
float version=1.4;
int noLabel=0;
float acceptableThreshold = 0.5;
for (int i=0; i<argc; i++)
{
if (strcmp(argv[i],"--maxFrames")==0)
{
frameLimit=atoi(argv[i+1]);
}
else if (strcmp(argv[i],"--from")==0)
{
path = argv[i+1];
}
else if (strcmp(argv[i],"--threshold")==0)
{
acceptableThreshold = atof(argv[i+1]);
}
else if (strcmp(argv[i],"-i")==0)
{
path = argv[i+1];
}
else if (strcmp(argv[i],"--label")==0)
{
label = argv[i+1];
}
else if (strcmp(argv[i],"--out")==0)
{
outputPath = argv[i+1];
}
else if (strcmp(argv[i],"--ignoreTrainingAspectRatio")==0)
{
fprintf(stderr,RED "Training aspect ratio is going to be ignored during training..!\n" NORMAL);
fprintf(stderr,RED "this is not a good idea unless you really know what you are doing\n" NORMAL);
respectTrainingAspectRatio = 0;
}
else if (strcmp(argv[i],"-o")==0)
{
outputPath = argv[i+1];
}
else if (strcmp(argv[i],"--to")==0)
{
outputPath = argv[i+1];
}
else if (strcmp(argv[i],"-v")==0)
{
version = atof(argv[i+1]);
}
else if (strcmp(argv[i],"--seriallength")==0)
{
serialLength = atoi(argv[i+1]);
}
else if (strcmp(argv[i],"--size")==0)
{
width = atoi(argv[i+1]);
height = atoi(argv[i+2]);
forcedSize=1;
}
else if (strcmp(argv[i],"--nolabel")==0)
{
//New datasets dont have a label in the filename..!
noLabel =1 ;
}
}
if (path==0)
{
path="./";
}
if (label==0)
{
label="colorFrame_0_";
}
if (noLabel)
{
label="";
}
if (outputPath==0)
{
snprintf(outputPathFull,2048,"%s/2dJoints_v%0.1f.csv",path,version);
}
else
{
if (strstr(outputPath,".csv")!=0)
{
fprintf(stderr,"Output path is actually a csv file so treating it as one..\n");
snprintf(outputPathFull,2048,"%s",outputPath);
} else
{
snprintf(outputPathFull,2048,"%s/2dJoints_v%0.1f.csv",outputPath,version);
}
}
char formatString[256]= {0};
char filePathOfJSONFile[2048]= {0};
snprintf(formatString,256,"%%s/%%s%%0%uu.jpg",serialLength);
snprintf(filePathOfJSONFile,2048,formatString,path,label,1/*Frame ID*/);
snprintf(formatString,256,"%%s/%%s%%0%uu_keypoints.json",serialLength);
if (!forcedSize)
{
if ( getImageWidthHeight(filePathOfJSONFile,&width,&height) )
{
fprintf(stderr,"Image dimensions changed from default to %ux%u",width,height);
}
else
{
fprintf(stderr,"Assuming default image dimensions %ux%u , you can change this using --size x y\n",width,height);
}
} else
{
fprintf(stderr,"Forcing size due to --size %u %u commandline parameter\n",width,height);
}
float totalTime=0.0;
unsigned int totalSamples=0;
struct skeletonStructure skeleton;
memset(&skeleton,0,sizeof(struct skeletonStructure));
unsigned int frameID=1;
fprintf(stderr,"Threshold is set to %0.2f\n",acceptableThreshold);
fprintf(stderr,"Processing : \n");
if ( findFirstJSONFileInDirectory(path, formatString,label,&frameID) )
{
frameLimit+=frameID;
fprintf(stderr,"First frame is %u, last will be %u \n",frameID,frameLimit);
} else
{
fprintf(stderr,RED "Failed to find a JSON file..!\n " NORMAL);
return 0;
}
while (frameID<frameLimit)
{
snprintf(filePathOfJSONFile,1024,formatString,path,label,frameID);
fprintf(stderr,"%s (%ux%u)\n",filePathOfJSONFile,width,height);
if (parseJsonCOCOSkeleton(filePathOfJSONFile,&skeleton,acceptableThreshold,processed))
{
if (processed==0)
{
writeOpenPoseCSVHeaderFromSkeleton(outputPathFull,&skeleton,width,height);
}
if (skeleton.leftHand.isPopulated) { fprintf(stderr,GREEN "Left Hand " NORMAL); }
if (skeleton.rightHand.isPopulated) { fprintf(stderr,GREEN "Right Hand " NORMAL); }
if (skeleton.body.isPopulated) { fprintf(stderr,GREEN "Body " NORMAL); }
if (skeleton.head.isPopulated) { fprintf(stderr,GREEN "Head " NORMAL); }
writeOpenPoseCSVBodyFromSkeleton(outputPathFull,&skeleton,respectTrainingAspectRatio,width,height);
++processed;
}
else
{
fprintf(stderr,"Done processing %u frames..\n",frameID);
fprintf(stderr,"Output has been stored at %s \n",outputPathFull);
break;
}
++frameID;
}
return 0;
}
@@ -0,0 +1,36 @@
project( convertCSV3DToMocapNETInput )
cmake_minimum_required(VERSION 3.5)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
include_directories(${TENSORFLOW_INCLUDE_ROOT})
#-----------------------------------------------
# This is the converter utilities..
#-----------------------------------------------
add_executable(
convertCSV3DToMocapNETInput
convertCSV3DToMocapNETInput.cpp
../../MocapNETLib2/tools.cpp
../../MocapNETLib2/IO/jsonRead.cpp
../../MocapNETLib2/IO/jsonMocapNETHelpers.cpp
../../../../dependencies/InputParser/InputParser_C.cpp
${BVH_SOURCE}
${OPENGL_SOURCE}
../../MocapNETLib2/IO/bvh.cpp
../../MocapNETLib2/IO/conversions.cpp
../../MocapNETLib2/IO/csvRead.cpp
../../MocapNETLib2/IO/csvWrite.cpp
)
#-----------------------------------------------
target_link_libraries(convertCSV3DToMocapNETInput rt dl m pthread MocapNETLib2)
set_target_properties(convertCSV3DToMocapNETInput PROPERTIES DEBUG_POSTFIX "D")
set_target_properties(convertCSV3DToMocapNETInput PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
)
@@ -0,0 +1,322 @@
/*
* Export utility from OpenPose BODY 25 JSON format to a more regular CSV file
* Sample call : ./convertBody25JSONToCSV --from frames/GOPR3223.MP4-data/ --label colorFrame_0_ -o .
* */
#include <iostream>
#include <vector>
#include <math.h>
#include <string.h>
#include "../../../MocapNET2/MocapNETLib2/tools.hpp"
#include "../../../MocapNET2/MocapNETLib2/mocapnet2.hpp"
#include "../../../MocapNET2/MocapNETLib2/IO/commonSkeleton.hpp"
#include "../../../MocapNET2/MocapNETLib2/IO/jsonRead.hpp"
#include "../../../MocapNET2/MocapNETLib2/IO/csvRead.hpp"
#include "../../../MocapNET2/MocapNETLib2/IO/csvWrite.hpp"
#if USE_BVH
#include "../../../../dependencies/RGBDAcquisition/tools/AmMatrix/matrix4x4Tools.h"
#include "../../../../dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/bvh_loader.h"
#include "../../../../dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/calculate/bvh_project.h"
#include "../../../../dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/calculate/bvh_transform.h"
#include "../../../../dependencies/RGBDAcquisition/opengl_acquisition_shared_library/opengl_depth_and_color_renderer/src/Library/MotionCaptureLoader/ik/bvh_inverseKinematics.h"
#else
#warning "BVH code not included.."
#endif // USE_BVH
#define NORMAL "\033[0m"
#define BLACK "\033[30m" /* Black */
#define RED "\033[31m" /* Red */
#define GREEN "\033[32m" /* Green */
#define YELLOW "\033[33m" /* Yellow */
int main(int argc, char *argv[])
{
#if USE_BVH
float fX = 582.18394; //570.0
float fY = 582.52915; //570.0
unsigned int width = 1920;
unsigned int height = 1080;
struct simpleRenderer renderer= {0};
simpleRendererDefaults(
&renderer,
width,//1920
height,//1080
fX, //570.0
fY //570.0
);
simpleRendererInitialize(&renderer);
const char * path=0;
const char * label=0;
char outputPathFull[2048]= {"./handToMnet.csv"};
const char * outputPath=outputPathFull;
float scale2DX=1.0,scale2DY=1.0;
float offset2DX=0,offset2DY=0;
float scale3DX=1.0,scale3DY=1.0,scale3DZ=-1.0;
float offset3DX=0.0,offset3DY=0.0,offset3DZ=0.0;
int flipX=0;
int flipY=1;
unsigned int thereIsALineLimit=0;
unsigned int maxLinesToProcess=0;
// ./convertCSV3DToMocapNETInput --from /home/ammar/Documents/Datasets/STB/test.csv --to /home/ammar/Documents/Datasets/STB/test2D.csv --meters --flipY --offset3D 0 0 -100
int i=0;
while (i<argc)
{
if (strcmp(argv[i],"--from")==0)
{
path = argv[i+1];
i+=1;
}
else if (strcmp(argv[i],"--to")==0)
{
outputPath = argv[i+1];
i+=1;
}
else if (strcmp(argv[i],"--maxFrames")==0)
{
thereIsALineLimit=1;
maxLinesToProcess=atoi(argv[i+1]);
i+=1;
}
else if (strcmp(argv[i],"--meters")==0)
{
scale3DX = 1000.0;
scale3DY = 1000.0;
scale3DZ = 1000.0;
}
else if (strcmp(argv[i],"--scale3D")==0)
{
scale3DX=atof(argv[i+1]);
scale3DY=atof(argv[i+2]);
scale3DZ=atof(argv[i+3]);
i+=3;
}
else if (strcmp(argv[i],"--offset3D")==0)
{
offset3DX=atof(argv[i+1]);
offset3DY=atof(argv[i+2]);
offset3DZ=atof(argv[i+3]);
i+=3;
}
else if (strcmp(argv[i],"--scale2D")==0)
{
scale2DX=atof(argv[i+1]);
scale2DY=atof(argv[i+2]);
i+=2;
}
else if (strcmp(argv[i],"--offset2D")==0)
{
offset2DX=atof(argv[i+1]);
offset2DY=atof(argv[i+2]);
i+=2;
}
else if (strcmp(argv[i],"--flipX")==0)
{
if (flipX)
{
flipX=0;
}
else
{
flipX=1;
}
}
else if (strcmp(argv[i],"--flipY")==0)
{
if (flipY)
{
flipY=0;
}
else
{
flipY=1;
}
}
else
{
fprintf(stderr,RED "Unknown parameter : %s \n" NORMAL,argv[i]);
}
++i;
}
fprintf(stderr,"\n\n\n\nConversion from 3D CSV ground truth file configuration\n");
fprintf(stderr,"_____________________________________________________________\n");
fprintf(stderr,"3D input will have following modifiers : \n");
fprintf(stderr," Scale | %0.2f | %0.2f | %0.2f \n",scale3DX,scale3DY,scale3DZ);
fprintf(stderr," Offset | %0.2f | %0.2f | %0.2f \n",offset3DX,offset3DY,offset3DZ);
fprintf(stderr,"\nVirtual Camera : \n");
fprintf(stderr," Width=%0.2f Height=%0.2f\n",renderer.width,renderer.height);
fprintf(stderr," fX=%0.2f fY=%0.2f cX=%0.2f cY=%0.2f \n",renderer.fx,renderer.fy,renderer.cx,renderer.cy);
fprintf(stderr,"\n2D output will have following modifiers : \n");
fprintf(stderr," Scale | %0.2f | %0.2f \n",scale2DX,scale2DY);
fprintf(stderr," Offset | %0.2f | %0.2f \n",offset2DX,offset2DY);
fprintf(stderr,"\nFile I/O : \n");
fprintf(stderr," 3D CSV ground truth file: `%s`\n",path);
fprintf(stderr," 2D CSV output file: `%s`\n",outputPath);
fprintf(stderr,"_____________________________________________________________\n");
std::vector<std::vector<float> > result;
std::vector<float> points2DOfASpecificFrame;
struct CSVFileContext csv= {0};
struct CSVFloatFileLine csvLine= {0};
unsigned int linesProcessed=0;
if ( openCSVFile(&csv,path) )
{
parseCSVHeader(&csv);
fprintf(stderr,"%u columns of %u points to be outputted : ",csv.numberOfHeaderFields,(unsigned int) csv.numberOfHeaderFields/3);
for (unsigned int pointID=0; pointID<csv.numberOfHeaderFields; pointID++)
{
if (pointID!=0)
{
fprintf(stderr,",");
}
fprintf(stderr,"%s",csv.field[pointID].str);
}
fprintf(stderr,"\n_____________________________________________________________\n");
while ( (parseNextCSVFloatLine(&csv,&csvLine)) && ( (!thereIsALineLimit) || (linesProcessed+1<maxLinesToProcess) ) )
{
points2DOfASpecificFrame.clear();
float pos3D[4]= {0};
float position2DX=0.0,position2DY=0.0,position2DW=0.0;
float position2DOutputX=0.0,position2DOutputY=0.0;
float center[4]= {0};
float rotation[3]= {0};
for (unsigned int pointID=0; pointID<csv.numberOfHeaderFields/3; pointID++)
{
//--------------------------------------
pos3D[0]=(float) (scale3DX*csvLine.field[pointID * 3 + 0]) + offset3DX;
pos3D[1]=(float) (scale3DY*csvLine.field[pointID * 3 + 1]) + offset3DY;
pos3D[2]=(float) (scale3DZ*csvLine.field[pointID * 3 + 2]) + offset3DZ;
pos3D[3]=1.0;
//fprintf(stderr,"Projecting %0.2f,%0.2f,%0.2f : ",pos3D[0],pos3D[1],pos3D[2]);
//--------------------------------------
if (
simpleRendererRender(
&renderer,
pos3D,
center,
rotation,
ROTATION_ORDER_RPY,
&position2DX,
&position2DY,
&position2DW)
)
{
if (flipX) { position2DX = width - position2DX; }
if (flipY) { position2DY = height - position2DY; }
position2DOutputX=0.0;
position2DOutputY=0.0;
if (position2DW>0.0)
{
//fprintf(stderr,"output is %0.2f,%0.2f \n",position2DX,position2DY);
position2DOutputX = (scale2DX*position2DX) + offset2DX;
position2DOutputY = (scale2DY*position2DY) + offset2DY;
}
else
{
//fprintf(stderr,"behind camera(%0.2f).. %0.2f,%0.2f \n",position2DW,position2DX,position2DY);
}
//We normalize our 2D output..!
position2DOutputX=(float) position2DOutputX/renderer.width;
position2DOutputY=(float) position2DOutputY/renderer.height;
fprintf(stderr,"3D %0.2f,%0.2f,%0.2f => 2D %0.2f,%0.2f \n",pos3D[0],pos3D[1],pos3D[2],position2DOutputX,position2DOutputY);
points2DOfASpecificFrame.push_back(position2DOutputX);
points2DOfASpecificFrame.push_back(position2DOutputY);
}
else
{
points2DOfASpecificFrame.push_back(0.0);
points2DOfASpecificFrame.push_back(0.0);
}
} //For every point in this CSV line
result.push_back(points2DOfASpecificFrame);
++linesProcessed;
}//While we there are more lines to process
if (result.size()>0)
{
FILE * fp = fopen(outputPath,"w");
if (fp!=0)
{
fprintf(fp,"frameNumber,skeletonID,totalSkeletons");
for (unsigned int pointID=0; pointID<csv.numberOfHeaderFields/3; pointID++)
{
char * pointLabel = csv.field[pointID*3].str + 4; //This is the fastest way to get rid of the `3D*_` part of the stream
//Translate H36M labels to MNET labels..
if ( strcmp(pointLabel,"nose")==0 ) { fprintf(fp,",2DX_head,2DY_head,visible_head"); } else
if ( strcmp(pointLabel,"rwrist")==0 ) { fprintf(fp,",2DX_rhand,2DY_rhand,visible_rhand"); } else
if ( strcmp(pointLabel,"lwrist")==0 ) { fprintf(fp,",2DX_lhand,2DY_lhand,visible_lhand"); } else
if ( strcmp(pointLabel,"midhip")==0 ) { fprintf(fp,",2DX_hip,2DY_hip,visible_hip"); } else
if ( strcmp(pointLabel,"rheel")==0 ) { fprintf(fp,",2DX_rfoot,2DY_rfoot,visible_rfoot"); } else //rankle/lankle instead..
if ( strcmp(pointLabel,"lheel")==0 ) { fprintf(fp,",2DX_lfoot,2DY_lfoot,visible_lfoot"); } else
if ( strcmp(pointLabel,"reye")==0 ) { fprintf(fp,",2DX_endsite_eye.r,2DY_endsite_eye.r,visible_endsite_eye.r"); } else
if ( strcmp(pointLabel,"leye")==0 ) { fprintf(fp,",2DX_endsite_eye.l,2DY_endsite_eye.l,visible_endsite_eye.l"); } else
if ( strcmp(pointLabel,"rbigtoe")==0 ) { fprintf(fp,",2DX_endsite_toe1-2.r,2DY_endsite_toe1-2.r,visible_endsite_toe1-2.r"); } else
if ( strcmp(pointLabel,"lbigtoe")==0 ) { fprintf(fp,",2DX_endsite_toe1-2.l,2DY_endsite_toe1-2.l,visible_endsite_toe1-2.l"); } else
if ( strcmp(pointLabel,"rsmalltoe")==0 ) { fprintf(fp,",2DX_endsite_toe5-3.r,2DY_endsite_toe5-3.r,visible_endsite_toe5-3.r"); } else
if ( strcmp(pointLabel,"lsmalltoe")==0 ) { fprintf(fp,",2DX_endsite_toe5-3.l,2DY_endsite_toe5-3.l,visible_endsite_toe5-3.l"); } else
{ fprintf(fp,",2DX_%s,2DY_%s,visible_%s",pointLabel,pointLabel,pointLabel); }
}
fprintf(fp,"\n");
for (unsigned int frameID=0; frameID<result.size(); frameID++)
{
fprintf(fp,"%u,0,0",frameID);
for (unsigned int pointID=0; pointID<result[frameID].size(); pointID++)
{
if ( pointID%2==0) { fprintf(fp,",%f",result[frameID][pointID]); } else
{ fprintf(fp,",%f,1",result[frameID][pointID]); }
}
fprintf(fp,"\n");
}
fclose(fp);
}
}
closeCSVFile(&csv);
} //CSV file can be successfully opened
#else
fprintf(stderr,"This utility is only available if you compile the BVH code in..\n");
#endif
return 0;
}
@@ -0,0 +1,276 @@
#!/usr/bin/env python3
import numpy as np
import gc
import os
import sys
import csv
import time
import array
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from mpl_toolkits.mplot3d import axes3d, Axes3D
width=1920.0
height=1080.0
class bcolors:
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'
def pointListReturnXYListForScatterPlot(A):
numberOfPoints=A.shape[0]
xs=list()
ys=list()
frameNumber=A[0]
skeletonID=A[1]
totalSkeletons=A[2]
for i in range(3,int(numberOfPoints/3)):
x=width*float(A[i*3+0])
y=height*float(A[i*3+1])
visibility=int(A[i*3+2])
if (visibility==1):
xs.append(x)
ys.append(y)
print('Point(',x,',',y,')')
return xs,ys
def checkIfFileExists(filename):
return os.path.isfile(filename)
def convert_bytes(num):
"""
this function will convert bytes to MB.... GB... etc
"""
step_unit = 1000.0 #1024 bad the size
for x in ['bytes', 'KB', 'MB', 'GB', 'TB']:
if num < step_unit:
return "%3.1f %s" % (num, x)
num /= step_unit
def getNumberOfLines(filename):
print("Counting number of lines in file ",filename)
with open(filename) as f:
return sum(1 for line in f)
#---------------------------------------------------------------------------------------------------------------------------------------------
#---------------------------------------------------------------------------------------------------------------------------------------------
#---------------------------------------------------------------------------------------------------------------------------------------------
def readCSVFile(filename,memPercentage,csvDelimiter,useHalfFloats,groupOutput):
print("CSV file :",filename,"..\n")
if (not checkIfFileExists(filename)):
print( bcolors.WARNING + "Input file "+filename+" does not exist, cannot read ground truth.." + bcolors.ENDC)
print("Current Directory was "+os.getcwd())
sys.exit(0)
start = time.time()
dtypeSelected=np.dtype(np.float32)
dtypeSelectedByteSize=int(dtypeSelected.itemsize)
if (useHalfFloats):
dtypeSelected=np.dtype(np.float16)
dtypeSelectedByteSize=int(dtypeSelected.itemsize)
progress=0.0
sampleNumber=0
receivedHeader=0
inputNumberOfColumns=0
inputLabels=list()
#-------------------------------------------------------------------------------------------------
numberOfSamplesInput=getNumberOfLines(filename)-2
print(" Input file has ",numberOfSamplesInput," training samples\n")
#-------------------------------------------------------------------------------------------------
numberOfSamples = numberOfSamplesInput
numberOfSamplesLimit=int(numberOfSamples*memPercentage)
#-------------------------------------------------------------------------------------------------
if (memPercentage==0.0):
print("readGroundTruthFile was asked to occupy 0 memory so this probably means we just want one record")
numberOfSamplesLimit=2
if (memPercentage>1.0):
print("Memory Limit will be interpreted as a raw value..")
numberOfSamplesLimit=int(memPercentage)
#-------------------------------------------------------------------------------------------------
thisInput = array.array('f')
#---------------------------------
fi = open(filename, "r")
readerIn = csv.reader( fi , delimiter=csvDelimiter, skipinitialspace=True)
for rowIn in readerIn:
#------------------------------------------------------
if (not receivedHeader): #use header to get labels
#------------------------------------------------------
inputNumberOfColumns=len(rowIn)
#Make sure CSV files that end with delimiter are correctly handled..
if (inputNumberOfColumns>0):
if (rowIn[inputNumberOfColumns-1]==''):
inputNumberOfColumns=inputNumberOfColumns-1
#-----------------------------------------------------
inputLabels = list(rowIn[i] for i in range(0,inputNumberOfColumns) )
print("Number of Input elements : ",len(inputLabels))
#------------------------------------------------------
if (memPercentage==0):
print("Will only return labels\n")
return {'labels':inputLabels};
#i=0
#print("class Input(Enum):")
#for label in inputLabels:
# print(" ",label," = ",i," #",int(i/3))
# print(" ",label,"=",int(i/3))
# i=i+1
#---------------------------------
# Allocate Lists
#---------------------------------
for i in range(inputNumberOfColumns):
thisInput.append(0.0)
#---------------------------------
#---------------------------------
# Allocate Numpy Arrays
#---------------------------------
inputSize=0
startCompressed=0
inputSize=inputSize+inputNumberOfColumns
startCompressed=inputNumberOfColumns
npInputBytesize=0+numberOfSamplesLimit * inputSize * dtypeSelectedByteSize
print(" Input file on disk has a shape of [",numberOfSamples,",",inputSize,"]")
print(" Input we will read has a shape of [",numberOfSamplesLimit,",",inputSize,"]")
print(" Input will occupy ",convert_bytes(npInputBytesize)," of RAM\n")
npInput = np.full([numberOfSamplesLimit,inputSize],fill_value=0,dtype=dtypeSelected,order='C')
#----------------------------------------------------------------------------------------------------------
receivedHeader=1
#sys.exit(0)
else:
#-------------------------------------------
# First convert our string INPUT to floats
#-------------------------------------------
for i in range(inputNumberOfColumns):
thisInput[i]=float(rowIn[i])
#-------------------------------------------
for num in range(0,inputNumberOfColumns):
npInput[sampleNumber,num]=float(thisInput[num]);
#-------------------------------------------
sampleNumber=sampleNumber+1
if (numberOfSamples>0):
progress=sampleNumber/numberOfSamplesLimit
if (sampleNumber%1000==0) :
progressString = "%0.2f"%float(100*progress)
print("\rReading from disk (",sampleNumber,") - ",progressString," % \r", end="", flush=True)
if (numberOfSamplesLimit<=sampleNumber):
print("\rStopping reading file to obey memory limit given by parameter --mem ",memPercentage,"\n")
break
#-------------------------------------------
fi.close()
del readerIn
gc.collect()
print("\n read, Samples: ",sampleNumber,", was expecting ",numberOfSamples," samples\n")
print(npInput.shape)
totalNumberOfBytes=npInput.nbytes;
totalNumberOfGigaBytes=totalNumberOfBytes/1073741824;
print("Size Occupied by data = ",totalNumberOfGigaBytes," GB \n")
end = time.time()
print("Time elapsed : ",(end-start)/60," mins")
#---------------------------------------------------------------------
if (groupOutput==0):
#New better dictionary
output = dict()
for i in range(0,len(inputLabels)):
lowerCaseName = inputLabels[i].lower()
#print("Joint ",lowerCaseName)
output[lowerCaseName]=list()
for frameID in range(0,len(npInput)):
output[lowerCaseName].append(npInput[frameID][i])
return output
else:
#This is the old dictionary way (better for tensorflow training)
return {'label':inputLabels, 'body':npInput };
#---------------------------------------------------------------------------------------------------------------------------------------------
#---------------------------------------------------------------------------------------------------------------------------------------------
#---------------------------------------------------------------------------------------------------------------------------------------------
drawPlot=1
ground=readCSVFile("test2D.csv",1.0,',',0,1)
if (drawPlot):
print("Using matplotlib:",matplotlib.__version__)
# === Plot and animate ===
fig = plt.figure()
fig.set_size_inches(19.2, 10.8, forward=True)
ax = fig.add_subplot(1, 2, 1)
ax2 = fig.add_subplot(1, 2, 2)
#ax3 = fig.add_subplot(2, 2, 3)
#ax4 = fig.add_subplot(2, 2, 4)
fig.subplots_adjust(left=0.05, bottom=0.05, right=0.95, top=0.95)
ax.set_xlabel('X Axis')
ax.set_ylabel('Y Axis')
#ax.set_zlabel('Z Axis')
#ax.view_init(90, 90)
print("Ground truth file has %u elements ",len(ground['body']))
for i in range(0,len(ground['body'])):
if (drawPlot):
plt.cla()
ax.cla()
ax2.cla()
xs, ys = pointListReturnXYListForScatterPlot(ground['body'][i])
ax.scatter(xs, ys)
img = plt.imread("images/im%u.png" % i)
ax2.imshow(img)
#-------------------------
ax.set_xlim(auto=False,left=0,right=width)
ax.set_ylim(auto=False,bottom=height,top=0)
#ax.set_zlim(auto=False,bottom=2000,top=6000)
ax.set_xlabel('X Axis')
ax.set_ylabel('Y Axis')
#ax.set_zlabel('Z Axis')
#-------------------------
plt.show(block=False)
#plt.savefig('p%05u.png'%i)
#fig.canvas.draw()
plt.pause(0.102)
@@ -0,0 +1,316 @@
#!/usr/bin/env python3
import numpy as np
import gc
import os
import sys
import csv
import time
import array
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from mpl_toolkits.mplot3d import axes3d, Axes3D
class bcolors:
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'
def pointListReturnXYZListForScatterPlot(A):
numberOfPoints=A.shape[0]
xs=list()
ys=list()
zs=list()
for i in range(0,int(numberOfPoints/3)):
xs.append(float(-1000*10*A[i*3+0]))
ys.append(float(1000*10*A[i*3+1]))
zs.append(float(1000*10*A[i*3+2]))
return xs,ys,zs
def checkIfFileExists(filename):
return os.path.isfile(filename)
def convert_bytes(num):
"""
this function will convert bytes to MB.... GB... etc
"""
step_unit = 1000.0 #1024 bad the size
for x in ['bytes', 'KB', 'MB', 'GB', 'TB']:
if num < step_unit:
return "%3.1f %s" % (num, x)
num /= step_unit
def getNumberOfLines(filename):
print("Counting number of lines in file ",filename)
with open(filename) as f:
return sum(1 for line in f)
#---------------------------------------------------------------------------------------------------------------------------------------------
#---------------------------------------------------------------------------------------------------------------------------------------------
#---------------------------------------------------------------------------------------------------------------------------------------------
def readCSVFile(filename,memPercentage,csvDelimiter,useHalfFloats,groupOutput):
print("CSV file :",filename,"..\n")
if (not checkIfFileExists(filename)):
print( bcolors.WARNING + "Input file "+filename+" does not exist, cannot read ground truth.." + bcolors.ENDC)
print("Current Directory was "+os.getcwd())
sys.exit(0)
start = time.time()
dtypeSelected=np.dtype(np.float32)
dtypeSelectedByteSize=int(dtypeSelected.itemsize)
if (useHalfFloats):
dtypeSelected=np.dtype(np.float16)
dtypeSelectedByteSize=int(dtypeSelected.itemsize)
progress=0.0
sampleNumber=0
receivedHeader=0
inputNumberOfColumns=0
inputLabels=list()
#-------------------------------------------------------------------------------------------------
numberOfSamplesInput=getNumberOfLines(filename)-2
print(" Input file has ",numberOfSamplesInput," training samples\n")
#-------------------------------------------------------------------------------------------------
numberOfSamples = numberOfSamplesInput
numberOfSamplesLimit=int(numberOfSamples*memPercentage)
#-------------------------------------------------------------------------------------------------
if (memPercentage==0.0):
print("readGroundTruthFile was asked to occupy 0 memory so this probably means we just want one record")
numberOfSamplesLimit=2
if (memPercentage>1.0):
print("Memory Limit will be interpreted as a raw value..")
numberOfSamplesLimit=int(memPercentage)
#-------------------------------------------------------------------------------------------------
thisInput = array.array('f')
#---------------------------------
fi = open(filename, "r")
readerIn = csv.reader( fi , delimiter=csvDelimiter, skipinitialspace=True)
for rowIn in readerIn:
#------------------------------------------------------
if (not receivedHeader): #use header to get labels
#------------------------------------------------------
inputNumberOfColumns=len(rowIn)
#Make sure CSV files that end with delimiter are correctly handled..
if (inputNumberOfColumns>0):
if (rowIn[inputNumberOfColumns-1]==''):
inputNumberOfColumns=inputNumberOfColumns-1
#-----------------------------------------------------
inputLabels = list(rowIn[i] for i in range(0,inputNumberOfColumns) )
print("Number of Input elements : ",len(inputLabels))
#------------------------------------------------------
if (memPercentage==0):
print("Will only return labels\n")
return {'labels':inputLabels};
#i=0
#print("class Input(Enum):")
#for label in inputLabels:
# print(" ",label," = ",i," #",int(i/3))
# print(" ",label,"=",int(i/3))
# i=i+1
#---------------------------------
# Allocate Lists
#---------------------------------
for i in range(inputNumberOfColumns):
thisInput.append(0.0)
#---------------------------------
#---------------------------------
# Allocate Numpy Arrays
#---------------------------------
inputSize=0
startCompressed=0
inputSize=inputSize+inputNumberOfColumns
startCompressed=inputNumberOfColumns
npInputBytesize=0+numberOfSamplesLimit * inputSize * dtypeSelectedByteSize
print(" Input file on disk has a shape of [",numberOfSamples,",",inputSize,"]")
print(" Input we will read has a shape of [",numberOfSamplesLimit,",",inputSize,"]")
print(" Input will occupy ",convert_bytes(npInputBytesize)," of RAM\n")
npInput = np.full([numberOfSamplesLimit,inputSize],fill_value=0,dtype=dtypeSelected,order='C')
#----------------------------------------------------------------------------------------------------------
receivedHeader=1
#sys.exit(0)
else:
#-------------------------------------------
# First convert our string INPUT to floats
#-------------------------------------------
for i in range(inputNumberOfColumns):
thisInput[i]=float(rowIn[i])
#-------------------------------------------
for num in range(0,inputNumberOfColumns):
npInput[sampleNumber,num]=float(thisInput[num]);
#-------------------------------------------
sampleNumber=sampleNumber+1
if (numberOfSamples>0):
progress=sampleNumber/numberOfSamplesLimit
if (sampleNumber%1000==0) :
progressString = "%0.2f"%float(100*progress)
print("\rReading from disk (",sampleNumber,") - ",progressString," % \r", end="", flush=True)
if (numberOfSamplesLimit<=sampleNumber):
print("\rStopping reading file to obey memory limit given by parameter --mem ",memPercentage,"\n")
break
#-------------------------------------------
fi.close()
del readerIn
gc.collect()
print("\n read, Samples: ",sampleNumber,", was expecting ",numberOfSamples," samples\n")
print(npInput.shape)
totalNumberOfBytes=npInput.nbytes;
totalNumberOfGigaBytes=totalNumberOfBytes/1073741824;
print("Size Occupied by data = ",totalNumberOfGigaBytes," GB \n")
end = time.time()
print("Time elapsed : ",(end-start)/60," mins")
#---------------------------------------------------------------------
if (groupOutput==0):
#New better dictionary
output = dict()
for i in range(0,len(inputLabels)):
lowerCaseName = inputLabels[i].lower()
#print("Joint ",lowerCaseName)
output[lowerCaseName]=list()
for frameID in range(0,len(npInput)):
output[lowerCaseName].append(npInput[frameID][i])
return output
else:
#This is the old dictionary way (better for tensorflow training)
return {'label':inputLabels, 'body':npInput };
#---------------------------------------------------------------------------------------------------------------------------------------------
#---------------------------------------------------------------------------------------------------------------------------------------------
#---------------------------------------------------------------------------------------------------------------------------------------------
drawPlot=1
ground=readCSVFile("ground3D.csv",1.0,',',0,1)
if (drawPlot):
print("Using matplotlib:",matplotlib.__version__)
# === Plot and animate ===
fig = plt.figure()
fig.set_size_inches(19.2, 10.8, forward=True)
ax = fig.add_subplot(1, 2, 1, projection='3d')
ax2 = fig.add_subplot(1, 2, 2)
#ax3 = fig.add_subplot(2, 2, 3)
#ax4 = fig.add_subplot(2, 2, 4)
fig.subplots_adjust(left=0.05, bottom=0.05, right=0.95, top=0.95)
ax.set_xlabel('X Axis')
ax.set_ylabel('Y Axis')
ax.set_zlabel('Z Axis')
ax.view_init(90, 90)
print("Ground truth file has %u elements ",len(ground['body']))
for i in range(0,len(ground['body'])):
if (drawPlot):
plt.cla()
ax.cla()
ax2.cla()
#ax3.cla()
#ax4.cla()
categories = np.array([0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20
])
color0=(0.0, 1.0, 1.0, 1.0) #Palm
color1=(0.6, 0.0, 0.0, 1.0) #Thumb
color2=(0.8, 0.0, 0.0, 1.0) #Finger 1.2
color3=(1.0, 0.0, 0.0, 1.0) #Finger 1.3
color4=(0.0, 1.0, 1.0, 1.0) #BaseOfFourFingers
color5=(0.0, 1.0, 0.0, 1.0) #Finger 2.3
color6=(0.0, 0.8, 0.0, 1.0) #Finger 2.2
color7=(0.0, 0.6, 0.0, 1.0) #Finger 2.1
color8=(0.0, 0.4, 0.0, 1.0) #Metacarpal 1
color9=(0.0, 0.0, 1.0, 1.0) #Finger 3.3
color10=(0.0, 0.0, 0.8, 1.0) #Finger 3.2
color11=(0.0, 0.0, 0.6, 1.0) #Finger 3.1
color12=(0.0, 0.0, 0.4, 1.0) #Metacarpal 2
color13=(0.0, 1.0, 1.0, 1.0) #Finger 4.3
color14=(0.0, 0.8, 0.8, 1.0) #Finger 4.2
color15=(0.0, 0.6, 0.6, 1.0) #Finger 4.1
color16=(0.0, 0.4, 0.4, 1.0) #Metacarpal 3
color17=(1.0, 1.0, 0.0, 1.0) #Finger 5.3
color18=(0.8, 0.8, 0.0, 1.0) #Finger 5.2
color19=(0.6, 0.6, 0.0, 1.0) #Finger 5.1
color20=(0.4, 0.4, 0.0, 1.0) #Metacarpal 4
colormap = np.array([color0,color1,color2,color3,color4,color5,color6,color7,color8,color9,color10,color11,color12,color13,color14,color15,color16,color17,color18,color19,color20])
xs, ys, zs = pointListReturnXYZListForScatterPlot(ground['body'][i])
ax.scatter(xs, ys, zs, c=colormap[categories])
img = plt.imread("images/im%u.png" % i)
ax2.imshow(img)
#-------------------------
ax.set_xlim(auto=False,left=-600,right=300)
ax.set_ylim(auto=False,bottom=-1600,top=200)
ax.set_zlim(auto=False,bottom=2000,top=6000)
ax.set_xlabel('X Axis')
ax.set_ylabel('Y Axis')
ax.set_zlabel('Z Axis')
#-------------------------
plt.show(block=False)
#plt.savefig('p%05u.png'%i)
#fig.canvas.draw()
plt.pause(0.001)
@@ -0,0 +1,18 @@
project( HandOnlyTest )
cmake_minimum_required( VERSION 2.8.7 )
#cmake_minimum_required(VERSION 3.5)
find_package(OpenCV REQUIRED)
INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS})
add_executable(HandOnlyTest handTest.cpp)
target_link_libraries(HandOnlyTest rt dl m ${OpenCV_LIBRARIES} Tensorflow TensorflowFramework MocapNETLib2 )
set_target_properties(HandOnlyTest PROPERTIES DEBUG_POSTFIX "D")
set_target_properties(HandOnlyTest PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
)
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,23 @@
project( MocapNET2LiveWebcamDemo )
cmake_minimum_required( VERSION 2.8.13 )
#cmake_minimum_required(VERSION 3.5)
find_package(OpenCV REQUIRED)
INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS})
#set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set(CMAKE_CXX_STANDARD 11)
include_directories(${TENSORFLOW_INCLUDE_ROOT})
add_executable(MocapNET2LiveWebcamDemo livedemo.cpp )
target_link_libraries(MocapNET2LiveWebcamDemo rt dl m ${OpenCV_LIBRARIES} ${OPENGL_LIBS} JointEstimator2D Tensorflow TensorflowFramework MocapNETLib2 ${NETWORK_CLIENT_LIBRARIES} ${PNG_Libs} ${JPG_Libs} )
set_target_properties(MocapNET2LiveWebcamDemo PROPERTIES DEBUG_POSTFIX "D")
set_target_properties(MocapNET2LiveWebcamDemo PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
)
@@ -0,0 +1,516 @@
#include "opencv2/opencv.hpp"
/** @file livedemo.cpp
* @brief This is the main "demo" offered in this repository, it will take a stream from a webcam or video file using OpenCV and run
* 2D pose estimation + MocapNET giving you a nice 3D visualization as well as an output .bvh file
* @author Ammar Qammaz (AmmarkoV)
*/
#include <stdio.h>
#include <unistd.h>
//-----------------------------------------------------------------
#include "../../JointEstimator2D/cameraControl.hpp"
#include "../../JointEstimator2D/jointEstimator2D.hpp"
#include "../../JointEstimator2D/visualization.hpp"
//-----------------------------------------------------------------
#include "../../MocapNET2/MocapNETLib2/mocapnet2.hpp"
#include "../../MocapNET2/MocapNETLib2/applicationLogic/parseCommandlineOptions.hpp"
#include "../../MocapNET2/MocapNETLib2/IO/commonSkeleton.hpp"
#include "../../MocapNET2/MocapNETLib2/IO/conversions.hpp"
#include "../../MocapNET2/MocapNETLib2/IO/bvh.hpp"
#include "../../MocapNET2/MocapNETLib2/IO/csvRead.hpp"
#include "../../MocapNET2/MocapNETLib2/IO/csvWrite.hpp"
#include "../../MocapNET2/MocapNETLib2/IO/skeletonAbstraction.hpp"
//-----------------------------------------------------------------
#include "../../MocapNET2/MocapNETLib2/visualization/visualization.hpp"
#include "../../MocapNET2/MocapNETLib2/visualization/map.hpp"
//-----------------------------------------------------------------
#include "../../MocapNET2/MocapNETLib2/tools.hpp"
using namespace cv;
#define NORMAL "\033[0m"
#define BLACK "\033[30m" /* Black */
#define RED "\033[31m" /* Red */
#define GREEN "\033[32m" /* Green */
#define YELLOW "\033[33m" /* Yellow */
int main(int argc, char *argv[])
{
struct MocapNET2Options options= {0};
struct MocapNET2 mnet= {0};
mnet.options = & options;
struct JointEstimator2D jointEstimator;
std::vector<float> inputValues;
std::vector<std::vector<float> > exactMocapNET2DOutput;
std::vector<std::vector<float> > output3DPositions;
std::vector<float> points3DFlatOutput;
struct skeletonSerialized resultAsSkeletonSerialized= {0};
float frameRateSummary = 0.0;
unsigned int frameSamples=0;
defaultMocapNET2Options(&options);
/*
* Force effortless IK configuration on Webcam Demo
*/
//Be unconstrained by default
options.constrainPositionRotation=0;
//Use IK ========
options.useInverseKinematics=1;
options.learningRate=0.01;
options.iterations=5;
options.epochs=30.0;
options.spring=1.0;
//==============
//640x480 should be a high framerate compatible resolution
//for most webcams, you can change this using --size X Y commandline parameter
options.width = 640;
options.height = 480;
loadOptionsFromCommandlineOptions(&options,argc,argv);
std::cerr<<"Trying to open source ("<<options.webcamSource<<") \n";
VideoCapture cap(options.webcamSource); // open the default camera
int itIsTheFirstFrame=1;
Mat singleImageFrame;
Mat frame;
Mat frameCentered;
if (
(strstr(options.webcamSource,".jpg")!=0) ||
(strstr(options.webcamSource,".png")!=0)
)
{
std::cerr<<"Source seems to be a single image ("<<options.webcamSource<<") \n";
options.frameLimit = 20; //let it warmup for a few frames..
options.inputIsSingleImage = 1;
options.doOutputFiltering = 0; //There is no motion to filter so skip this
singleImageFrame=imread(options.webcamSource);
singleImageFrame.copyTo(frame);
} else
if (strstr(options.webcamSource,"/dev/video")!=0)
{
std::cerr<<"Source seems to be a webcam ("<<options.webcamSource<<" @ "<<options.width<<","<<options.height<<") \n";
options.inputIsSingleImage = 0;
cap.set(cv::CAP_PROP_FRAME_WIDTH,options.width);
cap.set(cv::CAP_PROP_FRAME_HEIGHT,options.height);
}
//This needs to be grabbed to initialize window sizes either on video source, or on webcam source
//--------------------------------------------------------------------
if (!options.inputIsSingleImage)
{ cap >> frame; }
//--------------------------------------------------------------------
//We will accept the input resolution and force it
//on visualization..
options.width = frame.size().width;
options.height = frame.size().height;
options.visWidth = frame.size().width;
options.visHeight = frame.size().height;
//-----------------------------------------------------
//We might want to load a special bvh file based on our options..!
loadOptionsAfterBVHLoadFromCommandlineOptions(&options,argc,argv);
//If the initialization didnt happen inside the previous call lets do it now
if (!options.hasInit)
{
if (initializeBVHConverter(0,options.visWidth,options.visHeight,0))
{
fprintf(stderr,"BVH code initalization successfull..\n");
options.hasInit=1;
}
}
//--------------------------------------------------------------------------
//Switch to realtime priority before opening tensorflow stuff..
requestRealtimePriority();
if (loadJointEstimator2D(
&jointEstimator,
options.
jointEstimatorUsed,
1,
options.useCPUOnlyFor2DEstimator
))
{
if ( loadMocapNET2(&mnet,"Live Demo") )
{
//------------------------------
mnet.learningRate=options.learningRate;
mnet.iterations=options.iterations;
mnet.epochs=options.epochs;
mnet.spring=options.spring;
//------------------------------
cv::Mat viewMat = Mat(Size(jointEstimator.inputWidth2DJointDetector,jointEstimator.inputHeight2DJointDetector),CV_8UC3, Scalar(0,0,0));
struct Skeletons2DDetected skeleton2DEstimations= {0};
if (options.visualize)
{
//cv::namedWindow("Video Input Feed",1);
//cv::moveWindow("Video Input Feed",0,368);
cv::namedWindow("3D Points Output",1);
cv::moveWindow("3D Points Output",0,0);
cv::namedWindow("Skeletons",1);
cv::moveWindow("Skeletons",1920-jointEstimator.inputWidth2DJointDetector-50,100);
}
unsigned int frameID=0;
unsigned int skippedFramesInARow=0;
std::vector<float> result;
std::vector<float> previousResult;
float totalTime=0.0;
unsigned int totalSamples=0;
std::vector<std::vector<float> > bvhFrames;
struct skeletonSerialized skeleton= {0};
while ( (options.frameLimit==0) || (frameID<options.frameLimit) )
{
options.loopStartTime = GetTickCountMicrosecondsMN();
if (options.inputIsSingleImage) { singleImageFrame.copyTo(frame); } else
if (itIsTheFirstFrame) { itIsTheFirstFrame=0; } else
{ cap >> frame; }
//If we are running in a low-end computer and need to keep in sync with a live video feed we can frame-skip
if (options.frameSkip)
{
for (int i=0; i<options.frameSkip; i++)
{
cap >> frame;
}
}
frame.copyTo(frameCentered);
if ( (frameCentered.size().width>0) && (frameCentered.size().height>0) )
{
if (
!cropAndResizeCVMatToMatchSkeleton(
&jointEstimator,
frameCentered,
&skeleton2DEstimations
)
)
{
fprintf(stderr,"Failed to crop input video\n");
}
//imshow("Video Input Feed", frameCentered);
frameCentered.copyTo(viewMat);
// viewMat.setTo(Scalar(0,0,0));
//Tensorflow works with Floating point input so we need to convert our buffer..
frameCentered.convertTo(frameCentered,CV_32FC3);
//At this point we are ready to execute the neural network
long startTime2D = GetTickCountMicrosecondsMN();
//We count the framerate of our acquisition
options.fpsAcquisition = convertStartEndTimeFromMicrosecondsToFPS(options.loopStartTime,startTime2D);
std::vector<std::vector<float> > heatmaps = getHeatmaps(
&jointEstimator,
frameCentered.data,
jointEstimator.inputWidth2DJointDetector,
jointEstimator.inputHeight2DJointDetector
);
if (heatmaps.size()>0)
{
//This will spam with small heatmap windows
//visualizeHeatmaps(&jointEstimator,heatmaps,frameID);
estimate2DSkeletonsFromHeatmaps(&jointEstimator,&skeleton2DEstimations,heatmaps);
long endTime2D = GetTickCountMicrosecondsMN();
options.fps2DEstimator = convertStartEndTimeFromMicrosecondsToFPS(startTime2D,endTime2D);
if (options.visualize)
{
dj_drawExtractedSkeletons(
viewMat,
&skeleton2DEstimations,
jointEstimator.inputWidth2DJointDetector,
jointEstimator.inputHeight2DJointDetector
);
}
float percentageOf2DPointsMissing = percentOf2DPointsMissing(&skeleton2DEstimations);
if ( percentageOf2DPointsMissing < 50.0 ) //only work when less than 50% of information missing..
{
skippedFramesInARow=0;
//We want to go from the original normalized values of skeleton2DEstimations to the original
//Resolution we grabbed our initial frame @ before cropping..
restore2DJointsToInputFrameCoordinates(&jointEstimator,&skeleton2DEstimations);
//Now that our points have their initial size let's perform a conversion to the internal
//serialized skeleton data structure that will prepare them for use in MocapNET
convertSkeletons2DDetectedToSkeletonsSerialized(
&skeleton,
&skeleton2DEstimations,
frameID,
jointEstimator.crop.frameWidth,
jointEstimator.crop.frameHeight
);
takeCareOfScalingInputAndAddingNoiseAccordingToOptions(&options,&skeleton);
unsigned int feetAreMissing=areFeetMissing(&skeleton);
long startTime = GetTickCountMicrosecondsMN();
//--------------------------------------------------------
previousResult = result;
result = runMocapNET2(
&mnet,
&skeleton,
( (options.doLowerBody) && (!feetAreMissing) ),
options.doHands,
options.doFace,
options.doGestureDetection,
options.useInverseKinematics,
options.doOutputFiltering
);
bvhFrames.push_back(result);
//--------------------------------------------------------
long endTime = GetTickCountMicrosecondsMN();
options.fpsMocapNET = convertStartEndTimeFromMicrosecondsToFPS(startTime,endTime);
frameRateSummary += options.fpsMocapNET;
++frameSamples;
//--------------------------------------------------------
options.numberOfMissingJoints = upperbodyCountMissingNSDMElements(mnet.upperBody.NSDM,0 /*Dont spam */);
//Don't spam with missing joints..
//fprintf(stderr,"Number of missing joints for UpperBody %u\n",options.numberOfMissingJoints);
//Convert BVH frame to 2D points to show on screen
exactMocapNET2DOutput = convertBVHFrameTo2DPoints(result);//,MocapNETTrainingWidth,MocapNETTrainingHeight);
if (options.saveCSV3DFile)
{
//Convert BVH frame to 3D points to output on a file
points3DFlatOutput=convertBVHFrameToFlat3DPoints(result);//,MocapNETTrainingWidth,MocapNETTrainingHeight);
output3DPositions.push_back(points3DFlatOutput); //3d Input
}
resultAsSkeletonSerialized.skeletonHeaderElements = skeleton.skeletonHeaderElements;
resultAsSkeletonSerialized.skeletonBodyElements = skeleton.skeletonBodyElements;
if (
convertMocapNET2OutputToSkeletonSerialized(
&mnet,
&resultAsSkeletonSerialized,
exactMocapNET2DOutput,
frameID,
MocapNETTrainingWidth,
MocapNETTrainingHeight
)
)
{
//TODO : Compare resultAsSkeletonSerialized and skeleton
doReprojectionCheck(&skeleton,&resultAsSkeletonSerialized);
}
}
else
{
if (skippedFramesInARow%30==0)
{ fprintf(stderr,"."); }
++skippedFramesInARow;
}
if (options.visualize)
{
visualizationCommander(
&mnet,
&options,
&skeleton,
&frame,
result,
exactMocapNET2DOutput,
frameID,
1// We will do the waitKey call ourselves
);
if ( (viewMat.size().width >0) && (viewMat.size().height>0) )
{ imshow("Skeletons", viewMat); } else
{ std::cerr<<"Invalid skeleton visualization frame.. \n"; }
}
}
}
else
{
std::cerr<<"Broken frame.. \n";
++options.brokenFrames;
if (options.brokenFrames>10)
{
std::cerr<<"Too many broken frames.. \n";
break;
}
}
options.loopEndTime = GetTickCountMicrosecondsMN();
options.totalLoopFPS = convertStartEndTimeFromMicrosecondsToFPS(options.loopStartTime,options.loopEndTime);
//------------------------------------------------------
// These final calls add delays to frame processing so
// they are not counted in loop time
//------------------------------------------------------
//Frames should increment even when visualization is off..
++frameID;
if (options.visualize)
{
char key = 0;
if (options.delay!=0)
{
key = waitKey(options.delay);
} else
{
key = waitKey(1);
}
if (key==27)
{
fprintf(stderr,GREEN "Received Escape key from UI, terminating the application.." NORMAL);
break;
}
}
if (options.delay!=0)
{
nsleep(options.delay*1000);
}
//------------------------------------------------------
} // End of grabber loop
if (options.bvhCenter)
{
for (unsigned int i=0; i<bvhFrames.size(); i++)
{
bvhFrames[i][0]=0;
bvhFrames[i][1]=0;
bvhFrames[i][2]=0;
}
}
if (options.dontBend)
{
for (unsigned int i=0; i<bvhFrames.size(); i++)
{
if (bvhFrames[i][3]>10) { bvhFrames[i][3]=10; } else
if (bvhFrames[i][3]<-10) { bvhFrames[i][3]=-10; }
}
}
//fix https://github.com/FORTH-ModelBasedTracker/MocapNET/issues/35
fixBVHHip(bvhFrames);
if ( writeBVHFile(options.outputPath,0,options.prependTPose,bvhFrames) )
{
fprintf(stderr,GREEN "Successfully wrote %lu frames to bvh file.. \n" NORMAL,bvhFrames.size());
}
else
{
fprintf(stderr,RED "Failed to write %lu frames to bvh file.. \n" NORMAL,bvhFrames.size());
}
if (options.saveCSV3DFile)
{
fprintf(stderr,"Will now write 3D output to out3DP.csv.. \n");
//----------------------------------------------------------------------------------------------------------------------------------
if ( writeCSVHeaderFromLabelsAndVectorOfVectors("out3DP.csv",MocapNET3DPositionalOutputArrayNames,MOCAPNET_3DPOINT_NUMBER,output3DPositions) )
{
fprintf(stderr,GREEN "Successfully wrote %lu frames to csv file.. \n" NORMAL,output3DPositions.size());
}
else
{
fprintf(stderr,RED "Failed to write %lu frames to bvh file.. \n" NORMAL,output3DPositions.size());
}
}
if ( (options.save3DVisualization) || (options.save2DVisualization) )
{
int highResEncoding=1;
char formatString[256];
if (highResEncoding)
{
snprintf(formatString,256,"ffmpeg -framerate %f -i vis%%05d.jpg -s 1200x720 -y -r %f -pix_fmt yuv420p -threads 8 livelastRun3DHiRes.mp4 && rm ./*.jpg",options.inputFramerate,options.inputFramerate);
} else
{
snprintf(formatString,256,"ffmpeg -framerate %f -i vis%%05d.jpg -y -r %f -threads 8 -crf 9 -pix_fmt yuv420p lastRun3D.webm && rm ./*.jpg",options.inputFramerate,options.inputFramerate);
}
int i=system(formatString);
if (i==0)
{
fprintf(stderr,"Successfully wrote video file.. \n");
}
else
{
fprintf(stderr,"Failed to write a video file.. \n");
}
}
unloadMocapNET2(&mnet);
} //3D pose estimator ok
} //2D joint estimator ok
//Offer a summary of system and the achieved framerate..!
if (frameSamples!=0)
{
fprintf(stderr,"\n\nMocapNET v%s execution summary :\n",MocapNETVersion);
fprintf(stderr,"__________________________________________\n");
//neuralNetworkPrintVersion();
printBVHCodeVersion();
fprintf(stderr,"CPU : %s \n",options.CPUName);
fprintf(stderr,"GPU : %s \n",options.GPUName);
fprintf(stderr,"Average framerate for %u samples was %0.2f fps \n",frameSamples,((float) frameRateSummary/frameSamples) );
//Offer some info on options of the run executed..
//-------------------------------------------------
if (options.doMultiThreadedIK)
{ fprintf(stderr,"Multi-threading was on\n"); }
//-------------------------------------------------
if (codeOptimizationsForIKEnabled())
{ fprintf(stderr,"Code optimizations where on\n"); }
//-------------------------------------------------
if (options.jointEstimatorUsed==JOINT_2D_ESTIMATOR_FORTH)
{ fprintf(stderr,"You can achieve better accuracy by using the homebrewed OpenPose 2D joint estimator using --openpose\n"); }
//-------------------------------------------------
if (options.jointEstimatorUsed==JOINT_2D_ESTIMATOR_OPENPOSE)
{ fprintf(stderr,"You can achieve faster framerates with the bundled FORTH 2D joint estimator using --forth\n"); }
//-------------------------------------------------
}
// the camera will be deinitialized automatically in VideoCapture destructor
return 0;
}
@@ -0,0 +1,18 @@
project( MocapNET2CSV )
cmake_minimum_required( VERSION 2.8.13 )
#cmake_minimum_required(VERSION 3.5)
find_package(OpenCV REQUIRED)
INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS})
add_executable(MocapNET2CSV mocapnet2CSV.cpp )
target_link_libraries(MocapNET2CSV rt dl m ${OpenCV_LIBRARIES} Tensorflow TensorflowFramework MocapNETLib2 )
set_target_properties(MocapNET2CSV PROPERTIES DEBUG_POSTFIX "D")
set_target_properties(MocapNET2CSV PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
)
@@ -0,0 +1,400 @@
/*
* Utility to extract BVH files straight from OpenPose JSON output
* Sample usage ./MocapNETCSV --from test.csv --visualize
*/
#include "../MocapNETLib2/mocapnet2.hpp"
#include <iostream>
#include <vector>
#include <math.h>
#include <string.h>
#include <unistd.h>
#include "../MocapNETLib2/applicationLogic/parseCommandlineOptions.hpp"
#include "../MocapNETLib2/tools.hpp"
#include "../MocapNETLib2/visualization/map.hpp"
#include "../MocapNETLib2/visualization/visualization.hpp"
#include "../MocapNETLib2/visualization/camera_ready.hpp"
//------------------------------------------
#include "../MocapNETLib2/IO/bvh.hpp"
#include "../MocapNETLib2/IO/csvRead.hpp"
#include "../MocapNETLib2/IO/csvWrite.hpp"
#include "../MocapNETLib2/IO/jsonRead.hpp"
#include "../MocapNETLib2/IO/jsonMocapNETHelpers.hpp"
#include "../MocapNETLib2/IO/conversions.hpp"
#include "../MocapNETLib2/IO/skeletonAbstraction.hpp"
//---------------------------------------------------
#define NORMAL "\033[0m"
#define BLACK "\033[30m" /* Black */
#define RED "\033[31m" /* Red */
#define GREEN "\033[32m" /* Green */
#define YELLOW "\033[33m" /* Yellow */
int main(int argc, char *argv[])
{
struct MocapNET2Options options= {0};
struct MocapNET2 mnet= {0};
mnet.options = & options;
struct skeletonSerialized resultAsSkeletonSerialized= {0};
defaultMocapNET2Options(&options);
options.GPUName[0]=0; //The CSV demo does not use the GPU so don't display it..
/*
* Force effortless IK configuration on CSV demo
*/
//Be unconstrained by default
options.constrainPositionRotation=0;
//Use IK ========
options.useInverseKinematics=1;
options.learningRate=0.01;
options.iterations=5;//5;
options.epochs=30.0;
options.spring=0.0; //Deprecated ?
//==============
//640x480 should be a high framerate compatible resolution
//for most webcams, you can change this using --size X Y commandline parameter
options.width = 1920;
options.height = 1080;
loadOptionsFromCommandlineOptions(&options,argc,argv);
if (options.path==0)
{
fprintf(stderr,RED "No CSV dataset given\n " NORMAL);
return 1;
}
if (options.label==0)
{
options. label="colorFrame_0_";
}
struct CSVFileContext csv= {0};
if (!options.isCSVFile)
{
fprintf(stderr,RED "The path %s doesn't look like a CSV file.. \n" NORMAL,options.path);
return 0;
}
else if (options.isCSVFile)
{
if (!openCSVFile(&csv,options.path))
{
fprintf(stderr,RED "Unable to open CSV file %s \n" NORMAL,options.path);
return 0;
}
else
{
fprintf(stderr,GREEN "CSV file %s is now open\n" NORMAL,options.path);
options.frameLimit=getBodyLinesOfCSVFIle(&csv,options.path);
}
//-------------------------------------------------------
int havePath=0;
int positionOfSlash=0;
for (int i=strlen(options.path); i>=0; i--)
{
if (options.path[i]=='/')
{
positionOfSlash=i;
havePath=1;
break;
}
}
if (havePath)
{
options.datasetPath=(char*) malloc(sizeof(char) * (positionOfSlash+2) );
if (options.datasetPath!=0)
{
for (int i=0; i<=positionOfSlash; i++)
{
options.datasetPath[i]=options.path[i];
}
options.datasetPath[positionOfSlash+1]=0; //Null termination
}
}
}
loadCalibration(&options,options.datasetPath,"color.calib");
if(options.visualize)
{
spawnVisualizationWindow("3D Points Output",options.visWidth,options.visHeight);
}
if ( loadMocapNET2(&mnet,"CSV Demo") )
{
//------------------------------
mnet.learningRate=options.learningRate;
mnet.iterations=options.iterations;
mnet.epochs=options.epochs;
mnet.spring=options.spring;
//------------------------------
char filePathOfImageFile[1024]= {0};
if (options.datasetPath)
{
char formatString[1024]= {0};
snprintf(formatString,1024,"%%s/%%s%%0%uu.jpg",options.serialLength);
snprintf(filePathOfImageFile,1024,formatString,options.datasetPath,options.label,1/*Frame ID*/);
// snprintf(filePathOfImageFile,1024,"%s/colorFrame_0_00001.jpg",datasetPath);
if ( getImageWidthHeight(filePathOfImageFile,&options.width,&options.height) )
{
fprintf(stderr,"Image dimensions changed from default to %ux%u\n",options.width,options.height);
//Force visualization size to the same as image dimensions autodetected..
options.visWidth = options.width;
options.visHeight = options.height;
}
else
{
fprintf(stderr,"Assuming default image dimensions %ux%u , you can change this using --size x y\n",options.width,options.height);
}
}
//We might want to load a special bvh file based on our options..!
loadOptionsAfterBVHLoadFromCommandlineOptions(&options,argc,argv);
//If the initialization didnt happen inside the previous call lets do it now
if (!options.hasInit)
{
if (initializeBVHConverter(0,options.visWidth,options.visHeight,0))
{
fprintf(stderr,"BVH code initalization successfull..\n");
options.hasInit=1;
}
}
//--------------------------------------------------------------------------
std::vector<float> result;
std::vector<float> previousResult;
std::vector<std::vector<float> > output3DPositions;
std::vector<float> points3DFlatOutput;
float totalTime=0.0;
unsigned int totalSamples=0;
std::vector<std::vector<float> > bvhFrames;
struct skeletonSerialized skeleton= {0};
char formatString[1024]= {0};
snprintf(formatString,1024,"%%s/%%s%%0%uu_keypoints.json",options.serialLength);
unsigned int frameID=0;
while ( (options.frameLimit==0) || (frameID<options.frameLimit) )
{
if ( parseNextCSVCOCOSkeleton(&csv,&skeleton) )
{
takeCareOfScalingInputAndAddingNoiseAccordingToOptions(&options,&skeleton);
unsigned int feetAreMissing=areFeetMissing(&skeleton);
long startTime = GetTickCountMicrosecondsMN();
//--------------------------------------------------------
previousResult = result;
result = runMocapNET2(
&mnet,
&skeleton,
( (options.doLowerBody) && (!feetAreMissing) ),
options.doHands,
options.doFace,
options.doGestureDetection,
options.useInverseKinematics,
options.doOutputFiltering);
bvhFrames.push_back(result);
//--------------------------------------------------------
long endTime = GetTickCountMicrosecondsMN();
//Convert BVH frame to 2D points to show on screen
std::vector<std::vector<float> > exactMocapNET2DOutput = convertBVHFrameTo2DPoints(result);//,MocapNETTrainingWidth,MocapNETTrainingHeight);
if (options.saveCSV3DFile)
{
//Convert BVH frame to 3D points to output on a file
points3DFlatOutput=convertBVHFrameToFlat3DPoints(result);//,MocapNETTrainingWidth,MocapNETTrainingHeight);
output3DPositions.push_back(points3DFlatOutput); //3d Input
}
resultAsSkeletonSerialized.skeletonHeaderElements = skeleton.skeletonHeaderElements;
resultAsSkeletonSerialized.skeletonBodyElements = skeleton.skeletonBodyElements;
//exactMocapNET2DOutput = convertBVHFrameTo2DPoints(result,MocapNETTrainingWidth,MocapNETTrainingHeight);
if (
convertMocapNET2OutputToSkeletonSerialized(
&mnet,
&resultAsSkeletonSerialized,
exactMocapNET2DOutput,
frameID,
MocapNETTrainingWidth,
MocapNETTrainingHeight
)
)
{
//TODO : Compare resultAsSkeletonSerialized and skeleton
doReprojectionCheck(&skeleton,&resultAsSkeletonSerialized);
}
float sampleTime = (float) (endTime-startTime)/1000;
if (sampleTime==0.0)
{
sampleTime=1.0; //Take care of division by null..
}
options.totalLoopFPS = (float) 1000/sampleTime;
fprintf(stderr,"Sample %u - %0.4fms - %0.4f fps\n",frameID,sampleTime,options.totalLoopFPS);
if (options.visualize)
{
visualizationCommander(
&mnet,
&options,
&skeleton,
0,
result,
exactMocapNET2DOutput,
frameID,
0 //Visualization code must handle messages..
);
}
totalTime+=sampleTime;
++totalSamples;
if (options.delay!=0)
{
fprintf(stderr,"Sleeping for %u milliseconds\n",options.delay);
nsleep(options.delay*1000);
}
}
else
{
fprintf(stderr,"Done.. \n");
break;
}
++frameID;
}
fprintf(stderr,"Finished with %u/%u frames\n",frameID,options.frameLimit);
if (totalSamples>0)
{
char * bvhHeaderToWrite=0;
if (options.bvhCenter)
{
for (unsigned int i=0; i<bvhFrames.size(); i++)
{
bvhFrames[i][0]=0;
bvhFrames[i][1]=0;
bvhFrames[i][2]=0;
}
}
if (options.dontBend)
{
for (unsigned int i=0; i<bvhFrames.size(); i++)
{
if (bvhFrames[i][3]>10) { bvhFrames[i][3]=10; } else
if (bvhFrames[i][3]<-10) { bvhFrames[i][3]=-10; }
}
}
//fix https://github.com/FORTH-ModelBasedTracker/MocapNET/issues/35
fixBVHHip(bvhFrames);
if ( writeBVHFile(options.outputPath,bvhHeaderToWrite,options.prependTPose,bvhFrames) )
{
fprintf(stderr,"Successfully wrote %lu frames to bvh file %s.. \n",bvhFrames.size(),options.outputPath);
}
else
{
fprintf(stderr,"Failed to write %lu frames to bvh file %s .. \n",bvhFrames.size(),options.outputPath);
}
if (options.saveCSV3DFile)
{
fprintf(stderr,"Will now write 3D output to out3DP.csv.. \n");
//----------------------------------------------------------------------------------------------------------------------------------
if ( writeCSVHeaderFromLabelsAndVectorOfVectors("out3DP.csv",MocapNET3DPositionalOutputArrayNames,MOCAPNET_3DPOINT_NUMBER,output3DPositions) )
{
fprintf(stderr,GREEN "Successfully wrote %lu frames to csv file.. \n" NORMAL,output3DPositions.size());
}
else
{
fprintf(stderr,RED "Failed to write %lu frames to bvh file.. \n" NORMAL,output3DPositions.size());
}
}
float averageTime=(float) totalTime/totalSamples;
fprintf(stderr,"\n\nMocapNET v%s execution summary :\n",MocapNETVersion);
fprintf(stderr,"__________________________________________\n");
//neuralNetworkPrintVersion();
printBVHCodeVersion();
fprintf(stderr,"CPU : %s \n",options.CPUName);
fprintf(stderr,"GPU : %s \n",options.GPUName);
fprintf(stderr,"Total %0.2f ms for %u samples - Average %0.2f ms - %0.2f fps\n",totalTime,totalSamples,averageTime,(float) 1000/averageTime);
//-----------------------------------------------
if (options.doMultiThreadedIK)
{ fprintf(stderr,"Multi-threading was on\n"); }
if (codeOptimizationsForIKEnabled())
{ fprintf(stderr,"Code optimizations where on\n"); }
}
if (options.isCSVFile)
{
closeCSVFile(&csv);
}
if (options.saveVisualization)
{
int i;
//Low-Res video encoding
//int i=system("ffmpeg -framerate 25 -i vis%05d.jpg -y -r 30 -threads 8 -crf 9 -pix_fmt yuv420p lastRun3D.webm");
//High-Res video encoding
snprintf(formatString,1024,"ffmpeg -framerate %f -i vis%%05d.jpg -s 1200x720 -y -r %f -pix_fmt yuv420p -threads 8 %s_lastRun3DHiRes.mp4 && rm ./vis*.jpg",options.inputFramerate,options.inputFramerate,options.path); //
i=system(formatString);
if (i==0)
{
fprintf(stderr,"Successfully wrote video file to %s_lastRun3DHiRes.mp4 .. \n",options.path);
}
else
{
fprintf(stderr,"Failed to write a video file.. \n");
}
}
unloadMocapNET2(&mnet);
}
else
{
fprintf(stderr,RED "MocapNET2 failed to load properly and will now exit..\n");
}
}
@@ -0,0 +1,72 @@
project( MocapNETLib2 )
cmake_minimum_required(VERSION 3.5)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
#Unfortunately needed for tf_utils.cpp
set(CMAKE_CXX_STANDARD 11)
include_directories(${TENSORFLOW_INCLUDE_ROOT})
#add_executable(MocapNETLib mocapnet.cpp ${CMAKE_SOURCE_DIR}/src/Tensorflow/tf_utils.cpp)
add_library(MocapNETLib2 SHARED
${BVH_SOURCE}
${OPENGL_SOURCE}
../MocapNETLib2/config.h
../MocapNETLib2/core/core.cpp
../MocapNETLib2/core/core.hpp
../MocapNETLib2/core/singleThreaded.cpp
../MocapNETLib2/core/singleThreaded.hpp
../MocapNETLib2/core/multiThreaded.cpp
../MocapNETLib2/core/multiThreaded.hpp
../MocapNETLib2/mocapnet2.cpp
../MocapNETLib2/tools.cpp
../MocapNETLib2/remoteExecution.cpp
../MocapNETLib2/applicationLogic/parseCommandlineOptions.cpp
../MocapNETLib2/applicationLogic/poseRecognition.cpp
../MocapNETLib2/applicationLogic/gestureRecognition.cpp
../MocapNETLib2/applicationLogic/artifactRecognition.cpp
../MocapNETLib2/qualityControl/qualityControl.cpp
../MocapNETLib2/postProcessing/outputFiltering.hpp
../MocapNETLib2/NSDM/generated_body.hpp
../MocapNETLib2/NSDM/generated_upperbody.hpp
../MocapNETLib2/NSDM/generated_lowerbody.hpp
../MocapNETLib2/IO/bvh.cpp
../MocapNETLib2/IO/commonSkeleton.hpp
../MocapNETLib2/IO/skeletonAbstraction.cpp
../MocapNETLib2/IO/skeletonSerializedToBVHTransform.hpp
../MocapNETLib2/IO/csvRead.cpp
../MocapNETLib2/IO/csvWrite.cpp
../MocapNETLib2/IO/jsonRead.cpp
../MocapNETLib2/IO/jsonMocapNETHelpers.cpp
../MocapNETLib2/IO/conversions.cpp
../MocapNETLib2/visualization/rgb.cpp
../MocapNETLib2/visualization/allInOne.cpp
../MocapNETLib2/visualization/widgets.cpp
../MocapNETLib2/visualization/visualization.cpp
../MocapNETLib2/visualization/drawSkeleton.cpp
../MocapNETLib2/visualization/opengl.cpp
../MocapNETLib2/visualization/camera_ready.cpp
../MocapNETLib2/visualization/map.cpp
../MocapNETLib2/visualization/template.cpp
../MocapNETLib2/solutionParts/body.cpp
../MocapNETLib2/solutionParts/upperBody.cpp
../MocapNETLib2/solutionParts/lowerBody.cpp
${CMAKE_SOURCE_DIR}/dependencies/InputParser/InputParser_C.cpp
#Tensorflow stuff..
${TENSORFLOW_SOURCE_FILES}
)
target_link_libraries(MocapNETLib2 rt dl m pthread ${OpenCV_LIBRARIES} ${OPENGL_LIBS} Tensorflow TensorflowFramework ${NETWORK_CLIENT_LIBRARIES} ${PNG_Libs} ${JPG_Libs} )
set_target_properties(MocapNETLib2 PROPERTIES DEBUG_POSTFIX "D")
set_target_properties(MocapNETLib2 PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
)
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,164 @@
abdomen
chest
neck
neck1
head
__jaw
jaw
special04
oris02
oris01
oris06.l
oris07.l
oris06.r
oris07.r
tongue00
tongue01
tongue02
tongue03
__tongue04
tongue04
tongue07.l
tongue07.r
tongue06.l
tongue06.r
tongue05.l
tongue05.r
__levator02.l
levator02.l
levator03.l
levator04.l
levator05.l
__levator02.r
levator02.r
levator03.r
levator04.r
levator05.r
__special01
special01
oris04.l
oris03.l
oris04.r
oris03.r
oris06
oris05
__special03
special03
__levator06.l
levator06.l
__levator06.r
levator06.r
special06.l
special05.l
eye.l
orbicularis03.l
orbicularis04.l
special06.r
special05.r
eye.r
orbicularis03.r
orbicularis04.r
__temporalis01.l
temporalis01.l
oculi02.l
oculi01.l
__temporalis01.r
temporalis01.r
oculi02.r
oculi01.r
__temporalis02.l
temporalis02.l
risorius02.l
risorius03.l
__temporalis02.r
temporalis02.r
risorius02.r
risorius03.r
rCollar
rShldr
rForeArm
rHand
metacarpal1.r
finger2-1.r
finger2-2.r
finger2-3.r
metacarpal2.r
finger3-1.r
finger3-2.r
finger3-3.r
__metacarpal3.r
metacarpal3.r
finger4-1.r
finger4-2.r
finger4-3.r
__metacarpal4.r
metacarpal4.r
finger5-1.r
finger5-2.r
finger5-3.r
__rthumb
rthumb
finger1-2.r
finger1-3.r
lCollar
lShldr
lForeArm
lHand
metacarpal1.l
finger2-1.l
finger2-2.l
finger2-3.l
metacarpal2.l
finger3-1.l
finger3-2.l
finger3-3.l
__metacarpal3.l
metacarpal3.l
finger4-1.l
finger4-2.l
finger4-3.l
__metacarpal4.l
metacarpal4.l
finger5-1.l
finger5-2.l
finger5-3.l
__lthumb
lthumb
finger1-2.l
finger1-3.l
rButtock
rThigh
rShin
rFoot
toe1-1.R
toe1-2.R
toe2-1.R
toe2-2.R
toe2-3.R
toe3-1.R
toe3-2.R
toe3-3.R
toe4-1.R
toe4-2.R
toe4-3.R
toe5-1.R
toe5-2.R
toe5-3.R
lButtock
lThigh
lShin
lFoot
toe1-1.L
toe1-2.L
toe2-1.L
toe2-2.L
toe2-3.L
toe3-1.L
toe3-2.L
toe3-3.L
toe4-1.L
toe4-2.L
toe4-3.L
toe5-1.L
toe5-2.L
toe5-3.L
@@ -0,0 +1,714 @@
#pragma once
#include <stdio.h>
/**
* @brief A C struct to hold a 2D coordinate
*/
struct point2D
{
float x,y;
};
/**
* @brief A C struct to hold a 3D coordinate
*/
struct point3D
{
float x,y,z;
};
/**
* @brief A structure to hold a bounding box
*/
struct boundingBox
{
char populated;
float minimumX;
float maximumX;
float minimumY;
float maximumY;
};
/**
* @brief This is an array of names for all the old COCO body parts.
*/
static const char * COCOOldBodyNames[] =
{
"Nose", //0
"Neck", //1
"RShoulder", //2
"RElbow", //3
"RWrist", //4
"LShoulder", //5
"LElbow", //6
"LWrist", //7
"RHip", //8
"RKnee", //9
"RAnkle", //10
"LHip", //11
"LKnee", //12
"LAnkle", //13
"REye", //14
"LEye", //15
"REar", //16
"LEar", //17
"Bkg", //18
//=================
"End of Joint Names"
};
/**
* @brief An enumerator of coco skeleton joints
*/
//https://github.com/CMU-Perceptual-Computing-Lab/openpose/blob/master/doc/media/keypoints_pose_18.png
enum COCOOldSkeletonJoints
{
COCO_Nose=0,
COCO_Neck,
COCO_RShoulder,
COCO_RElbow,
COCO_RWrist,
COCO_LShoulder,
COCO_LElbow,
COCO_LWrist,
COCO_RHip,
COCO_RKnee,
COCO_RAnkle,
COCO_LHip,
COCO_LKnee,
COCO_LAnkle,
COCO_REye,
COCO_LEye,
COCO_REar,
COCO_LEar,
COCO_Bkg,
//---------------------
COCO_PARTS
};
/**
* @brief An array of indexes to the parents of coco skeleton joints
*/
static const int COCOSkeletonJointsParentRelationMap[] =
{
// Parent Joint
COCO_Nose, //COCO_Nose,
COCO_Nose, //COCO_Neck,
COCO_Neck, //COCO_RShoulder,
COCO_RShoulder, //COCO_RElbow,
COCO_RElbow, //COCO_RWrist,
COCO_Neck, //COCO_LShoulder,
COCO_LShoulder, //COCO_LElbow,
COCO_LElbow, //COCO_LWrist,
COCO_Neck, //COCO_RHip,
COCO_RHip, //COCO_RKnee,
COCO_RKnee, //COCO_RAnkle,
COCO_Neck, //COCO_LHip,
COCO_LHip, //COCO_LKnee,
COCO_LKnee, //COCO_LAnkle,
COCO_Nose, //COCO_REye,
COCO_Nose, //COCO_LEye,
COCO_REye, //COCO_REar,
COCO_LEye, //COCO_LEar,
COCO_Bkg //COCO_Bkg
};
/**
* @brief This is an array of names for all the new BODY25 body parts.
* This is a "friendly" array, meaning it is meant to be easy to understand and does not need to exactly correspond to the BVH file..
*/
static const char * Body25BodyFriendlyNames[] =
{
"Nose", //0
"Neck", //1
"RShoulder", //2
"RElbow", //3
"RWrist", //4
"LShoulder", //5
"LElbow", //6
"LWrist", //7
"MidHip", //8
"RHip", //9
"RKnee", //10
"RAnkle", //11
"LHip", //12
"LKnee", //13
"LAnkle", //14
"REye", //15
"LEye", //16
"REar", //17
"LEar", //18
"LBigToe", //19
"LSmallToe", //20
"LHeel", //21
"RBigToe", //22
"RSmallToe", //23
"RHeel", //24
"Bkg", //25
//=================
"End of Joint Names"
};
/**
* @brief This is an array of names for all the new BODY25 body parts.
* This tries to mirror body_configuration.json and everything used is lowercase exactly for this reason..
* it also has to be the same with the bvh file headerWithHeadAndOneMotion.bvh
*/
static const char * Body25BodyNames[] =
{
"head", //0
"neck", //1
"rshoulder", //2
"relbow", //3
"rhand", //4
"lshoulder", //5
"lelbow", //6
"lhand", //7
"hip", //8
"rhip", //9
"rknee", //10
"rfoot", //11
"lhip", //12
"lknee", //13
"lfoot", //14
"endsite_eye.r", //15
"endsite_eye.l", //16
"rear", //17 ========= No correspondance
"lear", //18 ========= No correspondance
"endsite_toe1-2.l",//19
"endsite_toe5-3.l",//20
"lheel", //21 ========= No correspondance
"endsite_toe1-2.r",//22
"endsite_toe5-3.r",//23
"rheel", //24 ========= No correspondance
"bkg", //25 ========= No correspondance
//==================
"End of Joint Names"
};
/**
* @brief An enumerator of BODY 25 skeleton joints
*/
enum Body25SkeletonJoints
{
BODY25_Nose=0,
BODY25_Neck,
BODY25_RShoulder,
BODY25_RElbow,
BODY25_RWrist,
BODY25_LShoulder,
BODY25_LElbow,
BODY25_LWrist,
BODY25_MidHip,
BODY25_RHip,
BODY25_RKnee,
BODY25_RAnkle,
BODY25_LHip,
BODY25_LKnee,
BODY25_LAnkle,
BODY25_REye,
BODY25_LEye,
BODY25_REar,
BODY25_LEar,
BODY25_LBigToe,
BODY25_LSmallToe,
BODY25_LHeel,
BODY25_RBigToe,
BODY25_RSmallToe,
BODY25_RHeel,
BODY25_Bkg,
//---------------------
BODY25_PARTS
};
/**
* @brief An array of indexes to the parents of BODY25 skeleton joints
*/
static const int Body25SkeletonJointsParentRelationMap[] =
{
// Parent Joint
BODY25_Nose, //BODY25_Nose,
BODY25_Nose, //BODY25_Neck,
BODY25_Neck, //BODY25_RShoulder,
BODY25_RShoulder, //BODY25_RElbow,
BODY25_RElbow, //BODY25_RWrist,
BODY25_Neck, //BODY25_LShoulder,
BODY25_LShoulder, //BODY25_LElbow,
BODY25_LElbow, //BODY25_LWrist,
BODY25_Neck, //BODY25_MidHip
BODY25_MidHip, //BODY25_RHip,
BODY25_RHip, //BODY25_RKnee,
BODY25_RKnee, //BODY25_RAnkle,
BODY25_MidHip, //BODY25_LHip,
BODY25_LHip, //BODY25_LKnee,
BODY25_LKnee, //BODY25_LAnkle,
BODY25_Nose, //BODY25_REye,
BODY25_Nose, //BODY25_LEye,
BODY25_REye, //BODY25_REar,
BODY25_LEye, //BODY25_LEar,
BODY25_LHeel, //BODY25_LBigToe,
BODY25_LBigToe, //BODY25_LSmallToe,
BODY25_LAnkle, //BODY25_LHeel,
BODY25_RHeel, //BODY25_RBigToe,
BODY25_RBigToe, //BODY25_RSmallToe,
BODY25_RAnkle, // BODY25_RHeel,
BODY25_Bkg //BODY25_Bkg
};
/**
* @brief An enumerator of COCO Hand joints
*/
//https://github.com/CMU-Perceptual-Computing-Lab/openpose/blob/master/doc/media/keypoints_hand.png
enum COCOHandJoints
{
COCO_Hand_Wrist=0,//0
COCO_Hand_Thumb_1,//1
COCO_Hand_Thumb_2, //2
COCO_Hand_Thumb_3, //3
COCO_Hand_Thumb_4,//4
COCO_Hand_Index_1,//5
COCO_Hand_Index_2,//6
COCO_Hand_Index_3,//7
COCO_Hand_Index_4,//8
COCO_Hand_Middle_1,//9
COCO_Hand_Middle_2,//10
COCO_Hand_Middle_3,//11
COCO_Hand_Middle_4,//12
COCO_Hand_Ring_1,//13
COCO_Hand_Ring_2,//14
COCO_Hand_Ring_3,//15
COCO_Hand_Ring_4,//16
COCO_Hand_Pinky_1,//17
COCO_Hand_Pinky_2,//18
COCO_Hand_Pinky_3,//19
COCO_Hand_Pinky_4,//20
//---------------------
COCO_HAND_PARTS
};
/**
* @brief This is an array of names for the left hand.
* This is a "friendly" array, meaning it is meant to be easy to understand and does not need to exactly correspond to the BVH file..
*/
static const char * COCOLeftHandFriendlyNames[] =
{
"Left_Hand_Wrist",//0
"Left_Hand_Thumb_1",//1
"Left_Hand_Thumb_2", //2
"Left_Hand_Thumb_3", //3
"Left_Hand_Thumb_4",//4
"Left_Hand_Index_1",//5
"Left_Hand_Index_2",//6
"Left_Hand_Index_3",//7
"Left_Hand_Index_4",//8
"Left_Hand_Middle_1",//9
"Left_Hand_Middle_2",//10
"Left_Hand_Middle_3",//11
"Left_Hand_Middle_4",//12
"Left_Hand_Ring_1",//13
"Left_Hand_Ring_2",//14
"Left_Hand_Ring_3",//15
"Left_Hand_Ring_4",//16
"Left_Hand_Pinky_1",//17
"Left_Hand_Pinky_2",//18
"Left_Hand_Pinky_3",//19
"Left_Hand_Pinky_4",//20
//--------------------
"End of Left Hand Names"
};
/**
* @brief This is an array of names for the left hand.
* This tries to mirror lhand_configuration.json and everything used is lowercase exactly for this reason..
* it also has to be the same with the bvh file headerWithHeadAndOneMotion.bvh
*/
static const char * COCOLeftHandNames[] =
{
"lhand",//0
"lthumb",//1
"finger1-2.l", //2
"finger1-3.l", //3
"endsite_finger1-3.l",//4
"finger2-1.l",//5
"finger2-2.l",//6
"finger2-3.l",//7
"endsite_finger2-3.l",//8
"finger3-1.l",//9
"finger3-2.l",//10
"finger3-3.l",//11
"endsite_finger3-3.l",//12
"finger4-1.l",//13
"finger4-2.l",//14
"finger4-3.l",//15
"endsite_finger4-3.l",//16
"finger5-1.l",//17
"finger5-2.l",//18
"finger5-3.l",//19
"endsite_finger5-3.l",//20
//--------------------
"End of Left Hand Names"
};
/**
* @brief This is an array of names for the right hand.
* This is a "friendly" array, meaning it is meant to be easy to understand and does not need to exactly correspond to the BVH file..
*/
static const char * COCORightHandFriendlyNames[] =
{
"Right_Hand_Wrist",//0
"Right_Hand_Thumb_1",//1
"Right_Hand_Thumb_2", //2
"Right_Hand_Thumb_3", //3
"Right_Hand_Thumb_4",//4
"Right_Hand_Index_1",//5
"Right_Hand_Index_2",//6
"Right_Hand_Index_3",//7
"Right_Hand_Index_4",//8
"Right_Hand_Middle_1",//9
"Right_Hand_Middle_2",//10
"Right_Hand_Middle_3",//11
"Right_Hand_Middle_4",//12
"Right_Hand_Ring_1",//13
"Right_Hand_Ring_2",//14
"Right_Hand_Ring_3",//15
"Right_Hand_Ring_4",//16
"Right_Hand_Pinky_1",//17
"Right_Hand_Pinky_2",//18
"Right_Hand_Pinky_3",//19
"Right_Hand_Pinky_4",//20
//--------------------
"End of Right Hand Names"
};
/**
* @brief This is an array of names for the right hand.
* This tries to mirror rhand_configuration.json and everything used is lowercase exactly for this reason..
* it also has to be the same with the bvh file headerWithHeadAndOneMotion.bvh
*/
static const char * COCORightHandNames[] =
{
"rhand",//0
"rthumb",//1
"finger1-2.r", //2
"finger1-3.r", //3
"endsite_finger1-3.r",//4
"finger2-1.r",//5
"finger2-2.r",//6
"finger2-3.r",//7
"endsite_finger2-3.r",//8
"finger3-1.r",//9
"finger3-2.r",//10
"finger3-3.r",//11
"endsite_finger3-3.r",//12
"finger4-1.r",//13
"finger4-2.r",//14
"finger4-3.r",//15
"endsite_finger4-3.r",//16
"finger5-1.r",//17
"finger5-2.r",//18
"finger5-3.r",//19
"endsite_finger5-3.r",//20
//--------------------
"End of Right Hand Names"
};
/**
* @brief An enumerator of COCO Hand joints
*/
//https://raw.githubusercontent.com/CMU-Perceptual-Computing-Lab/openpose/master/doc/media/keypoints_face.png
enum OP_HeadJoints
{
OP_Head_RChin_0=0, //0
OP_Head_RChin_1, //1
OP_Head_RChin_2, //2
OP_Head_RChin_3, //3
OP_Head_RChin_4, //4
OP_Head_RChin_5, //5
OP_Head_RChin_6, //6
OP_Head_RChin_7, //7
OP_Head_Chin, //8
OP_Head_LChin_7 , //9
OP_Head_LChin_6, //10
OP_Head_LChin_5, //11
OP_Head_LChin_4, //12
OP_Head_LChin_3, //13
OP_Head_LChin_2, //14
OP_Head_LChin_1, //15
OP_Head_LChin_0, //16
OP_Head_REyebrow_0, //17
OP_Head_REyebrow_1, //18
OP_Head_REyebrow_2, //19
OP_Head_REyebrow_3, //20
OP_Head_REyebrow_4, //21
OP_Head_LEyebrow_4, //22
OP_Head_LEyebrow_3, //23
OP_Head_LEyebrow_2, //24
OP_Head_LEyebrow_1, //25
OP_Head_LEyebrow_0, //26
OP_Head_NoseBone_0,//27
OP_Head_NoseBone_1,//28
OP_Head_NoseBone_2,//29
OP_Head_NoseBone_3,//30
OP_Head_Nostrills_0,//31
OP_Head_Nostrills_1,//32
OP_Head_Nostrills_2,//33
OP_Head_Nostrills_3,//34
OP_Head_Nostrills_4,//35
OP_Head_REye_0,//36
OP_Head_REye_1,//37
OP_Head_REye_2,//38
OP_Head_REye_3,//39
OP_Head_REye_4,//40
OP_Head_REye_5,//41
OP_Head_LEye_0,//42
OP_Head_LEye_1,//43
OP_Head_LEye_2,//44
OP_Head_LEye_3,//45
OP_Head_LEye_4,//46
OP_Head_LEye_5,//47
OP_Head_OutMouth_0,//48
OP_Head_OutMouth_1,//49
OP_Head_OutMouth_2,//50
OP_Head_OutMouth_3,//51
OP_Head_OutMouth_4,//52
OP_Head_OutMouth_5,//53
OP_Head_OutMouth_6,//54
OP_Head_OutMouth_7,//55
OP_Head_OutMouth_8,//56
OP_Head_OutMouth_9,//57
OP_Head_OutMouth_10,//58
OP_Head_OutMouth_11,//59
OP_Head_InMouth_0,//60
OP_Head_InMouth_1,//61
OP_Head_InMouth_2,//62
OP_Head_InMouth_3,//63
OP_Head_InMouth_4,//64
OP_Head_InMouth_5,//65
OP_Head_InMouth_6,//66
OP_Head_InMouth_7,//67
OP_Head_REye,//68
OP_Head_LEye,//69
//---------------------
OP_HEAD_PARTS
};
static const char * HeadNames[] =
{
"Head_RChin_0", //0
"Head_RChin_1", //1
"Head_RChin_2", //2
"Head_RChin_3", //3
"Head_RChin_4", //4
"Head_RChin_5", //5
"Head_RChin_6", //6
"Head_RChin_7", //7
"Head_Chin", //8
"Head_LChin_7", //9
"Head_LChin_6", //10
"Head_LChin_5", //11
"Head_LChin_4", //12
"Head_LChin_3", //13
"Head_LChin_2", //14
"Head_LChin_1", //15
"Head_LChin_0", //16
"Head_REyebrow_0",//17
"Head_REyebrow_1",//18
"Head_REyebrow_2",//19
"Head_REyebrow_3",//20
"Head_REyebrow_4",//21
"Head_LEyebrow_4",//22
"Head_LEyebrow_3",//23
"Head_LEyebrow_2",//24
"Head_LEyebrow_1",//25
"Head_LEyebrow_0",//26
"Head_NoseBone_0",//27
"Head_NoseBone_1",//28
"Head_NoseBone_2",//29
"Head_NoseBone_3",//30
"Head_Nostrills_0",//31
"Head_Nostrills_1",//32
"Head_Nostrills_2",//33
"Head_Nostrills_3",//34
"Head_Nostrills_4",//35
"Head_REye_0",//36
"Head_REye_1",//37
"Head_REye_2",//38
"Head_REye_3",//39
"Head_REye_4",//40
"Head_REye_5",//41
"Head_LEye_0",//42
"Head_LEye_1",//43
"Head_LEye_2",//44
"Head_LEye_3",//45
"Head_LEye_4",//46
"Head_LEye_5",//47
"Head_OutMouth_0",//48
"Head_OutMouth_1",//49
"Head_OutMouth_2",//50
"Head_OutMouth_3",//51
"Head_OutMouth_4",//52
"Head_OutMouth_5",//53
"Head_OutMouth_6",//54
"Head_OutMouth_7",//55
"Head_OutMouth_8",//56
"Head_OutMouth_9",//57
"Head_OutMouth_10",//58
"Head_OutMouth_11",//59
"Head_InMouth_0",//60
"Head_InMouth_1",//61
"Head_InMouth_2",//62
"Head_InMouth_3",//63
"Head_InMouth_4",//64
"Head_InMouth_5",//65
"Head_InMouth_6",//66
"Head_InMouth_7",//67
"Head_REye",//68
"Head_LEye"//69
};
/**
* @brief A C struct to hold a hand. It contains its 2D points, its 3D points and some flags that signal
*/
struct handCOCO
{
int isPopulated;
int isLeft;
int isRight;
struct point2D joint2D[COCO_HAND_PARTS];
float jointAccuracy[COCO_HAND_PARTS];
unsigned int active[COCO_HAND_PARTS];
struct point3D joint[COCO_HAND_PARTS];
};
/**
* @brief A C struct to hold a hand. It contains its 2D points, its 3D points and some flags that signal
*/
struct headOP
{
int isPopulated;
struct point2D joint2D[OP_HEAD_PARTS];
float jointAccuracy[OP_HEAD_PARTS];
unsigned int active[OP_HEAD_PARTS];
struct point3D joint[OP_HEAD_PARTS];
};
/**
* @brief A C struct to hold a body. It contains its 2D points, its 3D points and some flags that signal
*/
struct body25OP
{
int isPopulated;
struct point2D joint2D[BODY25_PARTS];
struct point2D bbox2D[2];
float jointAccuracy[BODY25_PARTS];
unsigned int active[BODY25_PARTS];
struct point3D joint[BODY25_PARTS];
struct point3D bbox[8];
};
/**
* @brief A C struct to hold a skeleton. It contains its 2D points, its 3D points and some flags that signal
*/
struct skeletonStructure
{
unsigned int observationNumber , observationTotal;
unsigned int userID;
unsigned int totalUsersPresent;
//------------------------
struct body25OP body;
struct handCOCO leftHand;
struct handCOCO rightHand;
struct headOP head;
//------------------------
struct boundingBox bbox2D;
};
struct headerField
{
unsigned int strLength;
char * str;
};
struct bodyField
{
float value;
};
struct skeletonSerialized
{
unsigned int skeletonHeaderElements;
struct headerField skeletonHeader[512];
unsigned int skeletonBodyElements;
struct bodyField skeletonBody[512];
float width;
float height;
};
static void printSkeletonSerialized(const char * msg, struct skeletonSerialized * sk )
{
if (msg!=0)
{
fprintf(stderr,"printSkeletonSerialized (%s)\n",msg);
}
if (sk==0)
{
fprintf(stderr,"struct skeletonSerialized that was given as input is not allocated\n");
return;
}
if (sk->skeletonHeaderElements != sk->skeletonBodyElements)
{
fprintf(stderr,"struct skeletonSerialized is corrupted since it has a different number of head and body records..\n");
return;
}
fprintf(stderr,"Serialization has %u elements\n",sk->skeletonHeaderElements);
for (unsigned int skID = 0; skID<sk->skeletonHeaderElements; skID++)
{
if (sk->skeletonHeader[skID].str==0)
{
fprintf(stderr," Serial #%u has an empty label => % 0.2f \n" ,skID , sk->skeletonBody[skID].value);
} else
{
fprintf(stderr," %s => % 0.2f \n" ,sk->skeletonHeader[skID].str , sk->skeletonBody[skID].value);
}
}
}
@@ -0,0 +1,827 @@
#include "conversions.hpp"
#include <string.h>
#include <vector>
#include "../tools.hpp"
#include "bvh.hpp"
#include "csvRead.hpp"
#include "../../../../dependencies/RGBDAcquisition/tools/AmMatrix/matrix4x4Tools.h"
#define NORMAL "\033[0m"
#define BLACK "\033[30m" /* Black */
#define RED "\033[31m" /* Red */
#define GREEN "\033[32m" /* Green */
#define YELLOW "\033[33m" /* Yellow */
int appendVectorToFile(const char * filename, std::vector<float> vec)
{
FILE * fp = fopen(filename,"a");
if (fp!=0)
{
for (unsigned int i=0; i<vec.size(); i++)
{
if (i!=0) { fprintf(fp,","); }
fprintf(fp,"%f",vec[i]);
}
fprintf(fp,"\n");
fclose(fp);
return 1;
}
return 0;
}
int initializeAssociationsForSubsetOfSkeleton(unsigned int * targetIndexIsInitializedFlag,unsigned int * targetIndexes,unsigned int targetLength,const char * * targetLabels,struct skeletonSerialized * input)
{
//int i=0,z=0;
for (unsigned int i=0; i<targetLength; i++)
{
targetIndexes[i]=666;
}
char targetLabelLowercase[513]={0};
for (unsigned int i=0; i<targetLength; i++)
{
convertStringToLowercase(targetLabelLowercase,512,targetLabels[i]);
for (unsigned int z=0; z<input->skeletonHeaderElements; z++)
{
if (input->skeletonHeader[z].str!=0)
{
if (strcmp(input->skeletonHeader[z].str,targetLabelLowercase)==0)
{
if (targetIndexes[i]==666)
{
targetIndexes[i]=z;
fprintf(stderr,GREEN "%s==%s\n" NORMAL,input->skeletonHeader[z].str,targetLabelLowercase);
} else
{
fprintf(stderr,YELLOW "%s==%s multiple times, only keeping first association..\n" NORMAL,input->skeletonHeader[z].str,targetLabelLowercase);
}
} //We have a matching string..
} //There is a string to compare
}
}
unsigned int unassociatedJoints=0;
for (unsigned int i=0; i<targetLength; i++)
{
if ( targetIndexes[i]==666 ) {
++unassociatedJoints;
fprintf(stderr,RED "Joint %s(%u) is not associated\n" NORMAL,targetLabels[i],i);
} else
{ fprintf(stderr,GREEN "Joint %s(%u) associated\n" NORMAL,targetLabels[i],i); }
}
*targetIndexIsInitializedFlag=(unassociatedJoints==0);
return (unassociatedJoints==0);
}
std::vector<float> deriveMocapNET2InputUsingAssociations(struct MocapNET2 * mnet,struct skeletonSerialized * input,unsigned int * targetIndexIsInitializedFlag,unsigned int * targetIndexes,unsigned int targetLength,const char * * targetLabels,int verbose)
{
std::vector<float> result;
if (mnet->indexesPopulated)
{
if (! *targetIndexIsInitializedFlag)
{
fprintf(stderr,RED "deriveMocapNET2InputUsingAssociations called without initialization\n" NORMAL);
initializeAssociationsForSubsetOfSkeleton(
targetIndexIsInitializedFlag,
targetIndexes,
targetLength,
targetLabels,
input
);
}
for (int i=0; i<targetLength; i++)
{
if (verbose) { fprintf(stderr,"%s = %0.2f -> %s \n" , input->skeletonHeader[targetIndexes[i]].str , input->skeletonBody[targetIndexes[i]].value ,targetLabels[i]); }
result.push_back(input->skeletonBody[targetIndexes[i]].value);
}
} else
{
fprintf(stderr,RED "initializeAssociationsForSubsetOfSkeleton has to be run at initialization before deriveMocapNET2InputUsingAssociations\n");
}
return result;
}
int convertSkeletons2DDetectedToSkeletonsSerialized(
struct skeletonSerialized * output,
struct Skeletons2DDetected * input,
unsigned int frameNumber,
unsigned int width,
unsigned int height
)
{
int check;
if (output->skeletonHeaderElements==0)
{
//Brand new header that needs to be populated..!
int elementsPopulated=3;
output->skeletonHeader[0].strLength = 12;
output->skeletonHeader[0].str=(char *) malloc(sizeof(char) * output->skeletonHeader[0].strLength);
snprintf(output->skeletonHeader[0].str,output->skeletonHeader[0].strLength,"frameNumber");
output->skeletonHeader[1].strLength = 11;
output->skeletonHeader[1].str=(char *) malloc(sizeof(char) * output->skeletonHeader[1].strLength);
snprintf(output->skeletonHeader[1].str,output->skeletonHeader[1].strLength,"skeletonID");
output->skeletonHeader[2].strLength = 15;
output->skeletonHeader[2].str=(char *) malloc(sizeof(char) * output->skeletonHeader[2].strLength);
snprintf(output->skeletonHeader[2].str,output->skeletonHeader[2].strLength,"totalSkeletons");
char lowercaseName[512]={0};
for (int i=0; i<BODY25_PARTS; i++)
{
convertStringToLowercase(lowercaseName,512,Body25BodyNames[i]);
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
output->skeletonHeader[elementsPopulated].strLength= strlen(lowercaseName)+5;
output->skeletonHeader[elementsPopulated].str = ( char* ) malloc( sizeof(char) * output->skeletonHeader[elementsPopulated].strLength);
if (output->skeletonHeader[elementsPopulated].str!=0)
{
check = snprintf(
output->skeletonHeader[elementsPopulated].str ,
output->skeletonHeader[elementsPopulated].strLength,
"2dx_%s",
lowercaseName
);
if (check<0) { return 0; }
} else { return 0; }
++elementsPopulated;
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
output->skeletonHeader[elementsPopulated].strLength= strlen(lowercaseName)+5;
output->skeletonHeader[elementsPopulated].str = ( char* ) malloc( sizeof(char) * output->skeletonHeader[elementsPopulated].strLength);
if (output->skeletonHeader[elementsPopulated].str!=0)
{
check = snprintf(
output->skeletonHeader[elementsPopulated].str ,
output->skeletonHeader[elementsPopulated].strLength,
"2dy_%s",
lowercaseName
);
if (check<0) { return 0; }
} else { return 0; }
++elementsPopulated;
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
output->skeletonHeader[elementsPopulated].strLength= strlen(lowercaseName)+9;
output->skeletonHeader[elementsPopulated].str = ( char* ) malloc( sizeof(char) * output->skeletonHeader[elementsPopulated].strLength);
if (output->skeletonHeader[elementsPopulated].str!=0)
{
check = snprintf(
output->skeletonHeader[elementsPopulated].str ,
output->skeletonHeader[elementsPopulated].strLength,
"visible_%s",
lowercaseName
);
if (check<0) { return 0; }
} else { return 0; }
++elementsPopulated;
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
}
for (int i=0; i<COCO_HAND_PARTS; i++)
{
convertStringToLowercase(lowercaseName,512,COCOLeftHandNames[i]);
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
output->skeletonHeader[elementsPopulated].strLength= strlen(lowercaseName)+5;
output->skeletonHeader[elementsPopulated].str = ( char* ) malloc( sizeof(char) * output->skeletonHeader[elementsPopulated].strLength);
if (output->skeletonHeader[elementsPopulated].str!=0)
{
check = snprintf(
output->skeletonHeader[elementsPopulated].str ,
output->skeletonHeader[elementsPopulated].strLength,
"2dx_%s",
lowercaseName
);
if (check<0) { return 0; }
} else { return 0; }
++elementsPopulated;
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
output->skeletonHeader[elementsPopulated].strLength= strlen(lowercaseName)+5;
output->skeletonHeader[elementsPopulated].str = ( char* ) malloc( sizeof(char) * output->skeletonHeader[elementsPopulated].strLength);
if (output->skeletonHeader[elementsPopulated].str!=0)
{
check = snprintf(
output->skeletonHeader[elementsPopulated].str ,
output->skeletonHeader[elementsPopulated].strLength,
"2dy_%s",
lowercaseName
);
if (check<0) { return 0; }
} else { return 0; }
++elementsPopulated;
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
output->skeletonHeader[elementsPopulated].strLength= strlen(lowercaseName)+9;
output->skeletonHeader[elementsPopulated].str = ( char* ) malloc( sizeof(char) * output->skeletonHeader[elementsPopulated].strLength);
if (output->skeletonHeader[elementsPopulated].str!=0)
{
check = snprintf(
output->skeletonHeader[elementsPopulated].str ,
output->skeletonHeader[elementsPopulated].strLength,
"visible_%s",
lowercaseName
);
if (check<0) { return 0; }
} else { return 0; }
++elementsPopulated;
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
}
for (int i=0; i<COCO_HAND_PARTS; i++)
{
convertStringToLowercase(lowercaseName,512,COCORightHandNames[i]);
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
output->skeletonHeader[elementsPopulated].strLength= strlen(lowercaseName)+5;
output->skeletonHeader[elementsPopulated].str = ( char* ) malloc( sizeof(char) * output->skeletonHeader[elementsPopulated].strLength);
if (output->skeletonHeader[elementsPopulated].str!=0)
{
check = snprintf(
output->skeletonHeader[elementsPopulated].str ,
output->skeletonHeader[elementsPopulated].strLength,
"2dx_%s",
lowercaseName
);
if (check<0) { return 0; }
} else { return 0; }
++elementsPopulated;
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
output->skeletonHeader[elementsPopulated].strLength= strlen(lowercaseName)+5;
output->skeletonHeader[elementsPopulated].str = ( char* ) malloc( sizeof(char) * output->skeletonHeader[elementsPopulated].strLength);
if (output->skeletonHeader[elementsPopulated].str!=0)
{
check = snprintf(
output->skeletonHeader[elementsPopulated].str ,
output->skeletonHeader[elementsPopulated].strLength,
"2dy_%s",
lowercaseName
);
if (check<0) { return 0; }
} else { return 0; }
++elementsPopulated;
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
output->skeletonHeader[elementsPopulated].strLength= strlen(lowercaseName)+9;
output->skeletonHeader[elementsPopulated].str = ( char* ) malloc( sizeof(char) * output->skeletonHeader[elementsPopulated].strLength);
if (output->skeletonHeader[elementsPopulated].str!=0)
{
check = snprintf(
output->skeletonHeader[elementsPopulated].str ,
output->skeletonHeader[elementsPopulated].strLength,
"visible_%s",
lowercaseName
);
if (check<0) { return 0; }
} else { return 0; }
++elementsPopulated;
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
}
for (int i=0; i<OP_HEAD_PARTS; i++)
{
convertStringToLowercase(lowercaseName,512,HeadNames[i]);
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
output->skeletonHeader[elementsPopulated].strLength= strlen(lowercaseName)+5;
output->skeletonHeader[elementsPopulated].str = ( char* ) malloc( sizeof(char) * output->skeletonHeader[elementsPopulated].strLength);
if (output->skeletonHeader[elementsPopulated].str!=0)
{
check = snprintf(
output->skeletonHeader[elementsPopulated].str ,
output->skeletonHeader[elementsPopulated].strLength,
"2dx_%s",
lowercaseName
);
if (check<0) { return 0; }
} else { return 0; }
++elementsPopulated;
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
output->skeletonHeader[elementsPopulated].strLength= strlen(lowercaseName)+5;
output->skeletonHeader[elementsPopulated].str = ( char* ) malloc( sizeof(char) * output->skeletonHeader[elementsPopulated].strLength);
if (output->skeletonHeader[elementsPopulated].str!=0)
{
check = snprintf(
output->skeletonHeader[elementsPopulated].str ,
output->skeletonHeader[elementsPopulated].strLength,
"2dy_%s",
lowercaseName
);
if (check<0) { return 0; }
} else { return 0; }
++elementsPopulated;
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
output->skeletonHeader[elementsPopulated].strLength= strlen(lowercaseName)+9;
output->skeletonHeader[elementsPopulated].str = ( char* ) malloc( sizeof(char) * output->skeletonHeader[elementsPopulated].strLength);
if (output->skeletonHeader[elementsPopulated].str!=0)
{
check = snprintf(
output->skeletonHeader[elementsPopulated].str ,
output->skeletonHeader[elementsPopulated].strLength,
"visible_%s",
lowercaseName
);
if (check<0) { return 0; }
} else { return 0; }
++elementsPopulated;
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
}
output->skeletonHeaderElements = elementsPopulated;
}
// Reduce spam
// else
//{
// fprintf(stderr,"SkeletonSerialized appears to be already populated, skipping re allocating everything..\n");
//}
//=================================================================================
//=================================================================================
//=================================================================================
//=================================================================================
//=================================================================================
// Now to convert the values..
//=================================================================================
//=================================================================================
//=================================================================================
//=================================================================================
//=================================================================================
output->skeletonBodyElements = output->skeletonHeaderElements;
//Points will be normalized using normalize2DPointWhileAlsoMatchingTrainingAspectRatio
output->width = 1.0;
output->height = 1.0;
for (unsigned int skID=0; skID<input->numberOfSkeletonsDetected; skID++)
{
int bodyElementsPopulated=3;
output->skeletonBody[0].value = frameNumber;
output->skeletonBody[1].value = skID;
output->skeletonBody[2].value = input->numberOfSkeletonsDetected;
for (int i=0; i<BODY25_PARTS; i++)
{
//Normalize targets --------------------------------------------------------------
normalize2DPointWhileAlsoMatchingTrainingAspectRatio(
&input->skeletons[skID].body.joint2D[i].x,
&input->skeletons[skID].body.joint2D[i].y,
width,
height,
1,//Respect training aspect ratio
MocapNETTrainingWidth,
MocapNETTrainingHeight
);
//--------------------------------------------------------------------------------
output->skeletonBody[bodyElementsPopulated].value = (float) input->skeletons[skID].body.joint2D[i].x;
++bodyElementsPopulated;
output->skeletonBody[bodyElementsPopulated].value = (float) input->skeletons[skID].body.joint2D[i].y;
++bodyElementsPopulated;
output->skeletonBody[bodyElementsPopulated].value = ( (input->skeletons[skID].body.joint2D[i].x!=0) && (input->skeletons[skID].body.joint2D[i].y!=0) ) ;
/*
if (!output->skeletonBody[bodyElementsPopulated].value)
{
fprintf(stderr,"%s not populated.. \n" ,Body25BodyNames[i]);
}*/
++bodyElementsPopulated;
//--------------------------------------------------------------------------------
}
for (int i=0; i<COCO_HAND_PARTS; i++)
{
//Normalize targets --------------------------------------------------------------
normalize2DPointWhileAlsoMatchingTrainingAspectRatio(
&input->skeletons[skID].leftHand.joint2D[i].x,
&input->skeletons[skID].leftHand.joint2D[i].y,
width,
height,
1,//Respect training aspect ratio
MocapNETTrainingWidth,
MocapNETTrainingHeight
);
//--------------------------------------------------------------------------------
output->skeletonBody[bodyElementsPopulated].value = (float) input->skeletons[skID].leftHand.joint2D[i].x;
++bodyElementsPopulated;
output->skeletonBody[bodyElementsPopulated].value = (float) input->skeletons[skID].leftHand.joint2D[i].y;
++bodyElementsPopulated;
output->skeletonBody[bodyElementsPopulated].value =( (input->skeletons[skID].leftHand.joint2D[i].x!=0) && (input->skeletons[skID].leftHand.joint2D[i].y!=0) ) ;
++bodyElementsPopulated;
//--------------------------------------------------------------------------------
}
for (int i=0; i<COCO_HAND_PARTS; i++)
{
//Normalize targets --------------------------------------------------------------
normalize2DPointWhileAlsoMatchingTrainingAspectRatio(
&input->skeletons[skID].rightHand.joint2D[i].x,
&input->skeletons[skID].rightHand.joint2D[i].y,
width,
height,
1,//Respect training aspect ratio
MocapNETTrainingWidth,
MocapNETTrainingHeight
);
//--------------------------------------------------------------------------------
output->skeletonBody[bodyElementsPopulated].value = input->skeletons[skID].rightHand.joint2D[i].x;
++bodyElementsPopulated;
output->skeletonBody[bodyElementsPopulated].value = input->skeletons[skID].rightHand.joint2D[i].y;
++bodyElementsPopulated;
output->skeletonBody[bodyElementsPopulated].value = ( (input->skeletons[skID].rightHand.joint2D[i].x!=0) && (input->skeletons[skID].rightHand.joint2D[i].y!=0) );
++bodyElementsPopulated;
//--------------------------------------------------------------------------------
}
for (int i=0; i<OP_HEAD_PARTS; i++)
{
//Normalize targets --------------------------------------------------------------
normalize2DPointWhileAlsoMatchingTrainingAspectRatio(
&input->skeletons[skID].head.joint2D[i].x,
&input->skeletons[skID].head.joint2D[i].y,
width,
height,
1,//Respect training aspect ratio
MocapNETTrainingWidth,
MocapNETTrainingHeight
);
//--------------------------------------------------------------------------------
output->skeletonBody[bodyElementsPopulated].value = (float) input->skeletons[skID].head.joint2D[i].x;
++bodyElementsPopulated;
output->skeletonBody[bodyElementsPopulated].value = (float) input->skeletons[skID].head.joint2D[i].y;
++bodyElementsPopulated;
output->skeletonBody[bodyElementsPopulated].value = ( (input->skeletons[skID].head.joint2D[i].x!=0) && (input->skeletons[skID].head.joint2D[i].y!=0) );
++bodyElementsPopulated;
}
}
return 1;
}
int convertMocapNET2OutputToSkeletonSerialized(
struct MocapNET2 * mnet,
struct skeletonSerialized * output,
std::vector<std::vector<float> > mocapNET2DPointsResult,
unsigned int frameNumber,
unsigned int width,
unsigned int height
)
{
if (mocapNET2DPointsResult.size()==0)
{
fprintf(stderr,"convertMocapNET2OutputToSkeletonSerialized cannot work without 3D point results\n");
return 0;
}
struct Skeletons2DDetected input={0};
input.numberOfSkeletonsDetected=1;
input.skeletons[0].body.joint2D[BODY25_Nose].x = mocapNET2DPointsResult[MOCAPNET_JOINT_ORIS05][0];
input.skeletons[0].body.joint2D[BODY25_Nose].y = mocapNET2DPointsResult[MOCAPNET_JOINT_ORIS05][1];
input.skeletons[0].body.joint2D[BODY25_Neck].x = mocapNET2DPointsResult[MOCAPNET_JOINT_NECK][0];
input.skeletons[0].body.joint2D[BODY25_Neck].y = mocapNET2DPointsResult[MOCAPNET_JOINT_NECK][1];
input.skeletons[0].body.joint2D[BODY25_RShoulder].x = mocapNET2DPointsResult[MOCAPNET_JOINT_RSHOULDER][0];
input.skeletons[0].body.joint2D[BODY25_RShoulder].y = mocapNET2DPointsResult[MOCAPNET_JOINT_RSHOULDER][1];
input.skeletons[0].body.joint2D[BODY25_RElbow].x = mocapNET2DPointsResult[MOCAPNET_JOINT_RELBOW][0];
input.skeletons[0].body.joint2D[BODY25_RElbow].y = mocapNET2DPointsResult[MOCAPNET_JOINT_RELBOW][1];
input.skeletons[0].body.joint2D[BODY25_RWrist].x = mocapNET2DPointsResult[MOCAPNET_JOINT_RHAND][0];
input.skeletons[0].body.joint2D[BODY25_RWrist].y = mocapNET2DPointsResult[MOCAPNET_JOINT_RHAND][1];
input.skeletons[0].body.joint2D[BODY25_LShoulder].x = mocapNET2DPointsResult[MOCAPNET_JOINT_LSHOULDER][0];
input.skeletons[0].body.joint2D[BODY25_LShoulder].y = mocapNET2DPointsResult[MOCAPNET_JOINT_LSHOULDER][1];
input.skeletons[0].body.joint2D[BODY25_LElbow].x = mocapNET2DPointsResult[MOCAPNET_JOINT_LELBOW][0];
input.skeletons[0].body.joint2D[BODY25_LElbow].y = mocapNET2DPointsResult[MOCAPNET_JOINT_LELBOW][1];
input.skeletons[0].body.joint2D[BODY25_LWrist].x = mocapNET2DPointsResult[MOCAPNET_JOINT_LHAND][0];
input.skeletons[0].body.joint2D[BODY25_LWrist].y = mocapNET2DPointsResult[MOCAPNET_JOINT_LHAND][1];
input.skeletons[0].body.joint2D[BODY25_MidHip].x = mocapNET2DPointsResult[MOCAPNET_JOINT_HIP][0];
input.skeletons[0].body.joint2D[BODY25_MidHip].y = mocapNET2DPointsResult[MOCAPNET_JOINT_HIP][1];
input.skeletons[0].body.joint2D[BODY25_RHip].x = mocapNET2DPointsResult[MOCAPNET_JOINT_RHIP][0];
input.skeletons[0].body.joint2D[BODY25_RHip].y = mocapNET2DPointsResult[MOCAPNET_JOINT_RHIP][1];
input.skeletons[0].body.joint2D[BODY25_RKnee].x = mocapNET2DPointsResult[MOCAPNET_JOINT_RKNEE][0];
input.skeletons[0].body.joint2D[BODY25_RKnee].y = mocapNET2DPointsResult[MOCAPNET_JOINT_RKNEE][1];
input.skeletons[0].body.joint2D[BODY25_RAnkle].x = mocapNET2DPointsResult[MOCAPNET_JOINT_RFOOT][0];
input.skeletons[0].body.joint2D[BODY25_RAnkle].y = mocapNET2DPointsResult[MOCAPNET_JOINT_RFOOT][1];
input.skeletons[0].body.joint2D[BODY25_LHip].x = mocapNET2DPointsResult[MOCAPNET_JOINT_LHIP][0];
input.skeletons[0].body.joint2D[BODY25_LHip].y = mocapNET2DPointsResult[MOCAPNET_JOINT_LHIP][1];
input.skeletons[0].body.joint2D[BODY25_LKnee].x = mocapNET2DPointsResult[MOCAPNET_JOINT_LKNEE][0];
input.skeletons[0].body.joint2D[BODY25_LKnee].y = mocapNET2DPointsResult[MOCAPNET_JOINT_LKNEE][1];
input.skeletons[0].body.joint2D[BODY25_LAnkle].x = mocapNET2DPointsResult[MOCAPNET_JOINT_LFOOT][0];
input.skeletons[0].body.joint2D[BODY25_LAnkle].y = mocapNET2DPointsResult[MOCAPNET_JOINT_LFOOT][1];
input.skeletons[0].body.joint2D[BODY25_REye].x = mocapNET2DPointsResult[MOCAPNET_JOINT_EYE_R][0];
input.skeletons[0].body.joint2D[BODY25_REye].y = mocapNET2DPointsResult[MOCAPNET_JOINT_EYE_R][1];
input.skeletons[0].body.joint2D[BODY25_LEye].x = mocapNET2DPointsResult[MOCAPNET_JOINT_EYE_L][0];
input.skeletons[0].body.joint2D[BODY25_LEye].y = mocapNET2DPointsResult[MOCAPNET_JOINT_EYE_L][1];
input.skeletons[0].body.joint2D[BODY25_REar].x = mocapNET2DPointsResult[MOCAPNET_JOINT_TEMPORALIS02_R][0];
input.skeletons[0].body.joint2D[BODY25_REar].y = mocapNET2DPointsResult[MOCAPNET_JOINT_TEMPORALIS02_R][1];
input.skeletons[0].body.joint2D[BODY25_LEar].x = mocapNET2DPointsResult[MOCAPNET_JOINT_TEMPORALIS02_L][0];
input.skeletons[0].body.joint2D[BODY25_LEar].y = mocapNET2DPointsResult[MOCAPNET_JOINT_TEMPORALIS02_L][1];
input.skeletons[0].body.joint2D[BODY25_LBigToe].x = mocapNET2DPointsResult[MOCAPNET_JOINT_ENDSITE_TOE1_2_L][0];
input.skeletons[0].body.joint2D[BODY25_LBigToe].y = mocapNET2DPointsResult[MOCAPNET_JOINT_ENDSITE_TOE1_2_L][1];
input.skeletons[0].body.joint2D[BODY25_LSmallToe].x = mocapNET2DPointsResult[MOCAPNET_JOINT_ENDSITE_TOE5_3_L][0];
input.skeletons[0].body.joint2D[BODY25_LSmallToe].y = mocapNET2DPointsResult[MOCAPNET_JOINT_ENDSITE_TOE5_3_L][1];
input.skeletons[0].body.joint2D[BODY25_LHeel].x = mocapNET2DPointsResult[MOCAPNET_JOINT_LFOOT][0];
input.skeletons[0].body.joint2D[BODY25_LHeel].y = mocapNET2DPointsResult[MOCAPNET_JOINT_LFOOT][1];
input.skeletons[0].body.joint2D[BODY25_RBigToe].x = mocapNET2DPointsResult[MOCAPNET_JOINT_ENDSITE_TOE1_2_R][0];
input.skeletons[0].body.joint2D[BODY25_RBigToe].y = mocapNET2DPointsResult[MOCAPNET_JOINT_ENDSITE_TOE1_2_R][1];
input.skeletons[0].body.joint2D[BODY25_RSmallToe].x = mocapNET2DPointsResult[MOCAPNET_JOINT_ENDSITE_TOE5_3_R][0];
input.skeletons[0].body.joint2D[BODY25_RSmallToe].y = mocapNET2DPointsResult[MOCAPNET_JOINT_ENDSITE_TOE5_3_R][1];
input.skeletons[0].body.joint2D[BODY25_RHeel].x = mocapNET2DPointsResult[MOCAPNET_JOINT_RFOOT][0];
input.skeletons[0].body.joint2D[BODY25_RHeel].y = mocapNET2DPointsResult[MOCAPNET_JOINT_RFOOT][1];
//Dont forget to update convertBodySkeletonSerializedToBVHTransform
//Populate right hand
input.skeletons[0].rightHand.joint2D[COCO_Hand_Wrist].x = mocapNET2DPointsResult[MOCAPNET_JOINT_RHAND][0]; //MOCAPNET_OUTPUT_JOINT_RHAND
input.skeletons[0].rightHand.joint2D[COCO_Hand_Wrist].y = mocapNET2DPointsResult[MOCAPNET_JOINT_RHAND][1]; //MOCAPNET_OUTPUT_JOINT_RHAND
//---------------------------------------------------------------------------------
input.skeletons[0].rightHand.joint2D[COCO_Hand_Thumb_1].x = mocapNET2DPointsResult[MOCAPNET_JOINT_RTHUMB][0]; //MOCAPNET_OUTPUT_JOINT_RTHUMB
input.skeletons[0].rightHand.joint2D[COCO_Hand_Thumb_1].y = mocapNET2DPointsResult[MOCAPNET_JOINT_RTHUMB][1]; //MOCAPNET_OUTPUT_JOINT_RTHUMB
input.skeletons[0].rightHand.joint2D[COCO_Hand_Thumb_2].x = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER1_2_R][0]; //MOCAPNET_OUTPUT_JOINT_RTHUMB
input.skeletons[0].rightHand.joint2D[COCO_Hand_Thumb_2].y = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER1_2_R][1]; //MOCAPNET_OUTPUT_JOINT_RTHUMB
input.skeletons[0].rightHand.joint2D[COCO_Hand_Thumb_3].x = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER1_3_R][0]; //MOCAPNET_OUTPUT_JOINT_FINGER1_2_R
input.skeletons[0].rightHand.joint2D[COCO_Hand_Thumb_3].y = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER1_3_R][1]; //MOCAPNET_OUTPUT_JOINT_FINGER1_2_R
input.skeletons[0].rightHand.joint2D[COCO_Hand_Thumb_4].x = mocapNET2DPointsResult[MOCAPNET_JOINT_ENDSITE_FINGER1_3_R][0]; //MOCAPNET_OUTPUT_JOINT_FINGER1_3_R
input.skeletons[0].rightHand.joint2D[COCO_Hand_Thumb_4].y = mocapNET2DPointsResult[MOCAPNET_JOINT_ENDSITE_FINGER1_3_R][1]; //MOCAPNET_OUTPUT_JOINT_FINGER1_3_R
//---------------------------------------------------------------------------------
input.skeletons[0].rightHand.joint2D[COCO_Hand_Index_1].x = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER2_1_R][0]; //MOCAPNET_OUTPUT_JOINT_METACARPAL1_R
input.skeletons[0].rightHand.joint2D[COCO_Hand_Index_1].y = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER2_1_R][1]; //MOCAPNET_OUTPUT_JOINT_METACARPAL1_R
input.skeletons[0].rightHand.joint2D[COCO_Hand_Index_2].x = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER2_2_R][0]; //MOCAPNET_OUTPUT_JOINT_FINGER2_1_R
input.skeletons[0].rightHand.joint2D[COCO_Hand_Index_2].y = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER2_2_R][1]; //MOCAPNET_OUTPUT_JOINT_FINGER2_1_R
input.skeletons[0].rightHand.joint2D[COCO_Hand_Index_3].x = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER2_3_R][0]; //MOCAPNET_OUTPUT_JOINT_FINGER2_2_R
input.skeletons[0].rightHand.joint2D[COCO_Hand_Index_3].y = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER2_3_R][1]; //MOCAPNET_OUTPUT_JOINT_FINGER2_2_R
input.skeletons[0].rightHand.joint2D[COCO_Hand_Index_4].x = mocapNET2DPointsResult[MOCAPNET_JOINT_ENDSITE_FINGER2_3_R][0]; //MOCAPNET_OUTPUT_JOINT_FINGER2_3_R
input.skeletons[0].rightHand.joint2D[COCO_Hand_Index_4].y = mocapNET2DPointsResult[MOCAPNET_JOINT_ENDSITE_FINGER2_3_R][1]; //MOCAPNET_OUTPUT_JOINT_FINGER2_3_R
//---------------------------------------------------------------------------------
input.skeletons[0].rightHand.joint2D[COCO_Hand_Middle_1].x = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER3_1_R][0];//MOCAPNET_OUTPUT_JOINT_METACARPAL2_R
input.skeletons[0].rightHand.joint2D[COCO_Hand_Middle_1].y = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER3_1_R][1];
input.skeletons[0].rightHand.joint2D[COCO_Hand_Middle_2].x = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER3_2_R][0]; //MOCAPNET_OUTPUT_JOINT_FINGER3_1_R
input.skeletons[0].rightHand.joint2D[COCO_Hand_Middle_2].y = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER3_2_R][1];
input.skeletons[0].rightHand.joint2D[COCO_Hand_Middle_3].x = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER3_3_R][0]; //MOCAPNET_OUTPUT_JOINT_FINGER3_2_R
input.skeletons[0].rightHand.joint2D[COCO_Hand_Middle_3].y = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER3_3_R][1];
input.skeletons[0].rightHand.joint2D[COCO_Hand_Middle_4].x = mocapNET2DPointsResult[MOCAPNET_JOINT_ENDSITE_FINGER3_3_R][0]; //MOCAPNET_OUTPUT_JOINT_FINGER3_3_R
input.skeletons[0].rightHand.joint2D[COCO_Hand_Middle_4].y = mocapNET2DPointsResult[MOCAPNET_JOINT_ENDSITE_FINGER3_3_R][1]; //MOCAPNET_OUTPUT_JOINT_FINGER3_3_R
//---------------------------------------------------------------------------------
input.skeletons[0].rightHand.joint2D[COCO_Hand_Ring_1].x = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER4_1_R][0]; //MOCAPNET_OUTPUT_JOINT_METACARPAL3_R
input.skeletons[0].rightHand.joint2D[COCO_Hand_Ring_1].y = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER4_1_R][1];
input.skeletons[0].rightHand.joint2D[COCO_Hand_Ring_2].x = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER4_2_R][0]; //MOCAPNET_OUTPUT_JOINT_FINGER4_1_R
input.skeletons[0].rightHand.joint2D[COCO_Hand_Ring_2].y = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER4_2_R][1];
input.skeletons[0].rightHand.joint2D[COCO_Hand_Ring_3].x = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER4_3_R][0]; //MOCAPNET_OUTPUT_JOINT_FINGER4_2_R
input.skeletons[0].rightHand.joint2D[COCO_Hand_Ring_3].y = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER4_3_R][1];
input.skeletons[0].rightHand.joint2D[COCO_Hand_Ring_4].x = mocapNET2DPointsResult[MOCAPNET_JOINT_ENDSITE_FINGER4_3_R][0]; //MOCAPNET_OUTPUT_JOINT_FINGER4_3_R
input.skeletons[0].rightHand.joint2D[COCO_Hand_Ring_4].y = mocapNET2DPointsResult[MOCAPNET_JOINT_ENDSITE_FINGER4_3_R][1]; //MOCAPNET_OUTPUT_JOINT_FINGER4_3_R
//---------------------------------------------------------------------------------
input.skeletons[0].rightHand.joint2D[COCO_Hand_Pinky_1].x = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER5_1_R][0]; //MOCAPNET_OUTPUT_JOINT_METACARPAL4_R
input.skeletons[0].rightHand.joint2D[COCO_Hand_Pinky_1].y = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER5_1_R][1];
input.skeletons[0].rightHand.joint2D[COCO_Hand_Pinky_2].x = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER5_2_R][0]; //MOCAPNET_OUTPUT_JOINT_FINGER5_1_R
input.skeletons[0].rightHand.joint2D[COCO_Hand_Pinky_2].y = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER5_2_R][1];
input.skeletons[0].rightHand.joint2D[COCO_Hand_Pinky_3].x = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER5_3_R][0]; //MOCAPNET_OUTPUT_JOINT_FINGER5_2_R
input.skeletons[0].rightHand.joint2D[COCO_Hand_Pinky_3].y = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER5_3_R][1];
input.skeletons[0].rightHand.joint2D[COCO_Hand_Pinky_4].x = mocapNET2DPointsResult[MOCAPNET_JOINT_ENDSITE_FINGER5_3_R][0]; //MOCAPNET_OUTPUT_JOINT_FINGER5_3_R
input.skeletons[0].rightHand.joint2D[COCO_Hand_Pinky_4].y = mocapNET2DPointsResult[MOCAPNET_JOINT_ENDSITE_FINGER5_3_R][1]; //MOCAPNET_OUTPUT_JOINT_FINGER5_3_R
//---------------------------------------------------------------------------------
//Dont forget convertRHandSkeletonSerializedToBVHTransform needs to also be updated
//Populate left hand
input.skeletons[0].leftHand.joint2D[COCO_Hand_Wrist].x = mocapNET2DPointsResult[MOCAPNET_JOINT_LHAND][0];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Wrist].y = mocapNET2DPointsResult[MOCAPNET_JOINT_LHAND][1];
//---------------------------------------------------------------------------------
input.skeletons[0].leftHand.joint2D[COCO_Hand_Thumb_1].x = mocapNET2DPointsResult[MOCAPNET_JOINT_LTHUMB][0];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Thumb_1].y = mocapNET2DPointsResult[MOCAPNET_JOINT_LTHUMB][1];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Thumb_2].x = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER1_2_L][0];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Thumb_2].y = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER1_2_L][1];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Thumb_3].x = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER1_3_L][0];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Thumb_3].y = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER1_3_L][1];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Thumb_4].x = mocapNET2DPointsResult[MOCAPNET_JOINT_ENDSITE_FINGER1_3_L][0];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Thumb_4].y = mocapNET2DPointsResult[MOCAPNET_JOINT_ENDSITE_FINGER1_3_L][1];
//---------------------------------------------------------------------------------
input.skeletons[0].leftHand.joint2D[COCO_Hand_Index_1].x = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER2_1_L][0];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Index_1].y = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER2_1_L][1];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Index_2].x = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER2_2_L][0];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Index_2].y = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER2_2_L][1];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Index_3].x = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER2_3_L][0];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Index_3].y = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER2_3_L][1];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Index_4].x = mocapNET2DPointsResult[MOCAPNET_JOINT_ENDSITE_FINGER2_3_L][0];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Index_4].y = mocapNET2DPointsResult[MOCAPNET_JOINT_ENDSITE_FINGER2_3_L][1]; //Maybe the end site is prefereable?
//---------------------------------------------------------------------------------
input.skeletons[0].leftHand.joint2D[COCO_Hand_Middle_1].x = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER3_1_L][0];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Middle_1].y = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER3_1_L][1];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Middle_2].x = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER3_2_L][0];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Middle_2].y = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER3_2_L][1];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Middle_3].x = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER3_3_L][0];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Middle_3].y = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER3_3_L][1];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Middle_4].x = mocapNET2DPointsResult[MOCAPNET_JOINT_ENDSITE_FINGER3_3_L][0];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Middle_4].y = mocapNET2DPointsResult[MOCAPNET_JOINT_ENDSITE_FINGER3_3_L][1]; //Maybe the end site is prefereable?
//---------------------------------------------------------------------------------
input.skeletons[0].leftHand.joint2D[COCO_Hand_Ring_1].x = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER4_1_L][0];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Ring_1].y = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER4_1_L][1];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Ring_2].x = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER4_2_L][0];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Ring_2].y = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER4_2_L][1];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Ring_3].x = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER4_3_L][0];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Ring_3].y = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER4_3_L][1];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Ring_4].x = mocapNET2DPointsResult[MOCAPNET_JOINT_ENDSITE_FINGER4_3_L][0];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Ring_4].y = mocapNET2DPointsResult[MOCAPNET_JOINT_ENDSITE_FINGER4_3_L][1]; //Maybe the end site is prefereable?
//---------------------------------------------------------------------------------
input.skeletons[0].leftHand.joint2D[COCO_Hand_Pinky_1].x = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER5_1_L][0];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Pinky_1].y = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER5_1_L][1];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Pinky_2].x = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER5_2_L][0];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Pinky_2].y = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER5_2_L][1];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Pinky_3].x = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER5_3_L][0];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Pinky_3].y = mocapNET2DPointsResult[MOCAPNET_JOINT_FINGER5_3_L][1];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Pinky_4].x = mocapNET2DPointsResult[MOCAPNET_JOINT_ENDSITE_FINGER5_3_L][0];
input.skeletons[0].leftHand.joint2D[COCO_Hand_Pinky_4].y = mocapNET2DPointsResult[MOCAPNET_JOINT_ENDSITE_FINGER5_3_L][1]; //Maybe the end site is prefereable?
//---------------------------------------------------------------------------------
//Dont forget convertLHandSkeletonSerializedToBVHTransform needs to also be updated
//Populate face
input.skeletons[0].head.joint2D[OP_Head_REye_2].x = mocapNET2DPointsResult[MOCAPNET_JOINT_ORBICULARIS03_R][0];
input.skeletons[0].head.joint2D[OP_Head_REye_2].y = mocapNET2DPointsResult[MOCAPNET_JOINT_ORBICULARIS03_R][1];
input.skeletons[0].head.joint2D[OP_Head_REye].x = mocapNET2DPointsResult[MOCAPNET_JOINT_EYE_R][0];
input.skeletons[0].head.joint2D[OP_Head_REye].y = mocapNET2DPointsResult[MOCAPNET_JOINT_EYE_R][1];
input.skeletons[0].head.joint2D[OP_Head_REye_5].x = mocapNET2DPointsResult[MOCAPNET_JOINT_ORBICULARIS04_R][0];
input.skeletons[0].head.joint2D[OP_Head_REye_5].y = mocapNET2DPointsResult[MOCAPNET_JOINT_ORBICULARIS04_R][1];
//---------------------------------------------------------------------------------
input.skeletons[0].head.joint2D[OP_Head_LEye_2].x = mocapNET2DPointsResult[MOCAPNET_JOINT_ORBICULARIS03_L][0];
input.skeletons[0].head.joint2D[OP_Head_LEye_2].y = mocapNET2DPointsResult[MOCAPNET_JOINT_ORBICULARIS03_L][1];
input.skeletons[0].head.joint2D[OP_Head_LEye].x = mocapNET2DPointsResult[MOCAPNET_JOINT_EYE_L][0];
input.skeletons[0].head.joint2D[OP_Head_LEye].y = mocapNET2DPointsResult[MOCAPNET_JOINT_EYE_L][1];
input.skeletons[0].head.joint2D[OP_Head_LEye_5].x = mocapNET2DPointsResult[MOCAPNET_JOINT_ORBICULARIS04_L][0];
input.skeletons[0].head.joint2D[OP_Head_LEye_5].y = mocapNET2DPointsResult[MOCAPNET_JOINT_ORBICULARIS04_L][1];
//---------------------------------------------------------------------------------
input.skeletons[0].head.joint2D[OP_Head_Chin].x = mocapNET2DPointsResult[MOCAPNET_JOINT_SPECIAL04][0];
input.skeletons[0].head.joint2D[OP_Head_Chin].y = mocapNET2DPointsResult[MOCAPNET_JOINT_SPECIAL04][1];
//---------------------------------------------------------------------------------
input.skeletons[0].head.joint2D[OP_Head_InMouth_1].x = mocapNET2DPointsResult[MOCAPNET_JOINT_ORIS03_R][0];
input.skeletons[0].head.joint2D[OP_Head_InMouth_1].y = mocapNET2DPointsResult[MOCAPNET_JOINT_ORIS03_R][1];
input.skeletons[0].head.joint2D[OP_Head_InMouth_2].x = mocapNET2DPointsResult[MOCAPNET_JOINT_ORIS05][0];
input.skeletons[0].head.joint2D[OP_Head_InMouth_2].y = mocapNET2DPointsResult[MOCAPNET_JOINT_ORIS05][1];
input.skeletons[0].head.joint2D[OP_Head_InMouth_3].x = mocapNET2DPointsResult[MOCAPNET_JOINT_ORIS03_L][0];
input.skeletons[0].head.joint2D[OP_Head_InMouth_3].y = mocapNET2DPointsResult[MOCAPNET_JOINT_ORIS03_L][1];
//---------------------------------------------------------------------------------
input.skeletons[0].head.joint2D[OP_Head_InMouth_7].x = mocapNET2DPointsResult[MOCAPNET_JOINT_ORIS07_R][0];
input.skeletons[0].head.joint2D[OP_Head_InMouth_7].y = mocapNET2DPointsResult[MOCAPNET_JOINT_ORIS07_R][1];
input.skeletons[0].head.joint2D[OP_Head_InMouth_6].x = mocapNET2DPointsResult[MOCAPNET_JOINT_ORIS01][0];
input.skeletons[0].head.joint2D[OP_Head_InMouth_6].y = mocapNET2DPointsResult[MOCAPNET_JOINT_ORIS01][1];
input.skeletons[0].head.joint2D[OP_Head_InMouth_5].x = mocapNET2DPointsResult[MOCAPNET_JOINT_ORIS07_L][0];
input.skeletons[0].head.joint2D[OP_Head_InMouth_5].y = mocapNET2DPointsResult[MOCAPNET_JOINT_ORIS07_L][1];
//---------------------------------------------------------------------------------
// Dont forget to update convertFaceSkeletonSerializedToBVHTransform
/*
for (int jID=0; jID<getBVHNumberOfJoints(); jID++)
{
const char * jointName = getBVHJointName(jID);
fprintf(stderr,"%u = %s \n",jID,jointName);
}*/
return convertSkeletons2DDetectedToSkeletonsSerialized(
output,
&input,
frameNumber,
width,
height
);
}
int affineSkeletonRotation(struct skeletonSerialized * input,float degrees)
{
if (degrees==0.0) { return 1; }
//---------------------------------------------------------------------------
float rad = degrees_to_radF(degrees);
//---------------------------------------------------------------------------
unsigned int hipJoint = 1 + BODY25_MidHip; //+1 because the first three parameters are for skeleton ids etc.
float hipX = input->skeletonBody[hipJoint*3+0].value;
float hipY = input->skeletonBody[hipJoint*3+1].value;
char hipVisibility = (input->skeletonBody[hipJoint*3+2].value > 0.0);
if (hipVisibility)
{
if (input!=0)
{
for (unsigned int jID = 0; jID< input->skeletonBodyElements/3; jID++)
{
float x=input->skeletonBody[jID*3+0].value;
float y=input->skeletonBody[jID*3+1].value;
char visibility=(char) (input->skeletonBody[jID*3+2].value > 0.0);
if (visibility)
{
//Subtract HIP from every joint and perform a 2D rotation using the rad variable
float unrotatedX = x-hipX;
//Subtract HIP from every joint and perform a 2D rotation using the rad variable
float unrotatedY = y-hipY;
input->skeletonBody[jID*3+0].value = hipX + (unrotatedX * cosf(rad)) - (unrotatedY * sinf(rad));
input->skeletonBody[jID*3+1].value = hipY + (unrotatedX * sinf(rad)) + (unrotatedY * cosf(rad));
}
}
return 1;
}
}
return 0;
}
float rotationRequiredToMakeSkeletonCloserToTrainingDataset(struct skeletonSerialized * input)
{
//--------------------------------------------------------------------
unsigned int hipJoint = 1 + BODY25_MidHip; //+1 because the first three parameters are for skeleton ids etc.
float hipX = input->skeletonBody[hipJoint*3+0].value;
float hipY = input->skeletonBody[hipJoint*3+1].value;
char hipVisibility = (input->skeletonBody[hipJoint*3+2].value > 0.0);
//--------------------------------------------------------------------
unsigned int neckJoint = 1 + BODY25_Neck; //+1 because the first three parameters are for skeleton ids etc.
float neckX = input->skeletonBody[neckJoint*3+0].value;
float neckY = input->skeletonBody[neckJoint*3+1].value;
char neckVisibility = (input->skeletonBody[neckJoint*3+2].value > 0.0);
//--------------------------------------------------------------------
if ( (hipVisibility) && (neckVisibility) )
{
float alignmentAngle=getAngleToAlignToZero_tools(hipX,hipY,neckX,neckY);
return alignmentAngle;
}
return 0.0;
}
int makeSkeletonUpright(struct skeletonSerialized * input)
{
float angleCorrectionNeededInDegrees = 180 + goFromRadToDegrees * rotationRequiredToMakeSkeletonCloserToTrainingDataset(input);
if (angleCorrectionNeededInDegrees!=180.0)
{
return affineSkeletonRotation(input,angleCorrectionNeededInDegrees);
}
return 0;
}
@@ -0,0 +1,62 @@
#pragma once
/** @file conversions.hpp
* @brief Unfortunately due to the complexity of the problem and the different libraries used there cannot be a single skeleton representation.
* This module handles conversions between std::vector<float> which is used by Tensorflow/NeuralNetwork layer , skeletonSerialized which is used by MocapNET and Skeletons2DDetected which is used by the 2D estimator
* @author Ammar Qammaz (AmmarkoV)
*/
#include <vector>
#include "../mocapnet2.hpp"
#include "../../../JointEstimator2D/jointEstimator2D.hpp"
int appendVectorToFile(const char * filename, std::vector<float> vec);
int initializeAssociationsForSubsetOfSkeleton(
unsigned int * targetIndexIsInitializedFlag,
unsigned int * targetIndexes,
unsigned int targetLength,
const char * * targetLabels,
struct skeletonSerialized * input
);
std::vector<float> deriveMocapNET2InputUsingAssociations(
struct MocapNET2 * mnet,
struct skeletonSerialized * input,
unsigned int * targetIndexIsInitializedFlag,
unsigned int * targetIndexes,
unsigned int targetLength,
const char * * targetLabels,
int verbose
);
int convertSkeletons2DDetectedToSkeletonsSerialized(
struct skeletonSerialized * output,
struct Skeletons2DDetected * input,
unsigned int frameNumber,
unsigned int width,
unsigned int height
);
int convertMocapNET2OutputToSkeletonSerialized(
struct MocapNET2 * mnet ,
struct skeletonSerialized * output ,
std::vector<std::vector<float> > mocapNET2DPointsResult,
unsigned int frameNumber,
unsigned int width,
unsigned int height
);
int affineSkeletonRotation(struct skeletonSerialized * input,float degrees);
float rotationRequiredToMakeSkeletonCloserToTrainingDataset(struct skeletonSerialized * input);
int makeSkeletonUpright(struct skeletonSerialized * input);
@@ -0,0 +1,653 @@
#include <iostream>
#include <stdio.h>
#include <vector>
#include <math.h>
#include <string.h>
#include "csvRead.hpp"
#include "../../MocapNETLib2/mocapnet2.hpp"
#include "../../MocapNETLib2/IO/jsonMocapNETHelpers.hpp"
#include "../../../../dependencies/InputParser/InputParser_C.h"
#define NORMAL "\033[0m"
#define BLACK "\033[30m" /* Black */
#define RED "\033[31m" /* Red */
#define GREEN "\033[32m" /* Green */
#define YELLOW "\033[33m" /* Yellow */
unsigned int getBodyLinesOfCSVFIle(struct CSVFileContext * csv,const char * filename)
{
FILE * fp = fopen(filename,"r");
{
// Extract characters from file and store in character c
unsigned int count=0;
char c;
for (c = getc(fp); c != EOF; c = getc(fp))
if (c == '\n') // Increment count if this character is newline
{
count = count + 1;
}
fclose(fp);
//The first line of a CSV is its header so we don't count this ..
if (count>0)
{
--count;
}
return count;
}
return 0;
}
int openCSVFile(struct CSVFileContext * csv,const char * filename)
{
csv->fp = fopen(filename,"r");
if (csv->fp!=0)
{
csv->lineNumber=0;
csv->numberOfHeaderFields=0;
fprintf(stderr,GREEN "Successfully opened CSV file %s\n" NORMAL,filename);
return 1;
}
fprintf(stderr,RED "Failed to open CSV file %s\n" NORMAL,filename);
return 0;
}
int closeCSVFile(struct CSVFileContext * csv)
{
if (csv==0)
{
fprintf(stderr,RED "Dont need to close empty CSV struct..\n" NORMAL);
return 1;
}
if (csv->fp==0)
{
fprintf(stderr,RED "Dont need to close CSV header that has already been closed..\n" NORMAL);
return 1;
}
if (csv->fp!=0)
{
//TODO FREE STUFF HERE..
int i=0;
for (i=0; i<csv->numberOfHeaderFields; i++)
{
if (csv->field[i].str!=0)
{
free(csv->field[i].str);
csv->field[i].str=0;
}
}
fclose(csv->fp);
}
return 1;
}
int parseCSVHeader(struct CSVFileContext * csv)
{
if (csv==0)
{
fprintf(stderr,RED "Cannot parse empty CSV header..\n" NORMAL);
return 0;
}
if (csv->fp==0)
{
fprintf(stderr,RED "Cannot parse CSV header that hasn't been opened using openCSVFile..\n" NORMAL);
return 0;
}
fprintf(stderr,"Parsing CSV header..\n");
char whereToStoreItems[513]= {0};
char * line = NULL;
size_t len = 0;
ssize_t read;
if (csv->lineNumber==0)
{
read = getline(&line, &len, csv->fp);
if (line!=0)
{
struct InputParserC * ipc = InputParser_Create(8096,4);
InputParser_SetDelimeter(ipc,0,',');
InputParser_SetDelimeter(ipc,1,0);
InputParser_SetDelimeter(ipc,2,10);
InputParser_SetDelimeter(ipc,3,13);
int numberOfArguments = InputParser_SeperateWords(ipc,line,1);
if (numberOfArguments<MAX_CSV_HEADER_FIELDS)
{
int i=0;
for (i=0; i<numberOfArguments; i++)
{
//InputParser_GetWord InputParser_GetLowercaseWord
InputParser_GetLowercaseWord(ipc,i,whereToStoreItems,512);
//fprintf(stderr,"CSV Header element %u => %s\n",i,whereToStoreItems);
csv->field[i].strLength = strlen(whereToStoreItems);
csv->field[i].str = (char*) malloc(sizeof(char) * (csv->field[i].strLength+2));
memcpy(csv->field[i].str,whereToStoreItems,csv->field[i].strLength);
csv->field[i].str[csv->field[i].strLength]=0;
++csv->numberOfHeaderFields;
}
}
else
{
fprintf(stderr,"Too many CSV header arguments (encountered %u, max %u)..\n",numberOfArguments,MAX_CSV_HEADER_FIELDS);
InputParser_Destroy(ipc);
if (line!=0)
{
free(line);
line=0;
}
return 0;
}
InputParser_Destroy(ipc);
csv->lineNumber = csv->lineNumber +1;
if (line!=0)
{
free(line);
line=0;
}
return 1;
}
}
if (line!=0)
{
free(line);
line=0;
}
return 0;
}
int parseNextCSVFloatLine(struct CSVFileContext * csv,struct CSVFloatFileLine * csvLine)
{
if (csv==0)
{
return 0;
}
if (csvLine==0)
{
return 0;
}
char * line = NULL;
size_t len = 0;
ssize_t read;
if (csv->lineNumber==0)
{
if (!parseCSVHeader(csv))
{
fprintf(stderr,RED "Could not read CSV header on first loop\n" NORMAL);
return 0;
}
}
if ((read = getline(&line, &len, csv->fp)) != -1)
{
struct InputParserC * ipc = InputParser_Create(8096,4);
InputParser_SetDelimeter(ipc,0,',');
InputParser_SetDelimeter(ipc,1,0);
InputParser_SetDelimeter(ipc,2,10);
InputParser_SetDelimeter(ipc,3,13);
csvLine->lineNumber=csv->lineNumber;
csvLine->numberOfFields = InputParser_SeperateWords(ipc,line,1);
//fprintf(stderr,"Line %u (%s) has %u arguments \n",csvLine->lineNumber,line,csvLine->numberOfFields );
if ( csvLine->numberOfFields != csv->numberOfHeaderFields )
{
fprintf(stderr,RED "Number of header fields %u does not correspond with number of body elements %u \n" NORMAL,csv->numberOfHeaderFields,csvLine->numberOfFields);
}
for (int i=0; i<csvLine->numberOfFields; i++)
{
csvLine->field[i] = InputParser_GetWordFloat(ipc,i);
//fprintf(stderr,"%s(%u)=%0.2f ",csv->field[i].str,i,csvLine->field[i]);
}
InputParser_Destroy(ipc);
csv->lineNumber = csv->lineNumber+1;
if (line!=0)
{
free(line);
line=0;
}
return 1;
}
if (line!=0)
{
free(line);
line=0;
}
return 0;
}
int parseNextCSVCOCOSkeleton(struct CSVFileContext * csv, struct skeletonSerialized * skel)
{
if (csv==0)
{
return 0;
}
if (skel==0)
{
return 0;
}
char * line = NULL;
size_t len = 0;
ssize_t read;
if (csv->lineNumber==0)
{
if (!parseCSVHeader(csv))
{
fprintf(stderr,RED "Could not read CSV header on first loop\n" NORMAL);
return 0;
}
/*
else
{
fprintf(stderr,"Header of skeleton parsed successfully..\n");
for (unsigned int i=0; i<csv->numberOfHeaderFields; i++)
{
fprintf(stderr,"CSV file header element %u => %s \n",i,csv->field[i].str);
}
}*/
}
if ((read = getline(&line, &len, csv->fp)) != -1)
{
//CSV files are always stored normalized..
skel->width = 1.0;
skel->height = 1.0;
struct InputParserC * ipc = InputParser_Create(8096,4);
InputParser_SetDelimeter(ipc,0,',');
InputParser_SetDelimeter(ipc,1,0);
InputParser_SetDelimeter(ipc,2,10);
InputParser_SetDelimeter(ipc,3,13);
skel->skeletonBodyElements = InputParser_SeperateWords(ipc,line,1);
//fprintf(stderr,"Line %u (%s) has %u arguments \n",csv->lineNumber,line,skel->skeletonBodyElements);
int typeOfData=0,jointID=0;
float value=0.0;
if ( skel->skeletonBodyElements != csv->numberOfHeaderFields )
{
fprintf(stderr,"Number of header fields %u does not correspond with number of body elements %u \n",csv->numberOfHeaderFields,skel->skeletonBodyElements);
}
//Copy references to header ..
skel->skeletonHeaderElements=csv->numberOfHeaderFields;
for (int i=0; i<csv->numberOfHeaderFields; i++)
{
skel->skeletonHeader[i].strLength = csv->field[i].strLength;
skel->skeletonHeader[i].str = csv->field[i].str;
}
for (int i=0; i<skel->skeletonBodyElements; i++)
{
//fprintf(stderr,"CSV Header element %u => %s\n",i,whereToStoreItems);
skel->skeletonBody[i].value = InputParser_GetWordFloat(ipc,i);
//fprintf(stderr,"%s(%u)=%0.2f ",csv->field[i].str,i,skel->skeletonBody[i].value);
}
InputParser_Destroy(ipc);
csv->lineNumber = csv->lineNumber+1;
if (line!=0)
{
free(line);
line=0;
}
return 1;
}
if (line!=0)
{
free(line);
line=0;
}
return 0;
}
int uniformlyScaleSerializedSkeleton(struct skeletonSerialized * skel,float factor)
{
if (skel==0)
{
return 0;
}
for (int i=0; i<skel->skeletonBodyElements; i++)
{
skel->skeletonBody[i].value *= factor;
}
return 1;
}
int scaleSerializedSkeletonX(struct skeletonSerialized * skel,float factorX)
{
if (skel==0)
{
return 0;
}
if (skel->skeletonHeaderElements!=skel->skeletonBodyElements)
{
fprintf(stderr,"scaleSerializedSkeletonX: Inconsistent headers length\n");
return 0;
}
int scaledJoints=0;
for (int i=0; i<skel->skeletonHeaderElements; i++)
{
if
(
( skel->skeletonHeader[i].strLength >4 ) &&
( skel->skeletonHeader[i].str!=0 )
)
{
if (
(skel->skeletonHeader[i].str[0]=='2') &&
( (skel->skeletonHeader[i].str[1]=='D') || (skel->skeletonHeader[i].str[1]=='d') ) &&
( (skel->skeletonHeader[i].str[2]=='X') || (skel->skeletonHeader[i].str[2]=='x') ) &&
(skel->skeletonHeader[i].str[3]=='_')
)
{
skel->skeletonBody[i].value *= factorX;
++scaledJoints;
}
}
}
return scaledJoints;
}
int scaleSerializedSkeletonY(struct skeletonSerialized * skel,float factorY)
{
if (skel==0)
{
return 0;
}
if (skel->skeletonHeaderElements!=skel->skeletonBodyElements)
{
fprintf(stderr,"scaleSerializedSkeletonY: Inconsistent headers length\n");
return 0;
}
int scaledJoints=0;
for (int i=0; i<skel->skeletonHeaderElements; i++)
{
if
(
( skel->skeletonHeader[i].strLength >4 ) &&
( skel->skeletonHeader[i].str!=0 )
)
{
if (
(skel->skeletonHeader[i].str[0]=='2') &&
( (skel->skeletonHeader[i].str[1]=='D') || (skel->skeletonHeader[i].str[1]=='d') ) &&
( (skel->skeletonHeader[i].str[2]=='Y') || (skel->skeletonHeader[i].str[2]=='y') ) &&
(skel->skeletonHeader[i].str[3]=='_')
)
{
skel->skeletonBody[i].value *= factorY;
++scaledJoints;
}
///else { fprintf(stderr,"`%s` does not match\n",skel->skeletonHeader[i].str); }
}
}
return scaledJoints;
}
int scaleSerializedSkeletonFromCenter(struct skeletonSerialized * skel,float factorX,float factorY)
{
if (skel==0)
{
return 0;
}
// Assuming we have a 2D point cloud with points 0..1,0..1
// This is how we model the framebuffer
// 0,0 __________________________________________________________________________________ 1,0
// | /\ |
// | | 0.5 |
// | | |
// | 0.5 | 0.5 |
// | <----------------------------- * -----------------------------> |
// | | |
// | | |
// | | 0.5 |
// | \/ |
// 0,1------------------------------------------------------------------------------------ 1,1
// The * is the center of the image..
// We want to scale X,Y points based on factorX and factorY
//However the magnitued of the scaling will be linear to the distance from the
//Center of the image , Points 0.5 units away from the center will be scaled fully with the factor
//Points close to the center will be not scaled at all..
if (skel->skeletonHeaderElements!=skel->skeletonBodyElements)
{
fprintf(stderr,"scaleSerializedSkeletonY: Inconsistent headers length\n");
return 0;
}
float value,magnitude,maximumFactor,thisFactorY,relativeY,thisFactorX,relativeX;
int scaledJoints=0;
for (int i=0; i<skel->skeletonHeaderElements; i++)
{
if
(
( skel->skeletonHeader[i].strLength >4 ) &&
( skel->skeletonHeader[i].str!=0 )
)
{
if (
(skel->skeletonHeader[i].str[0]=='2') &&
( (skel->skeletonHeader[i].str[1]=='D') || (skel->skeletonHeader[i].str[1]=='d') ) &&
( (skel->skeletonHeader[i].str[2]=='X') || (skel->skeletonHeader[i].str[2]=='x') ) &&
(skel->skeletonHeader[i].str[3]=='_')
)
{
if (factorX!=1.0)
{
value = skel->skeletonBody[i].value;
maximumFactor = factorX-1.0;
magnitude = (float) fabs(value-0.5)/0.5;
thisFactorX = (magnitude * maximumFactor) + 1.0;
relativeX = value - 0.5;
relativeX *= thisFactorX;
skel->skeletonBody[i].value = relativeX + 0.5 ;
++scaledJoints;
}
}
else if (
(skel->skeletonHeader[i].str[0]=='2') &&
( (skel->skeletonHeader[i].str[1]=='D') || (skel->skeletonHeader[i].str[1]=='d') ) &&
( (skel->skeletonHeader[i].str[2]=='Y') || (skel->skeletonHeader[i].str[2]=='y') ) &&
(skel->skeletonHeader[i].str[3]=='_')
)
{
if (factorY!=1.0)
{
value = skel->skeletonBody[i].value;
maximumFactor = factorY-1.0;
magnitude = (float) fabs(value-0.5)/0.5;
thisFactorY = ( magnitude * maximumFactor ) + 1.0;
relativeY = value - 0.5;
relativeY *= thisFactorY;
skel->skeletonBody[i].value = relativeY + 0.5 ;
++scaledJoints;
}
}
} //Valid header
} // For each joint
return scaledJoints;
}
#ifdef __GNUC__
# if __GNUC_PREREQ(5,5)
// If gcc_version >= RANDOM support
#include <random> //For generating random samples based on a normal distribution
//This function makes the life of the 3D pose estimator more difficult by adding a configurable level of gaussian noise on the 2D pixels estimated
int perturbSerializedSkeletonUsingGaussianNoise(struct skeletonSerialized * skel,float gaussianNoiseInNormalizedPixelsX,float gaussianNoiseInNormalizedPixelsY)
{
if (skel->skeletonHeaderElements!=skel->skeletonBodyElements)
{
fprintf(stderr,"perturbSerializedSkeletonUsingGaussianNoise: Inconsistent headers length\n");
return 0;
}
std::default_random_engine generator;
std::normal_distribution<float> distributionX(0.0,gaussianNoiseInNormalizedPixelsX);
std::normal_distribution<float> distributionY(0.0,gaussianNoiseInNormalizedPixelsY);
float value,magnitude,maximumFactor,thisFactorY,relativeY,thisFactorX,relativeX;
int perturbedCoordinates=0;
for (int i=0; i<skel->skeletonHeaderElements; i++)
{
if
(
( skel->skeletonHeader[i].strLength >4 ) &&
( skel->skeletonHeader[i].str!=0 )
)
{
if (
(skel->skeletonHeader[i].str[0]=='2') &&
( (skel->skeletonHeader[i].str[1]=='D') || (skel->skeletonHeader[i].str[1]=='d') ) &&
( (skel->skeletonHeader[i].str[2]=='X') || (skel->skeletonHeader[i].str[2]=='x') ) &&
(skel->skeletonHeader[i].str[3]=='_')
)
{
if (gaussianNoiseInNormalizedPixelsX>0.0)
{
float perturbation = distributionX(generator);
skel->skeletonBody[i].value += perturbation;
++perturbedCoordinates;
}
}
else if (
(skel->skeletonHeader[i].str[0]=='2') &&
( (skel->skeletonHeader[i].str[1]=='D') || (skel->skeletonHeader[i].str[1]=='d') ) &&
( (skel->skeletonHeader[i].str[2]=='Y') || (skel->skeletonHeader[i].str[2]=='y') ) &&
(skel->skeletonHeader[i].str[3]=='_')
)
{
if (gaussianNoiseInNormalizedPixelsY>0.0)
{
float perturbation = distributionY(generator);
skel->skeletonBody[i].value += perturbation;
++perturbedCoordinates;
}
}
} //Valid header
} // For each joint
return perturbedCoordinates;
}
# else
#warning "Your compiler is too old and is missing normal random distributions"
int perturbSerializedSkeletonUsingGaussianNoise(struct skeletonSerialized * skel,float gaussianNoiseInNormalizedPixelsX,float gaussianNoiseInNormalizedPixelsY)
{
fprintf(stderr,RED "\n\n\n\nYour compiler is too old and is missing normal random distributions\n\n\n\n" NORMAL );
return 0;
}
// Else
# endif
#else
int perturbSerializedSkeletonUsingGaussianNoise(struct skeletonSerialized * skel,float gaussianNoiseInNormalizedPixelsX,float gaussianNoiseInNormalizedPixelsY)
{
fprintf(stderr,RED "\n\n\n\nYour compiler is not GCC old and is missing(?) normal random distributions\n\n\n\n" NORMAL );
return 0;
}
// If not gcc
#endif
/*
float rand_FloatRange(float a, float b)
{
return ((b - a) * ((float)rand() / RAND_MAX)) + a;
}*/
std::vector<std::vector<float> > get2DPointsFromSkeleton(struct skeletonSerialized * skel)
{
fprintf(stderr,"get2DPointsFromSkeleton: ");
std::vector<std::vector<float> > finalVector;
if (skel==0)
{
fprintf(stderr,"get2DPointsFromSkeleton: No input\n");
return finalVector;
}
if (skel->skeletonBodyElements!=skel->skeletonHeaderElements)
{
fprintf(stderr,"get2DPointsFromSkeleton: Mismatch of elements of body/header\n");
return finalVector;
}
std::vector<float> points2D;
for (int i=0; i<skel->skeletonBodyElements; i++)
{
if ( strstr(skel->skeletonHeader[i].str,"2DX_")!=0)
{
points2D.push_back(skel->skeletonBody[i].value);
}
else if ( strstr(skel->skeletonHeader[i].str,"2DY_")!=0)
{
points2D.push_back(skel->skeletonBody[i].value);
}
else if ( strstr(skel->skeletonHeader[i].str,"visible_")!=0)
{
finalVector.push_back(points2D);
points2D.clear();
}
}
fprintf(stderr,"survived..\n");
return finalVector;
}
@@ -0,0 +1,91 @@
#pragma once
/** @file csvRead.hpp
* @brief To simplify dataset parsing the very simple CSV ( comma seperated value ) format is used by MocapNET2
* This module facilitates opening,parsing and performing some trivial processing of CSV input files..
* @author Ammar Qammaz (AmmarkoV)
*/
#include <vector>
#include "commonSkeleton.hpp"
#define MAX_CSV_HEADER_FIELDS 1024
/**
* @brief Each CSV file needs a context to be parsed, this contains the file discriptor the current line number, the number of fields in the header as well as header fields
*/
struct CSVFileContext
{
FILE * fp;
unsigned int lineNumber;
unsigned int numberOfHeaderFields;
struct headerField field[MAX_CSV_HEADER_FIELDS];
};
/**
* @brief We may choose to parse a CSV file that only consists of floats, for this specific type there is an optimized CSV context
*/
struct CSVFloatFileLine
{
unsigned int lineNumber;
unsigned int numberOfFields;
float field[MAX_CSV_HEADER_FIELDS];
};
/**
* @brief Write a skeleton to a CSV. This is the first call that prepares the header
* @param CSV context
* @param filename of CSV file
* @retval 0=Failure/No lines, Otherwise the number of body lines is returned
*/
unsigned int getBodyLinesOfCSVFIle(struct CSVFileContext * csv,const char * filename);
/**
* @brief This is the initial call to open a CSV file, you need to have a preallocated CSVFileContext strcture as well as a filename. Also don't forget to call closeCSVFile after you are done parsing it
* @param CSV context
* @param filename of CSV file
* @retval 0=Failure/1=Success
*/
int openCSVFile(struct CSVFileContext * csv,const char * filename);
/**
* @brief This call should be executed once after opening a CSV file to parse it's header
* @param CSV context
* @retval 0=Failure/1=Success
*/
int parseCSVHeader(struct CSVFileContext * csv);
/**
* @brief This is the final call to close a CSV file and release its file descriptor after you are done parsing it
* @param CSV context
* @retval 0=Failure/1=Success
*/
int closeCSVFile(struct CSVFileContext * csv);
int parseNextCSVFloatLine(struct CSVFileContext * csv,struct CSVFloatFileLine * csvLine);
int parseNextCSVCOCOSkeleton(struct CSVFileContext * csv, struct skeletonSerialized * skel);
int uniformlyScaleSerializedSkeleton(struct skeletonSerialized * skel,float factor);
int scaleSerializedSkeletonX(struct skeletonSerialized * skel,float factorX);
int scaleSerializedSkeletonY(struct skeletonSerialized * skel,float factorY);
int scaleSerializedSkeletonFromCenter(struct skeletonSerialized * skel,float factorX,float factorY);
int perturbSerializedSkeletonUsingGaussianNoise(struct skeletonSerialized * skel,float gaussianNoiseInNormalizedPixelsX,float gaussianNoiseInNormalizedPixelsY);
std::vector<std::vector<float> > get2DPointsFromSkeleton(struct skeletonSerialized * skel);

Some files were not shown because too many files have changed in this diff Show More