Reorganize the directory structure of source files 56/66556/1
authorMu-Woong Lee <muwoong.lee@samsung.com>
Tue, 19 Apr 2016 11:02:53 +0000 (20:02 +0900)
committerMu-Woong Lee <muwoong.lee@samsung.com>
Tue, 19 Apr 2016 11:02:53 +0000 (20:02 +0900)
Source directories are roughly separated by their dependencies.
Later, the build script will be updated to produce one shared object per one directory, and a dynamic loading routine will be applied.

Change-Id: Iceaae6740cebc15a89ce0631f13b1254640b12c4
Signed-off-by: Mu-Woong Lee <muwoong.lee@samsung.com>
342 files changed:
CMakeLists.txt
packaging/context-provider.spec
src/CMakeLists.txt [deleted file]
src/activity/Activity.h [new file with mode: 0644]
src/activity/ActivityBase.cpp [new file with mode: 0644]
src/activity/ActivityBase.h [new file with mode: 0644]
src/activity/ActivityTypes.h [new file with mode: 0644]
src/app-stats/ActiveWindowMonitor.cpp [new file with mode: 0644]
src/app-stats/ActiveWindowMonitor.h [new file with mode: 0644]
src/app-stats/AppStatisticsTypes.h [new file with mode: 0644]
src/app-stats/AppStatsLogger.cpp [new file with mode: 0644]
src/app-stats/AppStatsLogger.h [new file with mode: 0644]
src/app-stats/AppStatsProvider.cpp [new file with mode: 0644]
src/app-stats/AppStatsProvider.h [new file with mode: 0644]
src/app-stats/DbHandle.cpp [new file with mode: 0644]
src/app-stats/DbHandle.h [new file with mode: 0644]
src/app-stats/DbInit.cpp [new file with mode: 0644]
src/app-stats/DbInit.h [new file with mode: 0644]
src/app-stats/InstallMonitor.cpp [new file with mode: 0644]
src/app-stats/InstallMonitor.h [new file with mode: 0644]
src/app-stats/app_inactive_detector/AppInactiveDetector.cpp [new file with mode: 0644]
src/app-stats/app_inactive_detector/AppInactiveDetector.h [new file with mode: 0644]
src/app-stats/app_inactive_detector/AppInactiveDetectorTypes.h [new file with mode: 0644]
src/app-stats/app_inactive_detector/InactiveDetector.cpp [new file with mode: 0644]
src/app-stats/app_inactive_detector/InactiveDetector.h [new file with mode: 0644]
src/app-stats/app_inactive_detector/InactiveDetectorClassificator.cpp [new file with mode: 0644]
src/app-stats/app_inactive_detector/InactiveDetectorClassificator.h [new file with mode: 0644]
src/app-stats/app_inactive_detector/InactiveDetectorClassificatorKmeans.cpp [new file with mode: 0644]
src/app-stats/app_inactive_detector/InactiveDetectorClassificatorKmeans.h [new file with mode: 0644]
src/app-stats/app_inactive_detector/InactiveDetectorClassificatorKmeansTypes.h [new file with mode: 0644]
src/app-stats/app_inactive_detector/InactiveDetectorStorage.cpp [new file with mode: 0644]
src/app-stats/app_inactive_detector/InactiveDetectorStorage.h [new file with mode: 0644]
src/app-stats/app_inactive_detector/InactiveDetectorStorageQueries.h [new file with mode: 0644]
src/app-stats/app_inactive_detector/InactiveDetectorWeight.cpp [new file with mode: 0644]
src/app-stats/app_inactive_detector/InactiveDetectorWeight.h [new file with mode: 0644]
src/call/Call.cpp [new file with mode: 0644]
src/call/Call.h [new file with mode: 0644]
src/contacts/Contacts.cpp [new file with mode: 0644]
src/contacts/Contacts.h [new file with mode: 0644]
src/device/CMakeLists.txt [deleted file]
src/device/DeviceContextProvider.cpp [deleted file]
src/device/DeviceProviderBase.cpp [deleted file]
src/device/DeviceProviderBase.h [deleted file]
src/device/activity/Activity.h [deleted file]
src/device/activity/ActivityBase.cpp [deleted file]
src/device/activity/ActivityBase.h [deleted file]
src/device/activity/ActivityTypes.h [deleted file]
src/device/social/Call.cpp [deleted file]
src/device/social/Call.h [deleted file]
src/device/social/Contacts.cpp [deleted file]
src/device/social/Contacts.h [deleted file]
src/device/social/Email.cpp [deleted file]
src/device/social/Email.h [deleted file]
src/device/social/Message.cpp [deleted file]
src/device/social/Message.h [deleted file]
src/device/social/SocialTypes.h [deleted file]
src/device/system/Alarm.cpp [deleted file]
src/device/system/Alarm.h [deleted file]
src/device/system/Battery.cpp [deleted file]
src/device/system/Battery.h [deleted file]
src/device/system/Headphone.cpp [deleted file]
src/device/system/Headphone.h [deleted file]
src/device/system/Psmode.cpp [deleted file]
src/device/system/Psmode.h [deleted file]
src/device/system/SystemTypes.h [deleted file]
src/device/system/Time.cpp [deleted file]
src/device/system/Time.h [deleted file]
src/device/system/Wifi.cpp [deleted file]
src/device/system/Wifi.h [deleted file]
src/device/system/runtime_info/Charger.cpp [deleted file]
src/device/system/runtime_info/Charger.h [deleted file]
src/device/system/runtime_info/Gps.cpp [deleted file]
src/device/system/runtime_info/Gps.h [deleted file]
src/device/system/runtime_info/RuntimeInfoBase.cpp [deleted file]
src/device/system/runtime_info/RuntimeInfoBase.h [deleted file]
src/device/system/runtime_info/Usb.cpp [deleted file]
src/device/system/runtime_info/Usb.h [deleted file]
src/email/Email.cpp [new file with mode: 0644]
src/email/Email.h [new file with mode: 0644]
src/geofence/GeofenceMonitorHandle.cpp [new file with mode: 0644]
src/geofence/GeofenceMonitorHandle.h [new file with mode: 0644]
src/geofence/PlaceGeofenceProvider.cpp [new file with mode: 0644]
src/geofence/PlaceGeofenceProvider.h [new file with mode: 0644]
src/geofence/PlaceGeofenceTypes.h [new file with mode: 0644]
src/headphone/Headphone.cpp [new file with mode: 0644]
src/headphone/Headphone.h [new file with mode: 0644]
src/media-stats/DbHandle.cpp [new file with mode: 0644]
src/media-stats/DbHandle.h [new file with mode: 0644]
src/media-stats/MediaContentMonitor.cpp [new file with mode: 0644]
src/media-stats/MediaContentMonitor.h [new file with mode: 0644]
src/media-stats/MediaStatisticsTypes.h [new file with mode: 0644]
src/media-stats/MediaStatsLogger.cpp [new file with mode: 0644]
src/media-stats/MediaStatsLogger.h [new file with mode: 0644]
src/media-stats/MediaStatsProvider.cpp [new file with mode: 0644]
src/media-stats/MediaStatsProvider.h [new file with mode: 0644]
src/message/Message.cpp [new file with mode: 0644]
src/message/Message.h [new file with mode: 0644]
src/my-place/place_recognition.cpp [new file with mode: 0644]
src/my-place/place_recognition.h [new file with mode: 0644]
src/my-place/place_recognition_types.h [new file with mode: 0644]
src/my-place/user_places/debug_utils.cpp [new file with mode: 0644]
src/my-place/user_places/debug_utils.h [new file with mode: 0644]
src/my-place/user_places/gmap.cpp [new file with mode: 0644]
src/my-place/user_places/gmap.h [new file with mode: 0644]
src/my-place/user_places/graph.cpp [new file with mode: 0644]
src/my-place/user_places/graph.h [new file with mode: 0644]
src/my-place/user_places/location_listener_iface.h [new file with mode: 0644]
src/my-place/user_places/location_logger.cpp [new file with mode: 0644]
src/my-place/user_places/location_logger.h [new file with mode: 0644]
src/my-place/user_places/mahal.cpp [new file with mode: 0644]
src/my-place/user_places/mahal.h [new file with mode: 0644]
src/my-place/user_places/median.cpp [new file with mode: 0644]
src/my-place/user_places/median.h [new file with mode: 0644]
src/my-place/user_places/piecewise_lin.cpp [new file with mode: 0644]
src/my-place/user_places/piecewise_lin.h [new file with mode: 0644]
src/my-place/user_places/place_categer.cpp [new file with mode: 0644]
src/my-place/user_places/place_categer.h [new file with mode: 0644]
src/my-place/user_places/places_detector.cpp [new file with mode: 0644]
src/my-place/user_places/places_detector.h [new file with mode: 0644]
src/my-place/user_places/prob_features_model.h [new file with mode: 0644]
src/my-place/user_places/similarity.h [new file with mode: 0644]
src/my-place/user_places/user_places.cpp [new file with mode: 0644]
src/my-place/user_places/user_places.h [new file with mode: 0644]
src/my-place/user_places/user_places_params.h [new file with mode: 0644]
src/my-place/user_places/user_places_types.cpp [new file with mode: 0644]
src/my-place/user_places/user_places_types.h [new file with mode: 0644]
src/my-place/user_places/visit_categer.cpp [new file with mode: 0644]
src/my-place/user_places/visit_categer.h [new file with mode: 0644]
src/my-place/user_places/visit_detector.cpp [new file with mode: 0644]
src/my-place/user_places/visit_detector.h [new file with mode: 0644]
src/my-place/user_places/visit_listener_iface.h [new file with mode: 0644]
src/my-place/user_places/wifi_listener_iface.h [new file with mode: 0644]
src/my-place/user_places/wifi_logger.cpp [new file with mode: 0644]
src/my-place/user_places/wifi_logger.h [new file with mode: 0644]
src/place/CMakeLists.txt [deleted file]
src/place/PlaceContextProvider.cpp [deleted file]
src/place/geofence/GeofenceMonitorHandle.cpp [deleted file]
src/place/geofence/GeofenceMonitorHandle.h [deleted file]
src/place/geofence/PlaceGeofenceProvider.cpp [deleted file]
src/place/geofence/PlaceGeofenceProvider.h [deleted file]
src/place/geofence/PlaceGeofenceTypes.h [deleted file]
src/place/recognition/place_recognition.cpp [deleted file]
src/place/recognition/place_recognition.h [deleted file]
src/place/recognition/place_recognition_types.h [deleted file]
src/place/recognition/user_places/debug_utils.cpp [deleted file]
src/place/recognition/user_places/debug_utils.h [deleted file]
src/place/recognition/user_places/gmap.cpp [deleted file]
src/place/recognition/user_places/gmap.h [deleted file]
src/place/recognition/user_places/graph.cpp [deleted file]
src/place/recognition/user_places/graph.h [deleted file]
src/place/recognition/user_places/location_listener_iface.h [deleted file]
src/place/recognition/user_places/location_logger.cpp [deleted file]
src/place/recognition/user_places/location_logger.h [deleted file]
src/place/recognition/user_places/mahal.cpp [deleted file]
src/place/recognition/user_places/mahal.h [deleted file]
src/place/recognition/user_places/median.cpp [deleted file]
src/place/recognition/user_places/median.h [deleted file]
src/place/recognition/user_places/piecewise_lin.cpp [deleted file]
src/place/recognition/user_places/piecewise_lin.h [deleted file]
src/place/recognition/user_places/place_categer.cpp [deleted file]
src/place/recognition/user_places/place_categer.h [deleted file]
src/place/recognition/user_places/places_detector.cpp [deleted file]
src/place/recognition/user_places/places_detector.h [deleted file]
src/place/recognition/user_places/prob_features_model.h [deleted file]
src/place/recognition/user_places/similarity.h [deleted file]
src/place/recognition/user_places/user_places.cpp [deleted file]
src/place/recognition/user_places/user_places.h [deleted file]
src/place/recognition/user_places/user_places_params.h [deleted file]
src/place/recognition/user_places/user_places_types.cpp [deleted file]
src/place/recognition/user_places/user_places_types.h [deleted file]
src/place/recognition/user_places/visit_categer.cpp [deleted file]
src/place/recognition/user_places/visit_categer.h [deleted file]
src/place/recognition/user_places/visit_detector.cpp [deleted file]
src/place/recognition/user_places/visit_detector.h [deleted file]
src/place/recognition/user_places/visit_listener_iface.h [deleted file]
src/place/recognition/user_places/wifi_listener_iface.h [deleted file]
src/place/recognition/user_places/wifi_logger.cpp [deleted file]
src/place/recognition/user_places/wifi_logger.h [deleted file]
src/prediction/assoc_rule.cpp [new file with mode: 0644]
src/prediction/assoc_rule.h [new file with mode: 0644]
src/prediction/assoc_rule_miner.cpp [new file with mode: 0644]
src/prediction/assoc_rule_miner.h [new file with mode: 0644]
src/prediction/assoc_rule_of_ids.h [new file with mode: 0644]
src/prediction/assoc_rule_producer.cpp [new file with mode: 0644]
src/prediction/assoc_rule_producer.h [new file with mode: 0644]
src/prediction/basket.cpp [new file with mode: 0644]
src/prediction/basket.h [new file with mode: 0644]
src/prediction/basket_compressor.cpp [new file with mode: 0644]
src/prediction/basket_compressor.h [new file with mode: 0644]
src/prediction/basket_filter.cpp [new file with mode: 0644]
src/prediction/basket_filter.h [new file with mode: 0644]
src/prediction/basket_producer.cpp [new file with mode: 0644]
src/prediction/basket_producer.h [new file with mode: 0644]
src/prediction/baskets_agregator.cpp [new file with mode: 0644]
src/prediction/baskets_agregator.h [new file with mode: 0644]
src/prediction/event.cpp [new file with mode: 0644]
src/prediction/event.h [new file with mode: 0644]
src/prediction/event_set.h [new file with mode: 0644]
src/prediction/i_item_id_filter.h [new file with mode: 0644]
src/prediction/interval.cpp [new file with mode: 0644]
src/prediction/interval.h [new file with mode: 0644]
src/prediction/item.cpp [new file with mode: 0644]
src/prediction/item.h [new file with mode: 0644]
src/prediction/item_catalogue.cpp [new file with mode: 0644]
src/prediction/item_catalogue.h [new file with mode: 0644]
src/prediction/item_id_set.h [new file with mode: 0644]
src/prediction/item_set.cpp [new file with mode: 0644]
src/prediction/item_set.h [new file with mode: 0644]
src/prediction/item_string_converter.cpp [new file with mode: 0644]
src/prediction/item_string_converter.h [new file with mode: 0644]
src/prediction/single_category_item_id_filter.cpp [new file with mode: 0644]
src/prediction/single_category_item_id_filter.h [new file with mode: 0644]
src/prediction/weight_apriori.cpp [new file with mode: 0644]
src/prediction/weight_apriori.h [new file with mode: 0644]
src/shared/CommonTypes.h [new file with mode: 0644]
src/shared/DbHandleBase.cpp [new file with mode: 0644]
src/shared/DbHandleBase.h [new file with mode: 0644]
src/shared/DeviceContextProvider.cpp [new file with mode: 0644]
src/shared/DeviceProviderBase.cpp [new file with mode: 0644]
src/shared/DeviceProviderBase.h [new file with mode: 0644]
src/shared/PlaceContextProvider.cpp [new file with mode: 0644]
src/shared/SocialTypes.h [new file with mode: 0644]
src/shared/StatisticsContextProvider.cpp [new file with mode: 0644]
src/shared/SystemInfo.cpp [new file with mode: 0644]
src/shared/SystemInfo.h [new file with mode: 0644]
src/shared/SystemTypes.h [new file with mode: 0644]
src/social-stats/DbHandle.cpp [new file with mode: 0644]
src/social-stats/DbHandle.h [new file with mode: 0644]
src/social-stats/LogAggregator.cpp [new file with mode: 0644]
src/social-stats/LogAggregator.h [new file with mode: 0644]
src/social-stats/SocialStatisticsTypes.h [new file with mode: 0644]
src/social-stats/SocialStatsLogger.cpp [new file with mode: 0644]
src/social-stats/SocialStatsLogger.h [new file with mode: 0644]
src/social-stats/SocialStatsProvider.cpp [new file with mode: 0644]
src/social-stats/SocialStatsProvider.h [new file with mode: 0644]
src/statistics/CMakeLists.txt [deleted file]
src/statistics/StatisticsContextProvider.cpp [deleted file]
src/statistics/app/ActiveWindowMonitor.cpp [deleted file]
src/statistics/app/ActiveWindowMonitor.h [deleted file]
src/statistics/app/AppStatisticsTypes.h [deleted file]
src/statistics/app/AppStatsLogger.cpp [deleted file]
src/statistics/app/AppStatsLogger.h [deleted file]
src/statistics/app/AppStatsProvider.cpp [deleted file]
src/statistics/app/AppStatsProvider.h [deleted file]
src/statistics/app/DbHandle.cpp [deleted file]
src/statistics/app/DbHandle.h [deleted file]
src/statistics/app/DbInit.cpp [deleted file]
src/statistics/app/DbInit.h [deleted file]
src/statistics/app/InstallMonitor.cpp [deleted file]
src/statistics/app/InstallMonitor.h [deleted file]
src/statistics/app/app_inactive_detector/AppInactiveDetector.cpp [deleted file]
src/statistics/app/app_inactive_detector/AppInactiveDetector.h [deleted file]
src/statistics/app/app_inactive_detector/AppInactiveDetectorTypes.h [deleted file]
src/statistics/app/app_inactive_detector/InactiveDetector.cpp [deleted file]
src/statistics/app/app_inactive_detector/InactiveDetector.h [deleted file]
src/statistics/app/app_inactive_detector/InactiveDetectorClassificator.cpp [deleted file]
src/statistics/app/app_inactive_detector/InactiveDetectorClassificator.h [deleted file]
src/statistics/app/app_inactive_detector/InactiveDetectorClassificatorKmeans.cpp [deleted file]
src/statistics/app/app_inactive_detector/InactiveDetectorClassificatorKmeans.h [deleted file]
src/statistics/app/app_inactive_detector/InactiveDetectorClassificatorKmeansTypes.h [deleted file]
src/statistics/app/app_inactive_detector/InactiveDetectorStorage.cpp [deleted file]
src/statistics/app/app_inactive_detector/InactiveDetectorStorage.h [deleted file]
src/statistics/app/app_inactive_detector/InactiveDetectorStorageQueries.h [deleted file]
src/statistics/app/app_inactive_detector/InactiveDetectorWeight.cpp [deleted file]
src/statistics/app/app_inactive_detector/InactiveDetectorWeight.h [deleted file]
src/statistics/media/DbHandle.cpp [deleted file]
src/statistics/media/DbHandle.h [deleted file]
src/statistics/media/MediaContentMonitor.cpp [deleted file]
src/statistics/media/MediaContentMonitor.h [deleted file]
src/statistics/media/MediaStatisticsTypes.h [deleted file]
src/statistics/media/MediaStatsLogger.cpp [deleted file]
src/statistics/media/MediaStatsLogger.h [deleted file]
src/statistics/media/MediaStatsProvider.cpp [deleted file]
src/statistics/media/MediaStatsProvider.h [deleted file]
src/statistics/prediction/assoc_rule.cpp [deleted file]
src/statistics/prediction/assoc_rule.h [deleted file]
src/statistics/prediction/assoc_rule_miner.cpp [deleted file]
src/statistics/prediction/assoc_rule_miner.h [deleted file]
src/statistics/prediction/assoc_rule_of_ids.h [deleted file]
src/statistics/prediction/assoc_rule_producer.cpp [deleted file]
src/statistics/prediction/assoc_rule_producer.h [deleted file]
src/statistics/prediction/basket.cpp [deleted file]
src/statistics/prediction/basket.h [deleted file]
src/statistics/prediction/basket_compressor.cpp [deleted file]
src/statistics/prediction/basket_compressor.h [deleted file]
src/statistics/prediction/basket_filter.cpp [deleted file]
src/statistics/prediction/basket_filter.h [deleted file]
src/statistics/prediction/basket_producer.cpp [deleted file]
src/statistics/prediction/basket_producer.h [deleted file]
src/statistics/prediction/baskets_agregator.cpp [deleted file]
src/statistics/prediction/baskets_agregator.h [deleted file]
src/statistics/prediction/event.cpp [deleted file]
src/statistics/prediction/event.h [deleted file]
src/statistics/prediction/event_set.h [deleted file]
src/statistics/prediction/i_item_id_filter.h [deleted file]
src/statistics/prediction/interval.cpp [deleted file]
src/statistics/prediction/interval.h [deleted file]
src/statistics/prediction/item.cpp [deleted file]
src/statistics/prediction/item.h [deleted file]
src/statistics/prediction/item_catalogue.cpp [deleted file]
src/statistics/prediction/item_catalogue.h [deleted file]
src/statistics/prediction/item_id_set.h [deleted file]
src/statistics/prediction/item_set.cpp [deleted file]
src/statistics/prediction/item_set.h [deleted file]
src/statistics/prediction/item_string_converter.cpp [deleted file]
src/statistics/prediction/item_string_converter.h [deleted file]
src/statistics/prediction/single_category_item_id_filter.cpp [deleted file]
src/statistics/prediction/single_category_item_id_filter.h [deleted file]
src/statistics/prediction/weight_apriori.cpp [deleted file]
src/statistics/prediction/weight_apriori.h [deleted file]
src/statistics/shared/CommonTypes.h [deleted file]
src/statistics/shared/DbHandleBase.cpp [deleted file]
src/statistics/shared/DbHandleBase.h [deleted file]
src/statistics/shared/SystemInfo.cpp [deleted file]
src/statistics/shared/SystemInfo.h [deleted file]
src/statistics/social/DbHandle.cpp [deleted file]
src/statistics/social/DbHandle.h [deleted file]
src/statistics/social/LogAggregator.cpp [deleted file]
src/statistics/social/LogAggregator.h [deleted file]
src/statistics/social/SocialStatisticsTypes.h [deleted file]
src/statistics/social/SocialStatsLogger.cpp [deleted file]
src/statistics/social/SocialStatsLogger.h [deleted file]
src/statistics/social/SocialStatsProvider.cpp [deleted file]
src/statistics/social/SocialStatsProvider.h [deleted file]
src/system/Battery.cpp [new file with mode: 0644]
src/system/Battery.h [new file with mode: 0644]
src/system/Charger.cpp [new file with mode: 0644]
src/system/Charger.h [new file with mode: 0644]
src/system/Gps.cpp [new file with mode: 0644]
src/system/Gps.h [new file with mode: 0644]
src/system/Psmode.cpp [new file with mode: 0644]
src/system/Psmode.h [new file with mode: 0644]
src/system/RuntimeInfoBase.cpp [new file with mode: 0644]
src/system/RuntimeInfoBase.h [new file with mode: 0644]
src/system/Usb.cpp [new file with mode: 0644]
src/system/Usb.h [new file with mode: 0644]
src/time/Alarm.cpp [new file with mode: 0644]
src/time/Alarm.h [new file with mode: 0644]
src/time/Time.cpp [new file with mode: 0644]
src/time/Time.h [new file with mode: 0644]
src/wifi/Wifi.cpp [new file with mode: 0644]
src/wifi/Wifi.h [new file with mode: 0644]

index 913174af520e70b854fa9f1436f4bcfa01b95c99..2865cfa772d9ff6bdb355a3a5e4720eaa9391cc2 100644 (file)
@@ -11,9 +11,6 @@ INCLUDE_DIRECTORIES(
 ADD_DEFINITIONS(-O2 -Wall -fPIC -fdata-sections -ffunction-sections -fvisibility=hidden)
 SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fPIC -Wl,--as-needed -Wl,--gc-section -Wl,--print-gc-section")
 
-# Base Dependency
-SET(dependencies libcontext-server)
-
 # Profiles
 IF("${PROFILE}" STREQUAL "mobile")
        ADD_DEFINITIONS("-D_MOBILE_")
@@ -23,23 +20,70 @@ IF("${PROFILE}" STREQUAL "wearable")
        ADD_DEFINITIONS("-D_WEARABLE_")
 ENDIF("${PROFILE}" STREQUAL "wearable")
 
-IF("${PROFILE}" STREQUAL "tv")
-       ADD_DEFINITIONS("-D_TV_")
-ENDIF("${PROFILE}" STREQUAL "tv")
 
-# Include Sub-modules
-ADD_SUBDIRECTORY(src)
-MESSAGE("Compile definitions: ${compile_defs}")
+# Dependency & Source
+SET(DEPS
+       libcontext-server
+       vconf
+       capi-system-info
+       capi-system-device
+       capi-system-runtime-info
+       capi-appfw-package-manager
+       capi-appfw-application
+       capi-appfw-app-manager
+       pkgmgr
+       pkgmgr-info
+       capi-media-sound-manager
+       capi-network-bluetooth
+       capi-network-wifi
+       motion
+)
+
+FILE(GLOB SRCS
+       src/shared/*.cpp
+       src/time/*.cpp
+       src/activity/*.cpp
+       src/app-stats/*.cpp
+       src/headphone/*.cpp
+       src/system/*.cpp
+       src/wifi/*.cpp
+)
+
+IF("${PROFILE}" STREQUAL "mobile")
+SET(DEPS ${DEPS}
+       msg-service
+       contacts-service2
+       tapi
+       capi-telephony
+       capi-messaging-email
+       capi-content-media-content
+       capi-location-manager
+       capi-geofence-manager
+)
+
+FILE(GLOB SRCS ${SRCS}
+       src/call/*.cpp
+       src/contacts/*.cpp
+       src/email/*.cpp
+       src/geofence/*.cpp
+       src/media-stats/*.cpp
+       src/message/*.cpp
+       src/my-place/*.cpp
+       src/my-place/user_places/*.cpp
+       src/social-stats/*.cpp
+)
+ENDIF("${PROFILE}" STREQUAL "mobile")
+
 
 # Build
 INCLUDE(FindPkgConfig)
-PKG_CHECK_MODULES(DEPS REQUIRED ${dependencies})
+PKG_CHECK_MODULES(DEPS REQUIRED ${DEPS})
 
 FOREACH(flag ${DEPS_CFLAGS})
        SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
 ENDFOREACH(flag)
 
-ADD_LIBRARY(${target} STATIC ${sources})
+ADD_LIBRARY(${target} STATIC ${SRCS})
 TARGET_LINK_LIBRARIES(${target} ${DEPS_LDFLAGS})
 SET_TARGET_PROPERTIES(${target} PROPERTIES COMPILE_FLAGS ${EXTRA_CFLAGS})
 SET_TARGET_PROPERTIES(${target} PROPERTIES COMPILE_DEFINITIONS "${compile_defs}")
@@ -47,7 +91,7 @@ SET_TARGET_PROPERTIES(${target} PROPERTIES SOVERSION ${MAJORVER})
 SET_TARGET_PROPERTIES(${target} PROPERTIES VERSION ${FULLVER})
 
 # Package Config
-FOREACH(item IN LISTS dependencies)
+FOREACH(item IN LISTS DEPS)
        SET(deps_str "${deps_str} ${item}")
 ENDFOREACH(item)
 
@@ -74,4 +118,4 @@ INSTALL(
        FILES_MATCHING PATTERN "*.h"
 )
 INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
-INSTALL(TARGETS ${target} DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT RuntimeLibraries)
+INSTALL(TARGETS ${target} DESTINATION ${CMAKE_INSTALL_LIBDIR})
index 7068f1e56070658f6d199ec2272447e2afe44bbb..598eb65ba7ce171157ba6d044b0ac02e03e38302 100644 (file)
@@ -9,6 +9,10 @@ Source0:    %{name}-%{version}.tar.gz
 %define BUILD_PROFILE %{?profile}%{!?profile:%{?tizen_profile_name}}
 %define keepstatic 1
 
+%if "%{?BUILD_PROFILE}" == "tv"
+ExcludeArch: %{arm} aarch64 %ix86 x86_64
+%endif
+
 BuildRequires: cmake
 
 BuildRequires: pkgconfig(libcontext-server)
@@ -22,36 +26,21 @@ BuildRequires: pkgconfig(capi-appfw-app-manager)
 BuildRequires: pkgconfig(pkgmgr)
 BuildRequires: pkgconfig(pkgmgr-info)
 BuildRequires: pkgconfig(capi-media-sound-manager)
-
-%if "%{?BUILD_PROFILE}" == "mobile"
 BuildRequires: pkgconfig(capi-network-bluetooth)
 BuildRequires: pkgconfig(capi-network-wifi)
-BuildRequires: pkgconfig(capi-telephony)
-BuildRequires: pkgconfig(tapi)
-BuildRequires: pkgconfig(msg-service)
-BuildRequires: pkgconfig(capi-messaging-email)
 BuildRequires: pkgconfig(motion)
+
+%if "%{?BUILD_PROFILE}" == "mobile"
+BuildRequires: pkgconfig(msg-service)
 BuildRequires: pkgconfig(contacts-service2)
+BuildRequires: pkgconfig(tapi)
+BuildRequires: pkgconfig(capi-telephony)
+BuildRequires: pkgconfig(capi-messaging-email)
 BuildRequires: pkgconfig(capi-content-media-content)
 BuildRequires: pkgconfig(capi-location-manager)
 BuildRequires: pkgconfig(capi-geofence-manager)
 %endif
 
-%if "%{?BUILD_PROFILE}" == "wearable"
-BuildRequires: pkgconfig(capi-network-bluetooth)
-BuildRequires: pkgconfig(capi-network-wifi)
-BuildRequires: pkgconfig(capi-telephony)
-BuildRequires: pkgconfig(tapi)
-BuildRequires: pkgconfig(msg-service)
-BuildRequires: pkgconfig(motion)
-%endif
-
-%if "%{?BUILD_PROFILE}" == "tv"
-BuildRequires: pkgconfig(capi-network-bluetooth)
-BuildRequires: pkgconfig(capi-network-wifi)
-BuildRequires: pkgconfig(capi-content-media-content)
-%endif
-
 %description
 Context Provider
 
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
deleted file mode 100644 (file)
index 5926ed8..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
-
-FUNCTION(add_provider prvd_name)
-       ADD_SUBDIRECTORY(${prvd_name})
-       GET_DIRECTORY_PROPERTY(srcs_subdir DIRECTORY ${prvd_name} DEFINITION prvd_srcs)
-       GET_DIRECTORY_PROPERTY(deps_subdir DIRECTORY ${prvd_name} DEFINITION prvd_deps)
-       GET_DIRECTORY_PROPERTY(cdef_subdir DIRECTORY ${prvd_name} DEFINITION prvd_cdef)
-       SET(srcs_collected ${srcs_collected} ${srcs_subdir} PARENT_SCOPE)
-       SET(deps_collected ${deps_collected} ${deps_subdir} PARENT_SCOPE)
-       SET(cdef_collected ${cdef_collected} ${cdef_subdir} PARENT_SCOPE)
-ENDFUNCTION(add_provider)
-
-
-add_provider(device)
-add_provider(statistics)
-add_provider(place)
-#add_provider(custom)
-
-
-LIST(REMOVE_DUPLICATES deps_collected)
-
-SET(sources ${sources} ${srcs_collected} PARENT_SCOPE)
-SET(dependencies ${dependencies} ${deps_collected} PARENT_SCOPE)
-SET(compile_defs ${compile_defs} ${cdef_collected} PARENT_SCOPE)
diff --git a/src/activity/Activity.h b/src/activity/Activity.h
new file mode 100644 (file)
index 0000000..ab5be2e
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _DEVICE_ACTIVITY_STATUS_H_
+#define _DEVICE_ACTIVITY_STATUS_H_
+
+#include "ActivityBase.h"
+#include "ActivityTypes.h"
+
+#define GENERATE_ACTIVITY_PROVIDER(actPrvd, actSubj, actType) \
+       class actPrvd : public UserActivityBase { \
+       public: \
+               actPrvd() : UserActivityBase(actSubj, actType) {} \
+       }; \
+
+namespace ctx {
+       GENERATE_ACTIVITY_PROVIDER(UserActivityStationary, USER_ACT_SUBJ_STATIONARY, ACTIVITY_STATIONARY);
+       GENERATE_ACTIVITY_PROVIDER(UserActivityWalking, USER_ACT_SUBJ_WALKING, ACTIVITY_WALK);
+       GENERATE_ACTIVITY_PROVIDER(UserActivityRunning, USER_ACT_SUBJ_RUNNING, ACTIVITY_RUN);
+       GENERATE_ACTIVITY_PROVIDER(UserActivityInVehicle, USER_ACT_SUBJ_IN_VEHICLE, ACTIVITY_IN_VEHICLE);
+}
+
+#endif // _DEVICE_ACTIVITY_STATUS_H_
diff --git a/src/activity/ActivityBase.cpp b/src/activity/ActivityBase.cpp
new file mode 100644 (file)
index 0000000..4abda04
--- /dev/null
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <system_info.h>
+#include "ActivityTypes.h"
+#include "ActivityBase.h"
+
+using namespace ctx;
+
+UserActivityBase::UserActivityBase(const char *subject, activity_type_e type)  :
+       DeviceProviderBase(subject),
+       __activityType(type),
+       __activityHandle(NULL)
+{
+}
+
+UserActivityBase::~UserActivityBase()
+{
+       if (__activityHandle)
+               activity_release(__activityHandle);
+}
+
+bool UserActivityBase::isSupported()
+{
+       return getSystemInfoBool("tizen.org/feature/sensor.activity_recognition");
+}
+
+void UserActivityBase::submitTriggerItem()
+{
+       registerTriggerItem(OPS_SUBSCRIBE,
+                       "{\"Event\":{\"type\":\"string\", \"values\":[\"Detected\"]}}",
+                       "{\"Accuracy\":{\"type\":\"string\", \"values\":[\"Low\", \"Normal\", \"High\"]}}"
+                       );
+}
+
+void UserActivityBase::__updateCb(activity_type_e activity, const activity_data_h data, double timestamp, activity_error_e error, void* userData)
+{
+       IF_FAIL_VOID_TAG(error == ACTIVITY_ERROR_NONE, _E, "Error: %d", error);
+
+       UserActivityBase *instance = static_cast<UserActivityBase*>(userData);
+       instance->__handleUpdate(activity, data, timestamp);
+}
+
+void UserActivityBase::__handleUpdate(activity_type_e activity, const activity_data_h data, double timestamp)
+{
+       IF_FAIL_VOID_TAG(activity == __activityType, _E, "Invalid activity: %d", activity);
+
+       Json dataRead;
+       dataRead.set(NULL, USER_ACT_EVENT, USER_ACT_DETECTED);
+
+       activity_accuracy_e accuracy = ACTIVITY_ACCURACY_LOW;
+       activity_get_accuracy(data, &accuracy);
+
+       switch (accuracy) {
+       case ACTIVITY_ACCURACY_HIGH:
+               dataRead.set(NULL, USER_ACT_ACCURACY, USER_ACT_HIGH);
+               break;
+       case ACTIVITY_ACCURACY_MID:
+               dataRead.set(NULL, USER_ACT_ACCURACY, USER_ACT_NORMAL);
+               break;
+       default:
+               dataRead.set(NULL, USER_ACT_ACCURACY, USER_ACT_LOW);
+               break;
+       }
+
+       publish(NULL, ERR_NONE, dataRead);
+}
+
+int UserActivityBase::subscribe()
+{
+       IF_FAIL_RETURN(__activityHandle == NULL, ERR_NONE);
+
+       activity_create(&__activityHandle);
+       IF_FAIL_RETURN_TAG(__activityHandle, ERR_OPERATION_FAILED, _E, "Memory allocation failed");
+
+       int ret = activity_start_recognition(__activityHandle, __activityType, __updateCb, this);
+       if (ret != ACTIVITY_ERROR_NONE) {
+               _E("Recognition starting failed");
+               activity_release(__activityHandle);
+               __activityHandle = NULL;
+               return ERR_OPERATION_FAILED;
+       }
+
+       return ERR_NONE;
+}
+
+int UserActivityBase::unsubscribe()
+{
+       IF_FAIL_RETURN(__activityHandle, ERR_NONE);
+
+       activity_stop_recognition(__activityHandle);
+       activity_release(__activityHandle);
+       __activityHandle = NULL;
+
+       return ERR_NONE;
+}
diff --git a/src/activity/ActivityBase.h b/src/activity/ActivityBase.h
new file mode 100644 (file)
index 0000000..56b709f
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _DEVICE_ACTIVITY_STATUS_BASE_H_
+#define _DEVICE_ACTIVITY_STATUS_BASE_H_
+
+#include <string>
+#include <activity_recognition.h>
+#include "../shared/DeviceProviderBase.h"
+
+namespace ctx {
+
+       class UserActivityBase : public DeviceProviderBase {
+       public:
+               UserActivityBase(const char *subject, activity_type_e type);
+               virtual ~UserActivityBase();
+
+               int subscribe();
+               int unsubscribe();
+
+               bool isSupported();
+               void submitTriggerItem();
+
+       protected:
+               activity_type_e __activityType;
+               activity_h __activityHandle;
+
+       private:
+               void __handleUpdate(activity_type_e activity, const activity_data_h data, double timestamp);
+               static void __updateCb(activity_type_e activity, const activity_data_h data, double timestamp, activity_error_e error, void* userData);
+       };
+
+}
+
+#endif // _DEVICE_ACTIVITY_STATUS_BASE_H_
diff --git a/src/activity/ActivityTypes.h b/src/activity/ActivityTypes.h
new file mode 100644 (file)
index 0000000..4562b7b
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef        _DEVICE_ACTIVITY_STATUS_TYPES_H_
+#define        _DEVICE_ACTIVITY_STATUS_TYPES_H_
+
+// Subject
+#define USER_ACT_SUBJ_IN_VEHICLE       "activity/in_vehicle"
+#define USER_ACT_SUBJ_RUNNING          "activity/running"
+#define USER_ACT_SUBJ_STATIONARY       "activity/stationary"
+#define USER_ACT_SUBJ_WALKING          "activity/walking"
+
+// Data Key
+#define USER_ACT_EVENT         "Event"
+#define USER_ACT_ACCURACY      "Accuracy"
+
+// Data Value
+#define USER_ACT_DETECTED      "Detected"
+#define USER_ACT_LOW           "Low"
+#define USER_ACT_NORMAL                "Normal"
+#define USER_ACT_HIGH          "High"
+
+#endif // _DEVICE_ACTIVITY_STATUS_TYPES_H_
diff --git a/src/app-stats/ActiveWindowMonitor.cpp b/src/app-stats/ActiveWindowMonitor.cpp
new file mode 100644 (file)
index 0000000..c8d3120
--- /dev/null
@@ -0,0 +1,148 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <sys/types.h>
+#include <time.h>
+#include <app_manager.h>
+
+#include <Json.h>
+#include <Types.h>
+#include "../shared/SystemInfo.h"
+#include "AppStatisticsTypes.h"
+#include "ActiveWindowMonitor.h"
+
+/* Active window changes frequently.
+ * We thus consider the apps being foregrounded at least 3 secs */
+#define ONE_DAY_IN_SEC 86400
+
+ctx::AppUseMonitor::AppUseMonitor() :
+       __signalId(-1),
+       __lastCleanupTime(0),
+       __dbusWatcher(DBusType::SYSTEM)
+{
+       __startLogging();
+}
+
+ctx::AppUseMonitor::~AppUseMonitor()
+{
+       __stopLogging();
+}
+
+bool ctx::AppUseMonitor::__startLogging()
+{
+       __signalId = __dbusWatcher.watch(NULL, "/Org/Tizen/Aul/AppStatus", "org.tizen.aul.AppStatus", "AppStatusChange", this);
+       _D("Active window monitoring started (%lld)", __signalId);
+       return (__signalId > 0);
+}
+
+void ctx::AppUseMonitor::__stopLogging()
+{
+       if (__signalId > 0) {
+               __dbusWatcher.unwatch(__signalId);
+               _D("Active window monitoring stopped");
+       }
+}
+
+void ctx::AppUseMonitor::onSignal(const char* sender, const char* path, const char* iface, const char* name, GVariant* param)
+{
+       gint pid = 0;
+       const gchar *appId = NULL;
+       const gchar *pkgId = NULL;
+       const gchar *status = NULL;
+       const gchar *type = NULL;
+
+       g_variant_get(param, "(i&s&s&s&s)", &pid, &appId, &pkgId, &status, &type);
+       _D("AppEvent: %s, %s, %s", appId, status, type);
+
+       IF_FAIL_VOID(appId && status && type);
+       IF_FAIL_VOID(STR_EQ(type, "uiapp") && !__isSkippable(appId));
+
+       if (STR_EQ(status, "fg")) {
+               __createRecord(appId);
+       } else if (STR_EQ(status, "bg")) {
+               __finishRecord(appId);
+               __removeExpired();
+       }
+}
+
+void ctx::AppUseMonitor::__createRecord(std::string appId)
+{
+       int audioJack;
+       int systemVolume;
+       int mediaVolume;
+       std::string bssid;
+       Json data;
+       data.set(NULL, STATS_APP_ID, appId);
+
+       if (ctx::system_info::getAudioJackState(&audioJack))
+               data.set(NULL, STATS_AUDIO_JACK, audioJack);
+
+       if (ctx::system_info::getVolume(&systemVolume, &mediaVolume)) {
+               data.set(NULL, STATS_SYSTEM_VOLUME, systemVolume);
+               data.set(NULL, STATS_MEDIA_VOLUME, mediaVolume);
+       }
+
+       if (ctx::system_info::getWifiBssid(bssid))
+               data.set(NULL, STATS_BSSID, bssid);
+
+       __dbManager.insert(0, APP_TABLE_USAGE_LOG, data, NULL);
+}
+
+void ctx::AppUseMonitor::__finishRecord(std::string appId)
+{
+       /* TODO: It might be necessary to update system status here */
+       std::stringstream query;
+       query <<
+               "UPDATE " APP_TABLE_USAGE_LOG \
+               " SET " STATS_DURATION " = strftime('%s', 'now') - " STATS_UNIV_TIME \
+               " WHERE " STATS_COL_ROW_ID " = (" \
+                       "SELECT MAX(" STATS_COL_ROW_ID ") FROM " APP_TABLE_USAGE_LOG \
+                       " WHERE " STATS_APP_ID " = '" << appId << "'" \
+                       " AND " STATS_DURATION " = 0)";
+       __dbManager.execute(0, query.str().c_str(), NULL);
+}
+
+bool ctx::AppUseMonitor::__isSkippable(std::string appId)
+{
+       /* TODO: circular cache */
+       app_info_h appInfo = NULL;
+       int err = app_manager_get_app_info(appId.c_str(), &appInfo);
+       IF_FAIL_RETURN_TAG(err == APP_MANAGER_ERROR_NONE && appInfo, true, _E, "app_manager_get_app_info() failed");
+
+       bool nodisp = false;
+       err = app_info_is_nodisplay(appInfo, &nodisp);
+       if (err != APP_MANAGER_ERROR_NONE) {
+               app_info_destroy(appInfo);
+               _E("app_info_is_nodisplay() failed");
+               return true;
+       }
+
+       app_info_destroy(appInfo);
+       return nodisp;
+}
+
+void ctx::AppUseMonitor::__removeExpired()
+{
+       int timestamp = static_cast<int>(time(NULL));
+       IF_FAIL_VOID(timestamp - __lastCleanupTime >= ONE_DAY_IN_SEC);
+
+       __lastCleanupTime = timestamp;
+
+       std::stringstream query;
+       query << "DELETE FROM " APP_TABLE_USAGE_LOG " WHERE " \
+               STATS_UNIV_TIME " < strftime('%s', 'now') - " << LOG_RETENTION_PERIOD;
+       __dbManager.execute(0, query.str().c_str(), NULL);
+}
diff --git a/src/app-stats/ActiveWindowMonitor.h b/src/app-stats/ActiveWindowMonitor.h
new file mode 100644 (file)
index 0000000..64f0d34
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_STATS_APP_USE_MONITOR_H_
+#define _CONTEXT_STATS_APP_USE_MONITOR_H_
+
+#include <string>
+#include <sstream>
+#include <DBusSignalWatcher.h>
+#include <DatabaseManager.h>
+
+namespace ctx {
+
+       class AppUseMonitor : public IDBusSignalListener {
+       private:
+               int64_t __signalId;
+               int __lastCleanupTime;
+               DBusSignalWatcher __dbusWatcher;
+               DatabaseManager __dbManager;
+
+               bool __startLogging(void);
+               void __stopLogging(void);
+
+               bool __isSkippable(std::string appId);
+               void __createRecord(std::string appId);
+               void __finishRecord(std::string appId);
+               void __removeExpired();
+               void onSignal(const char *sender, const char *path, const char *iface, const char *name, GVariant *param);
+
+       public:
+               AppUseMonitor();
+               ~AppUseMonitor();
+       };      /* class AppUseMonitor */
+
+}      /* namespace ctx */
+
+#endif /* End of _CONTEXT_STATS_APP_USE_MONITOR_H_ */
diff --git a/src/app-stats/AppStatisticsTypes.h b/src/app-stats/AppStatisticsTypes.h
new file mode 100644 (file)
index 0000000..42b049e
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_STATS_APP_TYPES_H_
+#define _CONTEXT_STATS_APP_TYPES_H_
+
+#include "../shared/CommonTypes.h"
+
+#define APP_HISTORY_PRIV                       "apphistory.read"
+#define APP_SUBJ_LOGGER                                "stats/app/logger"
+#define APP_SUBJ_RECENTLY_USED         "stats/app/recently"
+#define APP_SUBJ_FREQUENTLY_USED       "stats/app/often"
+#define APP_SUBJ_RARELY_USED           "stats/app/rarely"
+#define APP_SUBJ_PEAK_TIME                     "stats/app/peak_time"
+#define APP_SUBJ_COMMON_SETTING                "stats/app/setting"
+#define APP_SUBJ_FREQUENCY                     "stats/app/frequency"
+
+#define APP_TABLE_REMOVABLE_APP        "Log_RemovableApp"
+#define APP_TABLE_REMOVABLE_APP_COLUMNS \
+       "AppId TEXT NOT NULL UNIQUE"
+
+#define APP_TABLE_USAGE_LOG            "Log_AppLaunch"
+#define APP_TABLE_USAGE_LOG_COLUMNS \
+       "AppId TEXT NOT NULL, Duration INTEGER NOT NULL DEFAULT 0, " \
+       "SystemVolume INTEGER, MediaVolume INTEGER, AudioJack INTEGER, " \
+       "BSSID TEXT, " \
+       "UTC TIMESTAMP DEFAULT (strftime('%s', 'now')), " \
+       "LocalTime TIMESTAMP DEFAULT (strftime('%s', 'now', 'localtime'))"
+
+#define APP_TEMP_USAGE_FREQ            "Temp_AppLaunchFreq"
+#define APP_TEMP_USAGE_FREQ_SQL \
+       "CREATE TABLE IF NOT EXISTS " APP_TEMP_USAGE_FREQ \
+       " (AppId TEXT NOT NULL UNIQUE, TotalCount INTEGER DEFAULT 0);"
+
+#endif /* End of _CONTEXT_STATS_APP_TYPES_H_ */
diff --git a/src/app-stats/AppStatsLogger.cpp b/src/app-stats/AppStatsLogger.cpp
new file mode 100644 (file)
index 0000000..9bbb390
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "AppStatisticsTypes.h"
+#include "AppStatsLogger.h"
+
+using namespace ctx;
+
+AppStatsLogger::AppStatsLogger() :
+       ContextProvider(APP_SUBJ_LOGGER),
+       __initializer(NULL),
+       __installMon(NULL),
+       __launchMon(NULL)
+{
+       __initializer = new(std::nothrow) AppDbInitializer();
+       IF_FAIL_VOID_TAG(__initializer, _E, "Memory allocation failed");
+
+       __installMon = new(std::nothrow) AppInstallMonitor();
+       __launchMon = new(std::nothrow) AppUseMonitor();
+       IF_FAIL_CATCH_TAG(__installMon && __launchMon, _E, "Memory allocation failed");
+       return;
+
+CATCH:
+       delete __installMon;
+       delete __launchMon;
+       __installMon = NULL;
+       __launchMon = NULL;
+}
+
+AppStatsLogger::~AppStatsLogger()
+{
+       delete __installMon;
+       delete __launchMon;
+}
+
+int AppStatsLogger::subscribe(Json option, Json* requestResult)
+{
+       return ERR_NONE;
+}
+
+int AppStatsLogger::unsubscribe(Json option)
+{
+       return ERR_NONE;
+}
diff --git a/src/app-stats/AppStatsLogger.h b/src/app-stats/AppStatsLogger.h
new file mode 100644 (file)
index 0000000..b2104dd
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_APP_STATS_LOGGER_H_
+#define _CONTEXT_APP_STATS_LOGGER_H_
+
+#include <ContextProvider.h>
+#include "DbInit.h"
+#include "InstallMonitor.h"
+#include "ActiveWindowMonitor.h"
+
+namespace ctx {
+
+       class AppStatsLogger : public ContextProvider {
+       public:
+               AppStatsLogger();
+               ~AppStatsLogger();
+
+               int subscribe(Json option, Json *requestResult);
+               int unsubscribe(Json option);
+
+               void submitTriggerItem() {}
+
+       private:
+               AppDbInitializer *__initializer;
+               AppInstallMonitor *__installMon;
+               AppUseMonitor *__launchMon;
+       };
+
+}      /* namespace ctx */
+
+#endif /* _CONTEXT_APP_STATS_LOGGER_H_ */
diff --git a/src/app-stats/AppStatsProvider.cpp b/src/app-stats/AppStatsProvider.cpp
new file mode 100644 (file)
index 0000000..7e18049
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "AppStatsProvider.h"
+#include "DbHandle.h"
+
+using namespace ctx;
+
+AppStatsProvider::AppStatsProvider(const char *subject) :
+       ContextProvider(subject)
+{
+}
+
+AppStatsProvider::~AppStatsProvider()
+{
+}
+
+void AppStatsProvider::submitTriggerItem()
+{
+}
+
+int AppStatsProvider::read(Json option, Json *requestResult)
+{
+       AppDbHandle *handle = new(std::nothrow) AppDbHandle(this);
+       IF_FAIL_RETURN_TAG(handle, ERR_OPERATION_FAILED, _E, "Memory allocation failed");
+
+       int err = handle->read(option);
+       if (err != ERR_NONE) {
+               delete handle;
+               return err;
+       }
+
+       return ERR_NONE;
+}
+
+void AppFreqProvider::submitTriggerItem()
+{
+       registerTriggerItem(OPS_READ,
+                       "{" TRIG_DEF_RANK "," TRIG_DEF_TOTAL_COUNT "}",
+                       "{"
+                               "\"AppId\":{\"type\":\"string\"},"
+                               TRIG_DEF_TIME_OF_DAY "," TRIG_DEF_DAY_OF_WEEK
+                       "}");
+}
diff --git a/src/app-stats/AppStatsProvider.h b/src/app-stats/AppStatsProvider.h
new file mode 100644 (file)
index 0000000..dccb66a
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_APP_STATS_PROVIDER_H_
+#define _CONTEXT_APP_STATS_PROVIDER_H_
+
+#include <ContextProvider.h>
+#include "AppStatisticsTypes.h"
+
+namespace ctx {
+
+       class AppStatsProvider : public ContextProvider {
+       public:
+               int read(Json option, Json *requestResult);
+               virtual void submitTriggerItem();
+
+       protected:
+               AppStatsProvider(const char *subject);
+               virtual ~AppStatsProvider();
+       };
+
+
+       class RecentAppProvider : public AppStatsProvider {
+       public:
+               RecentAppProvider() :
+                       AppStatsProvider(APP_SUBJ_RECENTLY_USED) {}
+       };
+
+
+       class FrequentAppProvider : public AppStatsProvider {
+       public:
+               FrequentAppProvider() :
+                       AppStatsProvider(APP_SUBJ_FREQUENTLY_USED) {}
+       };
+
+
+       class RareAppProvider : public AppStatsProvider {
+       public:
+               RareAppProvider() :
+                       AppStatsProvider(APP_SUBJ_RARELY_USED) {}
+       };
+
+
+       class AppPeakTimeProvider : public AppStatsProvider {
+       public:
+               AppPeakTimeProvider() :
+                       AppStatsProvider(APP_SUBJ_PEAK_TIME) {}
+       };
+
+
+       class AppSettingProvider : public AppStatsProvider {
+       public:
+               AppSettingProvider() :
+                       AppStatsProvider(APP_SUBJ_COMMON_SETTING) {}
+       };
+
+
+       class AppFreqProvider : public AppStatsProvider {
+       public:
+               AppFreqProvider() :
+                       AppStatsProvider(APP_SUBJ_FREQUENCY) {}
+
+               void submitTriggerItem();
+       };
+
+}      /* namespace ctx */
+
+#endif /* _CONTEXT_APP_STATS_PROVIDER_H_ */
diff --git a/src/app-stats/DbHandle.cpp b/src/app-stats/DbHandle.cpp
new file mode 100644 (file)
index 0000000..06021e3
--- /dev/null
@@ -0,0 +1,220 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <sstream>
+#include <Types.h>
+#include "AppStatisticsTypes.h"
+#include "DbHandle.h"
+
+using namespace ctx;
+
+AppDbHandle::AppDbHandle(ContextProvider *provider) :
+       StatsDbHandleBase(provider)
+{
+}
+
+AppDbHandle::~AppDbHandle()
+{
+}
+
+int AppDbHandle::read(Json filter)
+{
+       std::string query;
+       const char *subject = reqProvider->getSubject();
+
+       if (STR_EQ(subject, APP_SUBJ_RECENTLY_USED)) {
+               query = createSqlRecentlyUsed(filter);
+
+       } else if (STR_EQ(subject, APP_SUBJ_FREQUENTLY_USED)) {
+               query = createSqlFrequentlyUsed(filter);
+
+       } else if (STR_EQ(subject, APP_SUBJ_RARELY_USED)) {
+               query = createSqlRarelyUsed(filter);
+
+       } else if (STR_EQ(subject, APP_SUBJ_PEAK_TIME)) {
+               query = createSqlPeakTime(filter);
+
+       } else if (STR_EQ(subject, APP_SUBJ_COMMON_SETTING)) {
+               query = createSqlCommonSetting(filter);
+
+       } else if (STR_EQ(subject, APP_SUBJ_FREQUENCY)) {
+               isTriggerItem = true;
+               query = createSqlFrequency(filter);
+       }
+
+       IF_FAIL_RETURN(!query.empty(), ERR_OPERATION_FAILED);
+
+       bool ret = executeQuery(filter, query.c_str());
+       IF_FAIL_RETURN(ret, ERR_OPERATION_FAILED);
+
+       return ERR_NONE;
+}
+
+std::string AppDbHandle::createWhereClauseWithDeviceStatus(Json filter)
+{
+       std::stringstream whereClause;
+       std::string bssid;
+       int audioJack;
+
+       whereClause << StatsDbHandleBase::createWhereClause(filter);
+
+       if (filter.get(NULL, STATS_BSSID, &bssid))
+               whereClause << " AND " STATS_BSSID " = '" << bssid << "'";
+
+       if (filter.get(NULL, STATS_AUDIO_JACK, &audioJack))
+               whereClause << " AND " STATS_AUDIO_JACK " = " << audioJack;
+
+       return whereClause.str();
+}
+
+std::string AppDbHandle::createSqlPeakTime(Json filter)
+{
+       return StatsDbHandleBase::createSqlPeakTime(filter, APP_TABLE_USAGE_LOG, createWhereClause(filter));
+}
+
+std::string AppDbHandle::createSqlCommonSetting(Json filter)
+{
+       return StatsDbHandleBase::createSqlCommonSetting(filter, APP_TABLE_USAGE_LOG, createWhereClause(filter));
+}
+
+std::string AppDbHandle::createSqlFrequency(Json filter)
+{
+       Json filterCleaned;
+       std::string weekStr;
+       std::string timeOfDay;
+       std::string appId;
+
+       if (!filter.get(NULL, STATS_APP_ID, &appId)) {
+               _E("Invalid parameter");
+               return "";
+       }
+
+       if (filter.get(NULL, STATS_DAY_OF_WEEK, &weekStr))
+               filterCleaned.set(NULL, STATS_DAY_OF_WEEK, weekStr);
+
+       if (filter.get(NULL, STATS_TIME_OF_DAY, &timeOfDay))
+               filterCleaned.set(NULL, STATS_TIME_OF_DAY, timeOfDay);
+
+       std::string whereClause = createWhereClause(filterCleaned);
+
+       std::stringstream query;
+
+       query <<
+               "DELETE FROM " APP_TEMP_USAGE_FREQ ";";
+
+       query <<
+               "INSERT INTO " APP_TEMP_USAGE_FREQ \
+               " SELECT " STATS_APP_ID ", COUNT(*) AS " STATS_TOTAL_COUNT \
+               " FROM " APP_TABLE_USAGE_LOG \
+               " WHERE " << whereClause <<
+               " GROUP BY " STATS_APP_ID ";";
+
+       query <<
+               "INSERT OR IGNORE INTO " APP_TEMP_USAGE_FREQ " (" STATS_APP_ID ")" \
+               " VALUES ('" << appId << "');";
+
+       query <<
+               "SELECT S." STATS_APP_ID ", S." STATS_TOTAL_COUNT ", 1+COUNT(lesser." STATS_TOTAL_COUNT ") AS " STATS_RANK \
+               " FROM " APP_TEMP_USAGE_FREQ " AS S" \
+               " LEFT JOIN " APP_TEMP_USAGE_FREQ " AS lesser" \
+               " ON S." STATS_TOTAL_COUNT " < lesser." STATS_TOTAL_COUNT \
+               " WHERE S." STATS_APP_ID " = '" << appId << "'";
+
+       return query.str();
+}
+
+std::string AppDbHandle::createSqlRecentlyUsed(Json filter)
+{
+       std::stringstream query;
+       int limit = DEFAULT_LIMIT;
+
+       filter.get(NULL, STATS_RESULT_SIZE, &limit);
+
+       query <<
+               "SELECT " STATS_APP_ID ", " \
+                       "COUNT(*) AS " STATS_TOTAL_COUNT ", " \
+                       "SUM(" STATS_DURATION ") AS " STATS_TOTAL_DURATION ", " \
+                       "MAX(" STATS_UNIV_TIME ") AS " STATS_LAST_TIME \
+               " FROM " APP_TABLE_USAGE_LOG \
+               " WHERE " << createWhereClauseWithDeviceStatus(filter) <<
+               " GROUP BY " STATS_APP_ID \
+               " ORDER BY MAX(" STATS_UNIV_TIME ") DESC" \
+               " LIMIT " << limit;
+
+       return query.str();
+}
+
+std::string AppDbHandle::createSqlFrequentlyUsed(Json filter)
+{
+       std::stringstream query;
+       int limit = DEFAULT_LIMIT;
+
+       filter.get(NULL, STATS_RESULT_SIZE, &limit);
+
+       query <<
+               "SELECT " STATS_APP_ID ", " \
+                       "COUNT(*) AS " STATS_TOTAL_COUNT ", " \
+                       "SUM(" STATS_DURATION ") AS " STATS_TOTAL_DURATION ", " \
+                       "MAX(" STATS_UNIV_TIME ") AS " STATS_LAST_TIME \
+               " FROM " APP_TABLE_USAGE_LOG \
+               " WHERE " << createWhereClauseWithDeviceStatus(filter) <<
+               " GROUP BY " STATS_APP_ID \
+               " ORDER BY COUNT(*) DESC" \
+               " LIMIT " << limit;
+
+       return query.str();
+}
+
+std::string AppDbHandle::createSqlRarelyUsed(Json filter)
+{
+       std::stringstream query;
+       int limit = DEFAULT_LIMIT;
+
+       filter.get(NULL, STATS_RESULT_SIZE, &limit);
+
+       query <<
+               "SELECT i." STATS_APP_ID ", " \
+                       "COUNT(u." STATS_DURATION ") AS " STATS_TOTAL_COUNT ", " \
+                       "IFNULL(SUM(u." STATS_DURATION "),0) AS " STATS_TOTAL_DURATION ", " \
+                       "IFNULL(MAX(u." STATS_UNIV_TIME "),-1) AS " STATS_LAST_TIME \
+               " FROM " APP_TABLE_REMOVABLE_APP " i LEFT OUTER JOIN (" \
+                       " SELECT * FROM " APP_TABLE_USAGE_LOG \
+                       " WHERE " << createWhereClauseWithDeviceStatus(filter) << ") u" \
+                       " ON i." STATS_APP_ID " = u." STATS_APP_ID \
+               " GROUP BY i." STATS_APP_ID \
+               " ORDER BY " STATS_TOTAL_COUNT " ASC" \
+               " LIMIT " << limit;
+
+       return query.str();
+}
+
+void AppDbHandle::replyTriggerItem(int error, Json &jsonResult)
+{
+       IF_FAIL_VOID_TAG(STR_EQ(reqProvider->getSubject(), APP_SUBJ_FREQUENCY), _E, "Invalid subject");
+
+       Json results;
+       std::string valStr;
+       int val;
+
+       jsonResult.get(NULL, STATS_APP_ID, &valStr);
+       results.set(NULL, STATS_APP_ID, valStr);
+       jsonResult.get(NULL, STATS_TOTAL_COUNT, &val);
+       results.set(NULL, STATS_TOTAL_COUNT, val);
+       jsonResult.get(NULL, STATS_RANK, &val);
+       results.set(NULL, STATS_RANK, val);
+
+       reqProvider->replyToRead(reqFilter, error, results);
+}
diff --git a/src/app-stats/DbHandle.h b/src/app-stats/DbHandle.h
new file mode 100644 (file)
index 0000000..9084d87
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_STATS_APP_DB_HANDLE_H_
+#define _CONTEXT_STATS_APP_DB_HANDLE_H_
+
+#include <string>
+#include <Json.h>
+#include "../shared/DbHandleBase.h"
+
+namespace ctx {
+       class AppDbHandle : public StatsDbHandleBase {
+       public:
+               AppDbHandle(ContextProvider *provider);
+               ~AppDbHandle();
+
+               int read(Json filter);
+
+       protected:
+               std::string createWhereClauseWithDeviceStatus(Json filter);
+               std::string createSqlRecentlyUsed(Json filter);
+               std::string createSqlFrequentlyUsed(Json filter);
+               std::string createSqlRarelyUsed(Json filter);
+               std::string createSqlPeakTime(Json filter);
+               std::string createSqlCommonSetting(Json filter);
+               std::string createSqlFrequency(Json filter);
+               void replyTriggerItem(int error, Json &jsonResult);
+       };
+}
+
+#endif /* End of _CONTEXT_STATS_APP_DB_HANDLE_H_ */
diff --git a/src/app-stats/DbInit.cpp b/src/app-stats/DbInit.cpp
new file mode 100644 (file)
index 0000000..9c4ec24
--- /dev/null
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <sstream>
+#include <Json.h>
+#include <Types.h>
+#include "AppStatisticsTypes.h"
+#include "DbInit.h"
+
+#define EMPTY_CHECKER_QID 999
+
+ctx::AppDbInitializer::AppDbInitializer()
+{
+       __createTable();
+       __checkAppList();
+}
+
+ctx::AppDbInitializer::~AppDbInitializer()
+{
+}
+
+void ctx::AppDbInitializer::__createTable()
+{
+       static bool done = false;
+       IF_FAIL_VOID(!done);
+
+       __dbManager.createTable(0, APP_TABLE_USAGE_LOG, APP_TABLE_USAGE_LOG_COLUMNS, NULL, NULL);
+       __dbManager.createTable(0, APP_TABLE_REMOVABLE_APP, APP_TABLE_REMOVABLE_APP_COLUMNS, NULL, NULL);
+       __dbManager.execute(0, APP_TEMP_USAGE_FREQ_SQL, NULL);
+
+       done = true;
+}
+
+void ctx::AppDbInitializer::__checkAppList()
+{
+       __dbManager.execute(EMPTY_CHECKER_QID, "SELECT * FROM " APP_TABLE_REMOVABLE_APP " LIMIT 1", this);
+}
+
+void ctx::AppDbInitializer::__duplicateAppList()
+{
+       int err;
+       package_manager_filter_h filter;
+
+       err = package_manager_filter_create(&filter);
+       IF_FAIL_VOID_TAG(err == PACKAGE_MANAGER_ERROR_NONE, _E, "package_manager_filter_create() failed");
+
+       err = package_manager_filter_add_bool(filter, PACKAGE_MANAGER_PKGINFO_PROP_REMOVABLE, true);
+       IF_FAIL_CATCH_TAG(err == PACKAGE_MANAGER_ERROR_NONE, _E, "package_manager_filter_add_bool() failed");
+
+       err = package_manager_filter_foreach_package_info(filter, __packageInfoCb, this);
+       IF_FAIL_CATCH_TAG(err == PACKAGE_MANAGER_ERROR_NONE, _E, "package_manager_filter_foreach_package_info() failed");
+
+CATCH:
+       if (filter)
+               package_manager_filter_destroy(filter);
+}
+
+bool ctx::AppDbInitializer::__packageInfoCb(package_info_h packageInfo, void *userData)
+{
+       int err = package_info_foreach_app_from_package(packageInfo, PACKAGE_INFO_UIAPP, __appInfoCb, userData);
+       IF_FAIL_RETURN_TAG(err == PACKAGE_MANAGER_ERROR_NONE, false, _E, "package_info_foreach_app_from_package() failed");
+       return true;
+}
+
+bool ctx::AppDbInitializer::__appInfoCb(package_info_app_component_type_e compType, const char *appId, void *userData)
+{
+       Json data;
+       DatabaseManager dbManager;
+
+       data.set(NULL, STATS_APP_ID, appId);
+       return dbManager.insert(0, APP_TABLE_REMOVABLE_APP, data, NULL);
+}
+
+void ctx::AppDbInitializer::onTableCreated(unsigned int queryId, int error)
+{
+}
+
+void ctx::AppDbInitializer::onInserted(unsigned int queryId, int error, int64_t rowId)
+{
+}
+
+void ctx::AppDbInitializer::onExecuted(unsigned int queryId, int error, std::vector<Json>& records)
+{
+       if (queryId != EMPTY_CHECKER_QID) {
+               _E("Unknown Query ID: %d", queryId);
+               delete this;
+               return;
+       }
+
+       if (records.empty())
+               __duplicateAppList();
+
+       delete this;
+}
diff --git a/src/app-stats/DbInit.h b/src/app-stats/DbInit.h
new file mode 100644 (file)
index 0000000..c8d18c2
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_STATS_APP_DB_INITIALIZER_H_
+#define _CONTEXT_STATS_APP_DB_INITIALIZER_H_
+
+#include <package_manager.h>
+#include <DatabaseManager.h>
+
+namespace ctx {
+
+       class AppDbInitializer : public IDatabaseListener {
+       private:
+               void __createTable();
+               void __checkAppList();
+               void __duplicateAppList();
+
+               void onTableCreated(unsigned int queryId, int error);
+               void onInserted(unsigned int queryId, int error, int64_t rowId);
+               void onExecuted(unsigned int queryId, int error, std::vector<Json>& records);
+
+               static bool __packageInfoCb(package_info_h packageInfo, void *userData);
+               static bool __appInfoCb(package_info_app_component_type_e compType, const char *appId, void *userData);
+
+               DatabaseManager __dbManager;
+
+       public:
+               AppDbInitializer();
+               ~AppDbInitializer();
+       };
+
+}      /* namespace ctx */
+
+#endif /* End of _CONTEXT_STATS_APP_DB_INITIALIZER_H_ */
diff --git a/src/app-stats/InstallMonitor.cpp b/src/app-stats/InstallMonitor.cpp
new file mode 100644 (file)
index 0000000..af5169f
--- /dev/null
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <sstream>
+#include <glib.h>
+#include <Json.h>
+#include <Types.h>
+#include <DatabaseManager.h>
+#include "AppStatisticsTypes.h"
+#include "InstallMonitor.h"
+
+static package_manager_event_type_e __lastEventType;
+
+ctx::AppInstallMonitor::AppInstallMonitor() :
+       __pkgmgrHandle(NULL)
+{
+       __startMonitoring();
+}
+
+ctx::AppInstallMonitor::~AppInstallMonitor()
+{
+       __stopMonitoring();
+}
+
+bool ctx::AppInstallMonitor::__startMonitoring()
+{
+       int err = package_manager_create(&__pkgmgrHandle);
+       IF_FAIL_RETURN_TAG(err == PACKAGE_MANAGER_ERROR_NONE, false, _E, "package_manager_create() failed");
+
+       err = package_manager_set_event_cb(__pkgmgrHandle, __packageEventCb, this);
+       IF_FAIL_RETURN_TAG(err == PACKAGE_MANAGER_ERROR_NONE, false, _E, "package_manager_set_event_cb() failed");
+
+       return true;
+}
+
+void ctx::AppInstallMonitor::__stopMonitoring()
+{
+       if(__pkgmgrHandle) {
+               package_manager_unset_event_cb(__pkgmgrHandle);
+               package_manager_destroy(__pkgmgrHandle);
+               __pkgmgrHandle = NULL;
+       }
+}
+
+void ctx::AppInstallMonitor::__packageEventCb(const char *type, const char *package, package_manager_event_type_e eventType, package_manager_event_state_e eventState, int progress, package_manager_error_e error, void *userData)
+{
+       IF_FAIL_VOID_TAG(error == PACKAGE_MANAGER_ERROR_NONE, _E, "package_manager error: %d", error);
+
+       if (!(eventType == PACKAGE_MANAGER_EVENT_TYPE_INSTALL && eventState == PACKAGE_MANAGER_EVENT_STATE_COMPLETED) &&
+               !(eventType == PACKAGE_MANAGER_EVENT_TYPE_UNINSTALL && eventState == PACKAGE_MANAGER_EVENT_STATE_STARTED)) {
+               _D("Skipping event type-%d / state-%d", eventType, eventState);
+               return;
+       }
+
+       package_info_h pkgInfo;
+       int err = package_manager_get_package_info(package, &pkgInfo);
+       IF_FAIL_VOID_TAG(err == PACKAGE_MANAGER_ERROR_NONE, _E, "package_manager_get_package_info() failed");
+
+       __lastEventType = eventType;
+
+       err = package_info_foreach_app_from_package(pkgInfo, PACKAGE_INFO_UIAPP, __appInfoCb, userData);
+       if (err != PACKAGE_MANAGER_ERROR_NONE)
+               _E("package_info_foreach_app_from_package() failed");
+
+       package_info_destroy(pkgInfo);
+}
+
+bool ctx::AppInstallMonitor::__appInfoCb(package_info_app_component_type_e compType, const char *appId, void *userData)
+{
+       DatabaseManager dbManager;
+
+       if (__lastEventType == PACKAGE_MANAGER_EVENT_TYPE_INSTALL) {
+               Json data;
+               data.set(NULL, STATS_APP_ID, appId);
+               dbManager.insert(0, APP_TABLE_REMOVABLE_APP, data, NULL);
+       } else if (__lastEventType == PACKAGE_MANAGER_EVENT_TYPE_UNINSTALL) {
+               dbManager.execute(0, __createDeletionQuery(APP_TABLE_REMOVABLE_APP, appId).c_str(), NULL);
+               dbManager.execute(0, __createDeletionQuery(APP_TABLE_USAGE_LOG, appId).c_str(), NULL);
+       }
+
+       return true;
+}
+
+std::string ctx::AppInstallMonitor::__createDeletionQuery(const char* tableName, const char* appId)
+{
+       std::stringstream query;
+       query << "DELETE FROM " << tableName;
+       query << " WHERE " STATS_APP_ID " = '" << appId << "'";
+       return query.str();
+}
diff --git a/src/app-stats/InstallMonitor.h b/src/app-stats/InstallMonitor.h
new file mode 100644 (file)
index 0000000..a022946
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_STATS_APP_INSTALL_MONITOR_H_
+#define _CONTEXT_STATS_APP_INSTALL_MONITOR_H_
+
+#include <package_manager.h>
+#include <DatabaseManager.h>
+
+namespace ctx {
+
+       class AppInstallMonitor : public IDatabaseListener {
+       private:
+               package_manager_h __pkgmgrHandle;
+
+               bool __startMonitoring();
+               void __stopMonitoring();
+
+               static std::string __createDeletionQuery(const char* tableName, const char* appId);
+               static void __packageEventCb(const char *type, const char *package, package_manager_event_type_e eventType, package_manager_event_state_e eventState, int progress, package_manager_error_e error, void *userData);
+               static bool __appInfoCb(package_info_app_component_type_e compType, const char *appId, void *userData);
+
+               void onTableCreated(unsigned int queryId, int error) {}
+               void onInserted(unsigned int queryId, int error, int64_t rowId) {}
+               void onExecuted(unsigned int queryId, int error, std::vector<Json>& records) {}
+
+       public:
+               AppInstallMonitor();
+               ~AppInstallMonitor();
+       };
+
+}      /* namespace ctx */
+
+#endif /* End of _CONTEXT_STATS_APP_INSTALL_MONITOR_H_ */
diff --git a/src/app-stats/app_inactive_detector/AppInactiveDetector.cpp b/src/app-stats/app_inactive_detector/AppInactiveDetector.cpp
new file mode 100644 (file)
index 0000000..148d655
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <Types.h>
+#include <ContextManager.h>
+#include <Json.h>
+#include "AppInactiveDetector.h"
+#include "AppInactiveDetectorTypes.h"
+#include "InactiveDetector.h"
+
+
+ctx::app_inactive_detector_provider *ctx::app_inactive_detector_provider::__instance = NULL;
+
+ctx::app_inactive_detector_provider::app_inactive_detector_provider()
+{
+}
+
+ctx::app_inactive_detector_provider::~app_inactive_detector_provider()
+{
+}
+
+ctx::ContextProvider *ctx::app_inactive_detector_provider::create(void *data)
+{
+       IF_FAIL_RETURN(!__instance, __instance);
+       __instance = new(std::nothrow) app_inactive_detector_provider();
+       IF_FAIL_RETURN_TAG(__instance, NULL, _E, "Memory allocation failed");
+       _I(BLUE("Created"));
+       return __instance;
+}
+
+void ctx::app_inactive_detector_provider::destroy(void *data)
+{
+       IF_FAIL_VOID(__instance);
+       delete __instance;
+       __instance = NULL;
+       _I(BLUE("Destroyed"));
+}
+
+int ctx::app_inactive_detector_provider::subscribe(const char *subject, ctx::Json option, ctx::Json* request_result)
+{
+       return ERR_NOT_SUPPORTED;
+}
+
+int ctx::app_inactive_detector_provider::unsubscribe(const char *subject, ctx::Json option)
+{
+       return ERR_NOT_SUPPORTED;
+}
+
+int ctx::app_inactive_detector_provider::read(const char *subject, ctx::Json option, ctx::Json* request_result)
+{
+       _I(BLUE("Read"));
+       _J("Option", option);
+
+       int error = engine->read(subject, option);
+       return error == ERR_NONE ? ERR_NONE : error;
+}
+
+int ctx::app_inactive_detector_provider::write(const char *subject, ctx::Json data, ctx::Json* request_result)
+{
+       return ERR_NOT_SUPPORTED;
+}
+
+bool ctx::app_inactive_detector_provider::is_supported()
+{
+       return true;
+}
diff --git a/src/app-stats/app_inactive_detector/AppInactiveDetector.h b/src/app-stats/app_inactive_detector/AppInactiveDetector.h
new file mode 100644 (file)
index 0000000..588130a
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __CONTEXT_APP_INACTIVE_DETECTOR_H__
+#define __CONTEXT_APP_INACTIVE_DETECTOR_H__
+
+#include <ContextProvider.h>
+#include "AppInactiveDetectorTypes.h"
+#include "InactiveDetector.h"
+
+namespace ctx {
+
+       class app_inactive_detector_provider : public ContextProvider {
+
+               public:
+                       static ContextProvider *create(void *data);
+                       static void destroy(void *data);
+                       static bool is_supported();
+
+                       int subscribe(const char *subject, ctx::Json option, ctx::Json *request_result);
+                       int unsubscribe(const char *subject, ctx::Json option);
+                       int read(const char *subject, ctx::Json option, ctx::Json *request_result);
+                       int write(const char *subject, ctx::Json data, ctx::Json *request_result);
+
+               private:
+                       static app_inactive_detector_provider *__instance;
+                       inactive_detector *engine;
+
+                       app_inactive_detector_provider();
+                       ~app_inactive_detector_provider();
+
+       };      /* class app_inactive_detector_provider */
+
+}      /* namespace ctx */
+
+#endif /* __CONTEXT_APP_INACTIVE_DETECTOR_H__ */
\ No newline at end of file
diff --git a/src/app-stats/app_inactive_detector/AppInactiveDetectorTypes.h b/src/app-stats/app_inactive_detector/AppInactiveDetectorTypes.h
new file mode 100644 (file)
index 0000000..b058b54
--- /dev/null
@@ -0,0 +1,114 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __CONTEXT_APP_INACTIVE_DETECTOR_TYPES__
+#define __CONTEXT_APP_INACTIVE_DETECTOR_TYPES__
+
+#include <string>
+
+// Context Items
+//#define APP_INACTIVE_SUBJ_RECALCULATE                "app/recalculate"
+#define APP_INACTIVE_SUBJ_GET_APPS_INACTIVE            "app/inactive"
+#define APP_INACTIVE_SUBJ_GET_APPS_ACTIVE              "app/active"
+#define APP_INACTIVE_SUBJ_GET_APPS_WEIGHT              "app/weight"
+#define APP_INACTIVE_SUBJ_UPDATE_CLUSTERS              "app/update"
+
+enum {
+               APP_INACTIVE_QUERY_ID_GET_APPS_WEIGHT = 1,
+               APP_INACTIVE_QUERY_ID_GET_APPS_INACTIVE = 2,
+               APP_INACTIVE_QUERY_ID_GET_APPS_ACTIVE = 3,
+               APP_INACTIVE_QUERY_ID_UPDATE_CLUSTERS = 4
+};
+
+// Database
+#define APP_INACTIVE_DETECTOR_APPINFO_TABLE                                            "context_app_info"
+#define APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS                              "app_info"
+#define APP_INACTIVE_DETECTOR_APPINFO_COLUMN_ID                                        "_id"
+#define APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME              "package_name"
+#define APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_TYPE              "package_type"
+#define APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_NODISPLAY              "is_nodisplay"
+#define APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ENABLED                        "is_enabled"
+#define APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ATBOOT                 "is_atboot"
+#define APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_PRELOADED              "is_preloaded"
+#define APP_INACTIVE_DETECTOR_APPINFO_COLUMN_TIMESTAMP                 "timestamp"
+
+#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_TABLE                                              "context_app_launch_log"
+#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_TABLE_ALIAS                                        "app_launch_log"
+#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_ID                                  "_id"
+#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_CONTEXT_APP_INFO_ID "context_app_info_id"
+#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_DURATION                            "duration"
+#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_SYSTEM_VOLUME               "system_volume"
+#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_BSSID                               "bssid"
+#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_TIMESTAMP                   "timestamp"
+#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_TIMESTAMP_UTC               "timestamp_utc"
+
+#define APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE                                         "context_app_activity_classified"
+#define APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE_ALIAS                           "app_activity_classified"
+#define APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_ID                                     "_id"
+#define APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_CONTEXT_APP_INFO_ID    "context_app_info_id"
+#define APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_ACTIVITY_RATE          "activity_rate"
+#define APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_TIMEFRAME                      "timeframe"
+#define APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_IS_ACTIVE                      "is_active"
+
+
+#define APP_INACTIVE_DETECTOR_VIRTUAL_TABLE_ALIAS              "virtual_app_history"
+#define APP_INACTIVE_DETECTOR_VIRTUAL_COLUMN_WEIGHT            "weight"
+
+// Output Data Key
+#define APP_INACTIVE_DETECTOR_DATA_READ                                                        "AppsList"
+#define APP_INACTIVE_DETECTOR_DATA_TIMESTAMP_FROM                              "timestamp_from"
+#define APP_INACTIVE_DETECTOR_ACTIVITY_RATE                                            "activity_rate"
+#define APP_INACTIVE_DETECTOR_DATA_TIMEFRAME                                   "timeframe"
+#define APP_INACTIVE_DETECTOR_DATA_ISACTIVE                                            "is_active"
+
+//Other
+#define APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMESTAMP      "$timestamp"
+#define APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_CLUSTER                "$cluster"
+#define APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMEFRAME      "$timeframe"
+#define APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_VALUES         "$values"
+
+// Objects
+struct app_t {
+       int id;
+       std::string package_name;
+       int is_nodisplay;
+       int is_enabled;
+       int is_atboot;
+       int is_preloaded;
+       double timestamp;
+       int weight;
+       int is_active;
+       int timeframe;
+};
+
+
+#define APP_TYPE_INACTIVE_INACTIVE     1
+#define APP_TYPE_INACTIVE_ACTIVE       2
+
+
+#define APP_INACTIVE_TASK_START_HOUR   3
+#define APP_INACTIVE_TASK_START_MINUTE 0
+
+
+#define CONTEXT_HISTORY_FILTER_TIME_INTERVAL_ONEDAY            60*60*24
+#define CONTEXT_HISTORY_FILTER_TIME_INTERVAL_THREEDAYS 60*60*24*3
+#define CONTEXT_HISTORY_FILTER_TIME_INTERVAL_ONEWEEK   60*60*24*7
+#define CONTEXT_HISTORY_FILTER_TIME_INTERVAL_TWOWEEKS  60*60*24*14
+#define CONTEXT_HISTORY_FILTER_TIME_INTERVAL_ONEMONTH  60*60*24*31
+
+
+
+#endif /* __CONTEXT_APP_INACTIVE_DETECTOR_TYPES__ */
\ No newline at end of file
diff --git a/src/app-stats/app_inactive_detector/InactiveDetector.cpp b/src/app-stats/app_inactive_detector/InactiveDetector.cpp
new file mode 100644 (file)
index 0000000..6cc1820
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <ctime>
+#include <Types.h>
+#include "InactiveDetector.h"
+#include "InactiveDetectorWeight.h"
+#include "InactiveDetectorStorage.h"
+#include "InactiveDetectorClassificator.h"
+#include "TimerManager.h"
+
+ctx::inactive_detector::inactive_detector()
+{
+       timer_id = timer_mgr.setAt( // execute once every night
+                                       APP_INACTIVE_TASK_START_HOUR,
+                                       APP_INACTIVE_TASK_START_MINUTE,
+                                       DayOfWeek::EVERYDAY,
+                                       this);
+       if (timer_id < 0) {
+               _E("inactive_detector timer set FAIL");
+               return;
+       } else {
+               update_clusters();
+               _D("inactive_detector timer set SUCCESS");
+       }
+
+}
+
+ctx::inactive_detector::~inactive_detector()
+{
+       if (timer_id >= 0) {
+               timer_mgr.remove(timer_id);
+               _D("inactive_detejctor timer removed");
+       }
+
+}
+
+bool ctx::inactive_detector::onTimerExpired(int timerId)
+{
+       update_clusters();
+       return true;
+}
+
+int ctx::inactive_detector::update_clusters()
+{
+       // define timeframes stack
+       std::vector<int> timeframes;
+       timeframes.push_back(CONTEXT_HISTORY_FILTER_TIME_INTERVAL_ONEDAY);
+       timeframes.push_back(CONTEXT_HISTORY_FILTER_TIME_INTERVAL_THREEDAYS);
+       timeframes.push_back(CONTEXT_HISTORY_FILTER_TIME_INTERVAL_ONEWEEK);
+       timeframes.push_back(CONTEXT_HISTORY_FILTER_TIME_INTERVAL_TWOWEEKS);
+       timeframes.push_back(CONTEXT_HISTORY_FILTER_TIME_INTERVAL_ONEMONTH);
+
+       // recalculate weights
+       // foreach timeframe
+       for(std::vector<int>::iterator timeframe = timeframes.begin();
+               timeframe != timeframes.end(); timeframe++)
+       {
+               inactive_detector_weight i_detector_weight;
+               int error = i_detector_weight.request_weights(*timeframe);
+               _E("update_clusters request_weights:%d, error:%d", *timeframe, error);
+       }
+
+       return ERR_NONE;
+}
+
+void ctx::inactive_detector::on_cluster_update_finished(std::vector<app_t> *apps_with_weight, int error)
+{
+       if (error == ERR_NONE) {
+               _I("on_cluster_update_finished success");
+       }
+       // clean memory
+       delete apps_with_weight;
+}
+
+int ctx::inactive_detector::read(
+                       const char *subject,
+                       ctx::Json option)
+{
+       ctx::inactive_detector_storage *handle = new(std::nothrow) ctx::inactive_detector_storage();
+       IF_FAIL_RETURN_TAG(handle, ERR_OPERATION_FAILED, _E, "Memory allocation failed");
+
+       int err = handle->read(subject, option);
+       if (err != ERR_NONE) {
+               delete handle;
+               return err;
+       }
+
+       return ERR_NONE;
+}
+
+ctx::Json ctx::inactive_detector::to_json(std::vector<app_t> *app_infos)
+{
+       ctx::Json data;
+
+       for(std::vector<app_t>::iterator app_info = app_infos->begin();
+               app_info != app_infos->end(); app_info++)
+       {
+               ctx::Json app_j;
+               app_j.set(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME, app_info->package_name);
+               app_j.set(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_NODISPLAY, app_info->is_nodisplay);
+               app_j.set(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ENABLED, app_info->is_enabled);
+               app_j.set(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ATBOOT, app_info->is_atboot);
+               app_j.set(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_PRELOADED, app_info->is_preloaded);
+               app_j.set(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_TIMESTAMP, app_info->timestamp);
+       }
+       return data;
+}
diff --git a/src/app-stats/app_inactive_detector/InactiveDetector.h b/src/app-stats/app_inactive_detector/InactiveDetector.h
new file mode 100644 (file)
index 0000000..8c2d0a0
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __CONTEXT_INACTIVE_DETECTOR_H__
+#define __CONTEXT_INACTIVE_DETECTOR_H__
+
+#include <string>
+#include <Json.h>
+#include <vector>
+#include "AppInactiveDetectorTypes.h"
+#include <TimerManager.h>
+
+namespace ctx {
+
+       class inactive_detector : public ITimerListener {
+               private:
+                       int timer_id;
+                       TimerManager timer_mgr;
+               public:
+                       inactive_detector();
+                       ~inactive_detector();
+
+                       int read(const char *subject,
+                               ctx::Json option);
+
+                       int update_clusters();
+                       void on_cluster_update_finished(
+                               std::vector<app_t> *apps_classified,
+                               int error);
+                       ctx::Json to_json(std::vector<app_t> *apps);
+
+                       bool onTimerExpired(int timerId);
+       };      /* class inactive_detector */
+
+}      /* namespace ctx */
+
+
+#endif /* __CONTEXT_INACTIVE_DETECTOR_H__ */
diff --git a/src/app-stats/app_inactive_detector/InactiveDetectorClassificator.cpp b/src/app-stats/app_inactive_detector/InactiveDetectorClassificator.cpp
new file mode 100644 (file)
index 0000000..5e5859b
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <Types.h>
+#include "InactiveDetector.h"
+#include "AppInactiveDetectorTypes.h"
+#include "InactiveDetectorClassificator.h"
+#include "InactiveDetectorClassificatorKmeans.h"
+
+int ctx::inactive_detector_classificator::classify(std::vector<app_t> *apps_with_weights)
+{
+       inactive_detector_classificator_kmeans kmeans;
+       int error = kmeans.classify(apps_with_weights);
+
+       return error;
+}
diff --git a/src/app-stats/app_inactive_detector/InactiveDetectorClassificator.h b/src/app-stats/app_inactive_detector/InactiveDetectorClassificator.h
new file mode 100644 (file)
index 0000000..fc9abd0
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __CONTEXT_INACTIVE_DETECTOR_CLASSIFICATOR_H__
+#define __CONTEXT_INACTIVE_DETECTOR_CLASSIFICATOR_H__
+
+#include <vector>
+#include "AppInactiveDetectorTypes.h"
+#include <Json.h>
+
+namespace ctx {
+
+       class inactive_detector_classificator
+       {
+               public:
+                       inactive_detector_classificator();
+                       ~inactive_detector_classificator();
+
+                       int classify(std::vector<app_t> *apps_with_weights);
+       };      /* class inactive_detector_classificator */
+
+}      /* namespace ctx */
+
+#endif /* __CONTEXT_INACTIVE_DETECTOR_CLASSIFICATOR_H__ */
diff --git a/src/app-stats/app_inactive_detector/InactiveDetectorClassificatorKmeans.cpp b/src/app-stats/app_inactive_detector/InactiveDetectorClassificatorKmeans.cpp
new file mode 100644 (file)
index 0000000..c0cb93e
--- /dev/null
@@ -0,0 +1,174 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <Types.h>
+#include "AppInactiveDetectorTypes.h"
+#include "InactiveDetectorClassificatorKmeans.h"
+#include "InactiveDetectorClassificatorKmeansTypes.h"
+#include <math.h>
+#include <stdlib.h>
+
+double ctx::inactive_detector_classificator_kmeans::randomf(double x)
+{
+       return x * rand() / (RAND_MAX - 1.);
+}
+
+double ctx::inactive_detector_classificator_kmeans::glide_function(double x)
+{
+       double value = sqrt(log(x) + 1);
+       return (value > 0 ? value : 0);
+}
+
+point_s *ctx::inactive_detector_classificator_kmeans::reproject_to_2d(std::vector<app_t> *apps_with_weights)
+{
+       int distr_size = apps_with_weights->size();
+       point_s *p = new point_s[distr_size];
+
+       int i=0;
+       for(std::vector<app_t>::iterator apps_with_weight = apps_with_weights->begin();
+               apps_with_weight != apps_with_weights->end(); apps_with_weight++)
+       {
+               point_s the_point;
+
+               the_point.x = glide_function(apps_with_weight->weight); // normalize weight values
+               the_point.y = 0; //remove 3rd dimension of the data
+               the_point.origin_id = apps_with_weight->package_name;
+
+               p[i] = the_point;
+               i++;
+       }
+
+       return p;
+}
+
+bool ctx::inactive_detector_classificator_kmeans::annotate_data(std::vector<app_t> *apps_with_weights, point_s *c)
+{
+       int i=0, max_group=-1;
+
+       for(std::vector<app_t>::iterator apps_with_weight = apps_with_weights->begin();
+               apps_with_weight != apps_with_weights->end(); apps_with_weight++)
+       {
+               apps_with_weight->is_active = c[i].group;
+               i++;
+               max_group = c[i].group > max_group ? c[i].group : max_group;
+       }
+
+       return max_group == APP_INACTIVE_DETECTOR_KMEANS_CLUSTER_COUNT;
+}
+
+double ctx::inactive_detector_classificator_kmeans::distance_to(point_s *p_from,
+       point_s *p_to)
+{
+       double x = p_from->x - p_to->x, y = p_from->y - p_to->y;
+       return x*x + y*y;
+}
+
+int ctx::inactive_detector_classificator_kmeans::nearest(point_s *pt,
+       point_s *centers,
+       int cluster_number,
+       double *distance)
+{
+       int i;
+       int min_i = pt->group;
+       point_s *c;
+
+       double d;
+       double min_d = HUGE_VAL;
+
+       for_n {
+               if (min_d >(d = distance_to(c, pt))) {
+                       min_d = d; min_i = i;
+               }
+       }
+
+       if (distance) *distance = min_d;
+       return min_i;
+}
+
+void ctx::inactive_detector_classificator_kmeans::kpp(point_s *points, int length, point_s *centers, int cluster_number)
+{
+       int j;
+       int n_cluster;
+       double sum;
+       double *d = new double[length];
+
+       point_s *p;
+       centers[0] = points[rand() % length];
+       for (n_cluster = 1; n_cluster < cluster_number; n_cluster++) {
+               sum = 0;
+               for_len{
+                       nearest(p, centers, n_cluster, d + j);
+                       sum += d[j];
+               }
+               sum = randomf(sum);
+               for_len{
+                       if ((sum -= d[j]) > 0) continue;
+                       centers[n_cluster] = points[j];
+                       break;
+               }
+       }
+       for_len p->group = nearest(p, centers, n_cluster, 0);
+
+       delete d;
+}
+
+point_s *ctx::inactive_detector_classificator_kmeans::lloyd(point_s *points, int length, int cluster_number)
+{
+       int i, j, min_i;
+       int changed;
+
+       point_s *centers = new point_s;
+       point_s *p, *c;
+
+       /* k++ init */
+       kpp(points, length, centers, cluster_number);
+
+       do {
+               /* group element for centroids are used as counters */
+               for_n{ c->group = 0; c->x = c->y = 0; }
+                       for_len{
+                               c = centers + p->group;
+                               c->group++;
+                               c->x += p->x; c->y += p->y;
+                       }
+               for_n{ c->x /= c->group; c->y /= c->group; }
+
+               changed = 0;
+               /* find closest centroid of each point */
+               for_len{
+                       min_i = nearest(p, centers, cluster_number, 0);
+                       if (min_i != p->group) {
+                               changed++;
+                               p->group = min_i;
+                       }
+               }
+       } while (changed > (length >> 10)); /* stop when 99.9% of points are good */
+
+       for_n{ c->group = i; }
+
+       return centers;
+}
+
+int ctx::inactive_detector_classificator_kmeans::classify(std::vector<app_t> *apps_with_weights)
+{
+       //array of generated points
+       point_s *v = reproject_to_2d(apps_with_weights);
+       //mark cluster for each point, output centers
+       point_s *c = lloyd(v, apps_with_weights->size(), APP_INACTIVE_DETECTOR_KMEANS_CLUSTER_COUNT);
+       //append the result to input data
+       bool classification_is_success = annotate_data(apps_with_weights, c);
+
+       return classification_is_success ? ERR_NONE : ERR_OPERATION_FAILED;
+}
diff --git a/src/app-stats/app_inactive_detector/InactiveDetectorClassificatorKmeans.h b/src/app-stats/app_inactive_detector/InactiveDetectorClassificatorKmeans.h
new file mode 100644 (file)
index 0000000..adc1fe8
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __CONTEXT_INACTIVE_DETECTOR_CLASSIFICATOR_KMEANS_H__
+#define __CONTEXT_INACTIVE_DETECTOR_CLASSIFICATOR_KMEANS_H__
+
+#include <vector>
+#include "InactiveDetectorClassificatorKmeansTypes.h"
+#include <Json.h>
+
+namespace ctx {
+
+       #define for_n for (c = centers, i = 0; i < cluster_number; i++, c++)
+       #define for_len for (j = 0, p = points; j < length; j++, p++)
+
+       class inactive_detector_classificator_kmeans
+       {
+               private:
+                       double randomf(double x);
+                       double glide_function(double x);
+                       point_s *reproject_to_2d(std::vector<app_t> *apps_with_weights);
+                       bool annotate_data(std::vector<app_t> *apps_with_weights, point_s *c);
+
+                       double distance_to(point_s *p_from, point_s *p_to);
+                       int nearest(point_s *pt, point_s *centers, int cluster_number, double *distance);
+                       void kpp(point_s *points, int length, point_s *centers, int centers_count);
+                       point_s *lloyd(point_s *points, int length, int cluster_number);
+               public:
+                       inactive_detector_classificator_kmeans();
+                       ~inactive_detector_classificator_kmeans();
+
+                       int classify(std::vector<app_t> *apps_with_weights);
+       };      /* class inactive_detector_classificator_kmeans */
+}      /* namespace ctx */
+
+#endif /* __CONTEXT_INACTIVE_DETECTOR_CLASSIFICATOR_KMEANS_H__ */
diff --git a/src/app-stats/app_inactive_detector/InactiveDetectorClassificatorKmeansTypes.h b/src/app-stats/app_inactive_detector/InactiveDetectorClassificatorKmeansTypes.h
new file mode 100644 (file)
index 0000000..8aa7270
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __CONTEXT_APP_INACTIVE_DETECTOR_CLASSIFICATOR_KMEANS_TYPES__
+#define __CONTEXT_APP_INACTIVE_DETECTOR_CLASSIFICATOR_KMEANS_TYPES__
+
+#define APP_INACTIVE_DETECTOR_KMEANS_CLUSTER_COUNT 2
+
+typedef struct {
+       std::string origin_id;
+       double x;
+       double y;
+       int group;
+} point_s;
+
+#endif
\ No newline at end of file
diff --git a/src/app-stats/app_inactive_detector/InactiveDetectorStorage.cpp b/src/app-stats/app_inactive_detector/InactiveDetectorStorage.cpp
new file mode 100644 (file)
index 0000000..052c3fe
--- /dev/null
@@ -0,0 +1,248 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <sstream>
+#include <ctime>
+#include <string>
+#include <memory>
+#include <Types.h>
+#include "InactiveDetector.h"
+#include "InactiveDetectorStorage.h"
+#include "InactiveDetectorStorageQueries.h"
+#include "InactiveDetectorClassificator.h"
+#include "AppInactiveDetectorTypes.h"
+
+/*int ctx::inactive_detector_storage::create_table()
+{
+       bool ret = __dbManager.createTable(0, WIFI_TABLE_NAME, WIFI_CREATE_TABLE_COLUMNS, NULL, NULL);
+       _D("Table Creation Request: %s", ret ? "SUCCESS" : "FAIL");
+       return ret;
+}*/
+
+
+
+// expected Json format example: {timeframe: 1; is_active: 0}
+int ctx::inactive_detector_storage::read(
+                       const char *subject,
+                       ctx::Json filter)
+{
+       std::string query;
+       query = query_get_apps(subject, filter);
+
+       IF_FAIL_RETURN(!query.empty(), ERR_OPERATION_FAILED);
+
+       bool ret = __dbManager.execute(
+               STR_EQ(subject, APP_INACTIVE_SUBJ_GET_APPS_INACTIVE) ?
+                       APP_INACTIVE_QUERY_ID_GET_APPS_INACTIVE :
+                       APP_INACTIVE_QUERY_ID_GET_APPS_ACTIVE,
+               query.c_str(),
+               this);
+
+       IF_FAIL_RETURN(ret, ERR_OPERATION_FAILED);
+
+       return ERR_NONE;
+}
+
+std::string ctx::inactive_detector_storage::query_get_apps(const char *subject, ctx::Json filter)
+{
+       double timeframe;
+       int is_active;
+
+       std::string query(GET_APP_INFO_INACTIVE_QUERY);
+       std::string placeholder_timeframe(APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMEFRAME);
+       std::string placeholder_is_active(APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_CLUSTER);
+
+       filter.get(NULL, APP_INACTIVE_DETECTOR_DATA_TIMEFRAME, &timeframe);
+       filter.get(NULL, APP_INACTIVE_DETECTOR_DATA_ISACTIVE, &is_active);
+
+       std::stringstream timeframe_stream;
+       timeframe_stream << timeframe;
+
+       std::stringstream is_active_stream;
+       is_active_stream << is_active;
+
+       inject_params(query, placeholder_timeframe, timeframe_stream.str());
+       inject_params(query, placeholder_is_active, is_active_stream.str());
+
+       return query;
+}
+
+std::string ctx::inactive_detector_storage::query_update_apps(std::vector<app_t> *apps_with_weights)
+{
+       std::string delete_query(DELETE_APP_ACTIVITY_CLASSIFIED_BY_TIMEFRAME);
+       std::string insert_query(INSERT_APP_ACTIVITY_CLASSIFIED);
+       std::string placeholder_timeframe(APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMEFRAME);
+       std::string placeholder_values(APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_VALUES);
+       std::string placeholder_is_active(APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_CLUSTER);
+
+       std::stringstream timeframe_stream;
+       timeframe_stream << apps_with_weights->front().timeframe;
+
+       inject_params(delete_query, placeholder_timeframe, timeframe_stream.str());
+       inject_params(insert_query, placeholder_values, subquery_form_values(apps_with_weights));
+
+       std::stringstream result;
+       result << delete_query << insert_query;
+       return result.str();
+}
+
+// foreach app_info id+cluster -> select for insert
+std::string ctx::inactive_detector_storage::subquery_form_values(std::vector<app_t> *apps_with_weights)
+{
+       std::stringstream select_elements;
+
+       for(std::vector<app_t>::iterator row = apps_with_weights->begin();
+                       row != apps_with_weights->end(); row++)
+       {
+               //SELECT 1 as is_active, 1 as timeframe,  3964 as context_app_info_id
+               std::stringstream select_element;
+               select_element << " SELECT " << row->is_active << " as ";
+               select_element << APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_IS_ACTIVE;
+               select_element << ", " << row->timeframe << " as ";
+               select_element << APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_TIMEFRAME;
+               select_element << ", " << row->id << " as ";
+               select_element << APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_CONTEXT_APP_INFO_ID;
+
+               if ((row != apps_with_weights->end()) && (row == --apps_with_weights->end()))
+                       select_element << " UNION ";
+
+               select_elements << select_element;
+       }
+
+       return select_elements.str();
+}
+
+void ctx::inactive_detector_storage::json_to_object(std::vector<Json>& records,
+       std::vector<app_t> *apps_with_weights, bool result_mode)
+{
+       for(std::vector<Json>::iterator row = records.begin();
+               row != records.end(); row++)
+       {
+               app_t app_with_weight;
+               if (result_mode)
+               {
+                       row->get(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME,
+                               &app_with_weight.package_name);
+                       row->get(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_NODISPLAY,
+                               &app_with_weight.is_nodisplay);
+                       row->get(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ENABLED,
+                               &app_with_weight.is_enabled);
+                       row->get(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ATBOOT,
+                               &app_with_weight.is_atboot);
+                       row->get(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_PRELOADED,
+                               &app_with_weight.is_preloaded);
+                       row->get(NULL, APP_INACTIVE_DETECTOR_VIRTUAL_COLUMN_WEIGHT,
+                               &app_with_weight.weight);
+               }
+               else
+               {
+                       row->get(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_ID,
+                               &app_with_weight.id);
+                       row->get(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_TIMESTAMP,
+                               &app_with_weight.timestamp);
+                       row->get(NULL, APP_INACTIVE_DETECTOR_VIRTUAL_COLUMN_WEIGHT,
+                               &app_with_weight.weight);
+                       row->get(NULL, APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_IS_ACTIVE,
+                               &app_with_weight.is_active);
+               }
+
+               apps_with_weights->push_back(app_with_weight);
+       }
+}
+
+void ctx::inactive_detector_storage::onExecuted(unsigned int query_id,
+       int error,
+       std::vector<Json>& records)
+{
+       if (error != ERR_NONE) {
+               _E("query_id:%d, error:%d", query_id, error);
+               return;
+       }
+
+       std::vector<app_t> *apps_with_weights = NULL;
+       if (query_id == APP_INACTIVE_QUERY_ID_GET_APPS_INACTIVE ||
+               query_id == APP_INACTIVE_QUERY_ID_GET_APPS_ACTIVE)
+       {
+               json_to_object(records, apps_with_weights, TRUE);
+       }
+       else if (query_id == APP_INACTIVE_QUERY_ID_GET_APPS_WEIGHT) {
+
+               json_to_object(records, apps_with_weights, FALSE);
+
+               if (apps_with_weights->size() > 0) {
+                       inactive_detector_classificator i_detector_classificator;
+                       int _error = i_detector_classificator.classify(apps_with_weights);
+
+                       if(_error == ERR_NONE)
+                       {
+                               std::string query;
+                               query = query_update_apps(apps_with_weights);
+                               bool ret = __dbManager.execute(APP_INACTIVE_QUERY_ID_UPDATE_CLUSTERS,
+                                       query.c_str(),
+                                       this);
+                               _D("load visits execute query result: %s", ret ? "SUCCESS" : "FAIL");
+                       }
+                       else
+                       {
+                               _E("classification query_id:%d, error:%d",
+                                       query_id, _error);
+                       }
+               }
+       }
+       else if (query_id == APP_INACTIVE_QUERY_ID_UPDATE_CLUSTERS) {
+               _D("UPDATE_CLUSTERS execute query id: %d", query_id);
+       }
+       else {
+               _E("unknown query_id:%d", query_id);
+       }
+}
+
+void ctx::inactive_detector_storage::inject_params(std::string& str, const std::string& from, const std::string& to)
+{
+       if(from.empty())
+               return;
+       size_t start_pos = 0;
+       while((start_pos = str.find(from, start_pos)) != std::string::npos) {
+               str.replace(start_pos, from.length(), to);
+               start_pos += to.length();
+       }
+}
+
+// normalzie weights
+int ctx::inactive_detector_storage::update_ranks()
+{
+       return ERR_NONE;
+}
+
+int ctx::inactive_detector_storage::get_apps_info_w_weights(
+               double timestamp_from)
+{
+       std::stringstream timestamp_stream;
+       timestamp_stream << timestamp_from;
+       std::string timestamp_str = timestamp_stream.str();
+
+       std::string query(GET_APP_INFO_W_WEIGHT_QUERY);
+       std::string placeholder(APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMESTAMP);
+
+       inject_params(query, placeholder, timestamp_str);
+
+       bool ret = __dbManager.execute(APP_INACTIVE_QUERY_ID_GET_APPS_WEIGHT,
+               query.c_str(),
+               this);
+       _D("load visits execute query result: %s", ret ? "SUCCESS" : "FAIL");
+
+       return ERR_NONE ;
+}
diff --git a/src/app-stats/app_inactive_detector/InactiveDetectorStorage.h b/src/app-stats/app_inactive_detector/InactiveDetectorStorage.h
new file mode 100644 (file)
index 0000000..0eab066
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __CONTEXT_INACTIVE_DETECTOR_STORAGE_H__
+#define __CONTEXT_INACTIVE_DETECTOR_STORAGE_H__
+
+#include <vector>
+#include "AppInactiveDetectorTypes.h"
+#include <Json.h>
+#include <DatabaseManager.h>
+
+namespace ctx {
+
+       class inactive_detector_storage : public IDatabaseListener
+       {
+               private:
+                       //int type;  //TODO: enum
+                       void inject_params(std::string& str,
+                               const std::string& from,
+                               const std::string& to);
+
+                       void json_to_object(std::vector<Json>& records,
+                               std::vector<app_t> *apps_with_weights, bool result_mode);
+
+                       std::string query_get_apps(const char *subject,
+                               ctx::Json filter);
+
+                       std::string query_update_apps(std::vector<app_t> *apps_with_weights);
+
+                       std::string subquery_form_values(std::vector<app_t> *apps_with_weights);
+
+                       void onTableCreated(unsigned int query_id, int error) {}
+                       void onInserted(unsigned int query_id, int error, int64_t row_id) {}
+                       void onExecuted(unsigned int query_id, int error, std::vector<Json>& records);
+
+                       DatabaseManager __dbManager;
+
+               public:
+                       inactive_detector_storage();
+                       ~inactive_detector_storage();
+
+                       int read(const char *subject,
+                               ctx::Json filter);
+
+                       int update_ranks();
+                       int get_apps_info_w_weights(double timestamp_from);
+       };      /* class inactive_detector_storage */
+
+}      /* namespace ctx */
+
+#endif /* __CONTEXT_INACTIVE_DETECTOR_STORAGE_H__ */
diff --git a/src/app-stats/app_inactive_detector/InactiveDetectorStorageQueries.h b/src/app-stats/app_inactive_detector/InactiveDetectorStorageQueries.h
new file mode 100644 (file)
index 0000000..4ef20d3
--- /dev/null
@@ -0,0 +1,192 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __CONTEXT_INACTIVE_DETECTOR_STORAGE_QUERIES_H__
+#define __CONTEXT_INACTIVE_DETECTOR_STORAGE_QUERIES_H__
+
+#include <vector>
+#include "AppInactiveDetectorTypes.h"
+
+/*
+
+--1 calculate weights
+SELECT
+       app_info._id,
+       app_info.package_name,
+       app_info.is_nodisplay,
+       app_info.is_enabled,
+       app_info.is_atboot,
+       app_info.is_preloaded,
+       app_info.timestamp,
+       
+       app_hist_g.weight as weight
+FROM
+       context_app_info app_info
+
+INNER JOIN
+
+       (SELECT
+               distinct package_name ,
+                       IFNULL((select count(package_name) from context_app_launch_log
+                               where package_name == app_hist.package_name  AND timestamp> 8640412900), 0 )
+                               *
+                       IFNULL((select sum(duration) from  context_app_launch_log       
+                               where package_name == app_hist.package_name AND timestamp> 8640412900) , 0)
+               as weight
+
+       FROM context_app_launch_log app_hist
+)app_hist_g
+
+ON app_hist_g.package_name
+=
+app_info.package_name
+
+ORDER BY app_hist_g.weight
+
+*/
+
+#define GET_APP_INFO_W_WEIGHT_QUERY "SELECT "\
+       " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS  "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_ID ", "\
+       " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS  "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME ", "\
+       " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS  "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_TYPE ", "\
+       " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS  "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_NODISPLAY ", "\
+       " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS  "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ENABLED ", "\
+       " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS  "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ATBOOT ", "\
+       " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS  "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_PRELOADED ", "\
+       " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS  "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_TIMESTAMP ", "\
+       ""\
+       " " APP_INACTIVE_DETECTOR_VIRTUAL_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_VIRTUAL_COLUMN_WEIGHT \
+       ""\
+       " FROM " APP_INACTIVE_DETECTOR_APPINFO_TABLE " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS \
+       ""\
+       " INNER JOIN " \
+       "       (SELECT "\
+               " DISTINCT " APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME "," \
+                       " IFNULL((SELECT COUNT(" APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME ")" \
+                               " FROM " APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_TABLE \
+                                       " WHERE " APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME "==" APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME \
+                                       " AND " \
+                                       " " APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_TIMESTAMP " >= " APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMESTAMP \
+                       "), 0) " \
+                       " * " \
+                       " IFNULL((SELECT SUM(" APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_DURATION ")" \
+                               " FROM " APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_TABLE \
+                                       " WHERE " APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME "==" APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME \
+                                       " AND " \
+                                       " " APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_TIMESTAMP " >= " APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMESTAMP \
+                                       ""\
+                       "), 0) " \
+                       " as " APP_INACTIVE_DETECTOR_VIRTUAL_COLUMN_WEIGHT \
+               " FROM " APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_TABLE " " APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_TABLE_ALIAS \
+               ") " APP_INACTIVE_DETECTOR_VIRTUAL_TABLE_ALIAS \
+       " ON " APP_INACTIVE_DETECTOR_VIRTUAL_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME \
+       " = " \
+       " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME \
+       " ORDER BY " APP_INACTIVE_DETECTOR_VIRTUAL_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_VIRTUAL_COLUMN_WEIGHT
+
+/*
+--2 select inner join context_app_info
+SELECT
+       app_info.package_name,
+       app_info.is_nodisplay,
+       app_info.is_enabled,
+       app_info.is_atboot,
+       app_info.is_preloaded,
+
+       activity_classified.activity_rate
+
+FROM
+       context_activity_classified activity_classified
+INNER JOIN
+       context_app_info app_info
+ON activity_classified.context_app_info_id = app_info._id
+
+WHERE
+       activity_classified.is_active = 1
+       AND
+       activity_classified.timeframe = 1
+*/
+
+#define GET_APP_INFO_INACTIVE_QUERY "SELECT "\
+       " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS  "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_ID ", "\
+       " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS  "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME ", "\
+       " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS  "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_NODISPLAY ", "\
+       " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS  "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ENABLED ", "\
+       " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS  "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ATBOOT ", "\
+       " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS  "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_PRELOADED ", "\
+       " "\
+       " " APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_ACTIVITY_RATE " "\
+       " FROM "\
+       " " APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE " " APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE_ALIAS " "\
+       " INNER JOIN "\
+       " " APP_INACTIVE_DETECTOR_APPINFO_TABLE " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS " "\
+       " ON " APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_CONTEXT_APP_INFO_ID ""\
+               " = " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_ID " "\
+       " WHERE "\
+       APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_IS_ACTIVE ""\
+               " = " APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_CLUSTER ""\
+       " AND "\
+       " " APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_TIMEFRAME ""\
+               " = " APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMEFRAME ""
+
+/*
+--3 update ranks and clusters for each timeframe: delete all for each time frame, add new calculations for apps
+DELETE FROM 
+       context_activity_classified 
+WHERE 
+       timeframe = 1
+*/
+
+#define DELETE_APP_ACTIVITY_CLASSIFIED_BY_TIMEFRAME "DELETE FROM "\
+       APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE \
+       " WHERE "\
+       " timeframe = " APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMEFRAME
+
+
+/*INSERT INTO 
+       context_activity_classified  
+       (is_active, 
+       timeframe, 
+       context_app_info_id)
+SELECT 
+       is_active, 
+       timeframe,
+       context_app_info_id
+FROM  --make loop
+       (
+       SELECT 1 as is_active, 1 as timeframe,  3964 as context_app_info_id
+       UNION 
+       SELECT 0 as is_active, 1 as timeframe,  3964 as context_app_info_id 
+       ) q
+*/
+
+#define INSERT_APP_ACTIVITY_CLASSIFIED " INSERT INTO "\
+       APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE \
+       "( " APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_IS_ACTIVE ", "\
+       APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_TIMEFRAME ", "\
+       APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_CONTEXT_APP_INFO_ID ")" \
+"SELECT " \
+       APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_IS_ACTIVE "," \
+       APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_TIMEFRAME ", "\
+       APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_CONTEXT_APP_INFO_ID \
+"FROM"\
+       "(" \
+               APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_VALUES \
+       ") q"
+
+
+
+#endif /* __CONTEXT_INACTIVE_DETECTOR_STORAGE_QUERIES_H__ */
diff --git a/src/app-stats/app_inactive_detector/InactiveDetectorWeight.cpp b/src/app-stats/app_inactive_detector/InactiveDetectorWeight.cpp
new file mode 100644 (file)
index 0000000..202301b
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <Types.h>
+#include "InactiveDetectorWeight.h"
+#include "InactiveDetectorStorage.h"
+
+int ctx::inactive_detector_weight::request_weights(
+                       double timestamp_from)
+{
+       inactive_detector_storage ids;
+       // query the database for the result
+       int error = ids.get_apps_info_w_weights(timestamp_from);
+
+       return error;
+}
diff --git a/src/app-stats/app_inactive_detector/InactiveDetectorWeight.h b/src/app-stats/app_inactive_detector/InactiveDetectorWeight.h
new file mode 100644 (file)
index 0000000..8e87473
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __CONTEXT_INACTIVE_DETECTOR_WEIGHT_H__
+#define __CONTEXT_INACTIVE_DETECTOR_WEIGHT_H__
+
+// #include <string>
+// #include <sstream>
+
+namespace ctx {
+
+       class inactive_detector_weight {
+               public:
+                       inactive_detector_weight() {};
+                       ~inactive_detector_weight() {};
+                       int request_weights(double timestamp_from);// {};
+       };      /* class inactive_detector_weight */
+
+}      /* namespace ctx */
+
+#endif /* __CONTEXT_INACTIVE_DETECTOR_WEIGHT_H__ */
\ No newline at end of file
diff --git a/src/call/Call.cpp b/src/call/Call.cpp
new file mode 100644 (file)
index 0000000..a19a2b9
--- /dev/null
@@ -0,0 +1,386 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "Call.h"
+
+#define TELEPHONY_NOTI_ID_CNT 8
+
+using namespace ctx;
+
+static bool __telephonyInitialized = false;
+static telephony_noti_e __callNotiIds[] =
+{
+   TELEPHONY_NOTI_VOICE_CALL_STATUS_IDLE,
+   TELEPHONY_NOTI_VOICE_CALL_STATUS_ACTIVE,
+//   TELEPHONY_NOTI_VOICE_CALL_STATUS_HELD,
+//   TELEPHONY_NOTI_VOICE_CALL_STATUS_DIALING,
+   TELEPHONY_NOTI_VOICE_CALL_STATUS_ALERTING,
+   TELEPHONY_NOTI_VOICE_CALL_STATUS_INCOMING,
+   TELEPHONY_NOTI_VIDEO_CALL_STATUS_IDLE,
+   TELEPHONY_NOTI_VIDEO_CALL_STATUS_ACTIVE,
+//   TELEPHONY_NOTI_VIDEO_CALL_STATUS_DIALING,
+   TELEPHONY_NOTI_VIDEO_CALL_STATUS_ALERTING,
+   TELEPHONY_NOTI_VIDEO_CALL_STATUS_INCOMING,
+};
+static Json __latest;
+
+SocialStatusCall::SocialStatusCall() :
+       DeviceProviderBase(SOCIAL_ST_SUBJ_CALL)
+{
+       __handleList.count = 0;
+       __handleList.handle = NULL;
+}
+
+SocialStatusCall::~SocialStatusCall()
+{
+}
+
+bool SocialStatusCall::isSupported()
+{
+       return getSystemInfoBool("tizen.org/feature/network.telephony");
+}
+
+void SocialStatusCall::submitTriggerItem()
+{
+       registerTriggerItem(OPS_SUBSCRIBE | OPS_READ,
+                       "{"
+                               "\"Medium\":{\"type\":\"string\",\"values\":[\"Voice\",\"Video\"]},"
+                               "\"State\":{\"type\":\"string\",\"values\":[\"Idle\",\"Connecting\",\"Connected\"]},"
+                               "\"Address\":{\"type\":\"string\"}"
+                       "}",
+                       NULL);
+       /* TODO remove Connecting, Connected */
+}
+
+void SocialStatusCall::__updateCb(telephony_h handle, telephony_noti_e notiId, void *data, void *userData)
+{
+       SocialStatusCall *instance = static_cast<SocialStatusCall*>(userData);
+       instance->__handleUpdate(handle, notiId, data);
+}
+
+void SocialStatusCall::__handleUpdate(telephony_h handle, telephony_noti_e notiId, void* id)
+{
+       Json data;
+       unsigned int count;
+       telephony_call_h *callList;
+
+       // Call state
+       switch (notiId) {
+       case TELEPHONY_NOTI_VOICE_CALL_STATUS_IDLE:
+       case TELEPHONY_NOTI_VIDEO_CALL_STATUS_IDLE:
+               data.set(NULL, SOCIAL_ST_STATE, SOCIAL_ST_IDLE);
+               break;
+       case TELEPHONY_NOTI_VOICE_CALL_STATUS_ACTIVE:
+       case TELEPHONY_NOTI_VIDEO_CALL_STATUS_ACTIVE:
+               data.set(NULL, SOCIAL_ST_STATE, SOCIAL_ST_ACTIVE);
+               break;
+       case TELEPHONY_NOTI_VOICE_CALL_STATUS_ALERTING:
+       case TELEPHONY_NOTI_VIDEO_CALL_STATUS_ALERTING:
+               data.set(NULL, SOCIAL_ST_STATE, SOCIAL_ST_ALERTING);
+               break;
+       case TELEPHONY_NOTI_VOICE_CALL_STATUS_INCOMING:
+       case TELEPHONY_NOTI_VIDEO_CALL_STATUS_INCOMING:
+               data.set(NULL, SOCIAL_ST_STATE, SOCIAL_ST_INCOMING);
+               break;
+/*     // Ignore below cases
+       case TELEPHONY_NOTI_VOICE_CALL_STATUS_HELD:
+       case TELEPHONY_NOTI_VOICE_CALL_STATUS_DIALING:
+       case TELEPHONY_NOTI_VIDEO_CALL_STATUS_DIALING:*/
+       default:
+               _E("Unkown noti id: %d", notiId);
+               return;
+       }
+
+       // Call type
+       switch (notiId) {
+       case TELEPHONY_NOTI_VOICE_CALL_STATUS_IDLE:
+       case TELEPHONY_NOTI_VOICE_CALL_STATUS_ACTIVE:
+       case TELEPHONY_NOTI_VOICE_CALL_STATUS_ALERTING:
+       case TELEPHONY_NOTI_VOICE_CALL_STATUS_INCOMING:
+               data.set(NULL, SOCIAL_ST_TYPE, SOCIAL_ST_VOICE);
+               break;
+       case TELEPHONY_NOTI_VIDEO_CALL_STATUS_IDLE:
+       case TELEPHONY_NOTI_VIDEO_CALL_STATUS_ACTIVE:
+       case TELEPHONY_NOTI_VIDEO_CALL_STATUS_ALERTING:
+       case TELEPHONY_NOTI_VIDEO_CALL_STATUS_INCOMING:
+               data.set(NULL, SOCIAL_ST_TYPE, SOCIAL_ST_VIDEO);
+               break;
+/*     // Ignore below cases
+       case TELEPHONY_NOTI_VOICE_CALL_STATUS_HELD:
+       case TELEPHONY_NOTI_VOICE_CALL_STATUS_DIALING:
+       case TELEPHONY_NOTI_VIDEO_CALL_STATUS_DIALING:*/
+       default:
+               _E("Unkown noti id: %d", notiId);
+               return;
+       }
+
+       int err = telephony_call_get_call_list(handle, &count, &callList);
+       IF_FAIL_VOID_TAG(err == TELEPHONY_ERROR_NONE, _E, "Getting call list failed");
+
+       unsigned int callId = *static_cast<unsigned int *>(id);
+       for (unsigned int i = 0; i < count; i++) {
+               unsigned int tempId;
+               // Handle id
+               if (!__getCallHandleId(callList[i], tempId)) {
+                       continue;
+               }
+
+               if (callId != tempId) {
+                       continue;
+               }
+
+               // Address
+               std::string address;
+               if (__getCallAddress(callList[i], address)) {
+                       data.set(NULL, SOCIAL_ST_ADDRESS, address);
+                       break;
+               }
+       }
+
+       if (__latest != data) {
+               publish(NULL, ERR_NONE, data);
+               __latest = data.str();
+       }
+       telephony_call_release_call_list(count, &callList);
+}
+
+bool SocialStatusCall::__initTelephony()
+{
+       IF_FAIL_RETURN(!__telephonyInitialized, true);
+
+       int err = telephony_init(&__handleList);
+       IF_FAIL_RETURN_TAG(err == TELEPHONY_ERROR_NONE, false, _E, "Initialization failed");
+
+       __telephonyInitialized = true;
+       return true;
+}
+
+void SocialStatusCall::__releaseTelephony()
+{
+       IF_FAIL_VOID(__telephonyInitialized);
+
+       telephony_deinit(&__handleList);
+
+       __telephonyInitialized = false;
+}
+
+bool SocialStatusCall::__setCallback()
+{
+       /* TODO: Consider dual-sim devices */
+       IF_FAIL_RETURN_TAG(__initTelephony(), false, _E, "Initialization failed");
+
+       int err;
+
+       for (unsigned int i = 0; i < __handleList.count; i++) {
+               for (unsigned int j = 0; j < TELEPHONY_NOTI_ID_CNT; j++) {
+                       err = telephony_set_noti_cb(__handleList.handle[i], __callNotiIds[j], __updateCb, this);
+                       IF_FAIL_CATCH(err == TELEPHONY_ERROR_NONE);
+               }
+       }
+
+       return true;
+
+CATCH:
+       _E("Initialization failed");
+       __releaseTelephony();
+       return false;
+}
+
+void SocialStatusCall::__unsetCallback()
+{
+       for (unsigned int i = 0; i < __handleList.count; i++) {
+               for (unsigned int j = 0; j < TELEPHONY_NOTI_ID_CNT; j++) {
+                       telephony_unset_noti_cb(__handleList.handle[i], __callNotiIds[j]);
+               }
+       }
+
+       __releaseTelephony();
+}
+
+bool SocialStatusCall::__getCallState(telephony_call_h& handle, std::string& state)
+{
+       state.clear();
+
+       telephony_call_status_e st;
+       int err = telephony_call_get_status(handle, &st);
+       IF_FAIL_RETURN_TAG(err == TELEPHONY_ERROR_NONE, false, _E, "Getting state failed");
+
+       switch (st) {
+       case TELEPHONY_CALL_STATUS_ACTIVE:
+               state = SOCIAL_ST_ACTIVE;
+               break;
+       case TELEPHONY_CALL_STATUS_HELD:
+               state = SOCIAL_ST_HELD;
+               break;
+       case TELEPHONY_CALL_STATUS_DIALING:
+               state = SOCIAL_ST_DIALING;
+               break;
+       case TELEPHONY_CALL_STATUS_ALERTING:
+               state = SOCIAL_ST_ALERTING;
+               break;
+       case TELEPHONY_CALL_STATUS_INCOMING:
+               state = SOCIAL_ST_INCOMING;
+               break;
+       default:
+               state = SOCIAL_ST_IDLE;
+       }
+
+       IF_FAIL_RETURN_TAG(!state.empty(), false, _W, "State is empty");
+
+       return true;
+}
+
+bool SocialStatusCall::__getCallType(telephony_call_h& handle, std::string& type)
+{
+       type.clear();
+
+       telephony_call_type_e t;
+       int err = telephony_call_get_type(handle, &t);
+       IF_FAIL_RETURN_TAG(err == TELEPHONY_ERROR_NONE, false, _E, "Getting type failed");
+
+       switch (t) {
+       case TELEPHONY_CALL_TYPE_VOICE:
+               type = SOCIAL_ST_VOICE;
+               break;
+       case TELEPHONY_CALL_TYPE_VIDEO:
+               type = SOCIAL_ST_VIDEO;
+               break;
+       default:
+               _E("Unknown type: %d", t);
+               return false;
+       }
+
+       IF_FAIL_RETURN_TAG(!type.empty(), false, _W, "Type is empty");
+
+       return true;
+}
+
+bool SocialStatusCall::__getCallAddress(telephony_call_h& handle, std::string& address)
+{
+       address.clear();
+
+       char* number = NULL;
+       int err = telephony_call_get_number(handle, &number);
+       IF_FAIL_RETURN_TAG(err == TELEPHONY_ERROR_NONE, false, _E, "Getting address failed");
+
+       if (number) {
+               address = number;
+               g_free(number);
+               number = NULL;
+       }
+
+       IF_FAIL_RETURN_TAG(!address.empty(), false, _W, "Address is empty");
+
+       return true;
+}
+
+bool SocialStatusCall::__getCallHandleId(telephony_call_h& handle, unsigned int& id)
+{
+       int err = telephony_call_get_handle_id(handle, &id);
+       IF_FAIL_RETURN_TAG(err == TELEPHONY_ERROR_NONE, false, _E, "Getting handle id failed");
+
+       return true;
+}
+
+int SocialStatusCall::subscribe()
+{
+       bool ret = __setCallback();
+       IF_FAIL_RETURN(ret, ERR_OPERATION_FAILED);
+       return ERR_NONE;
+}
+
+int SocialStatusCall::unsubscribe()
+{
+       __unsetCallback();
+       return ERR_NONE;
+}
+
+bool SocialStatusCall::__readCurrentStatus(telephony_h& handle, Json* data)
+{
+       unsigned int count = 0;
+       telephony_call_h *callList = NULL;
+       telephony_call_get_call_list(handle, &count, &callList);
+
+       // Default data
+       data->set(NULL, SOCIAL_ST_STATE, SOCIAL_ST_IDLE);
+
+       // Held & Dialing are ignored
+       for (unsigned int i = 0; i < count; i++) {
+               // Call state
+               std::string state;
+               if (__getCallState(callList[i], state)) {
+                       // Skip Held & Dialing
+                       if (state.compare(SOCIAL_ST_HELD) == 0 || state.compare(SOCIAL_ST_DIALING) == 0)
+                               continue;
+
+                       data->set(NULL, SOCIAL_ST_STATE, state);
+               }
+
+               // Call type
+               std::string type;
+               if (__getCallType(callList[i], type)) {
+                       data->set(NULL, SOCIAL_ST_MEDIUM, type);
+               }
+
+               // Address
+               std::string address;
+               if (__getCallAddress(callList[i], address)) {
+                       data->set(NULL, SOCIAL_ST_ADDRESS, address);
+               }
+
+               if (state == SOCIAL_ST_ACTIVE) {
+                       break;
+               }
+       }
+
+       telephony_call_release_call_list(count, &callList);
+       return true;
+}
+
+int SocialStatusCall::read()
+{
+       bool temporaryHandle = false;
+       if (!__telephonyInitialized) {
+               IF_FAIL_RETURN(__initTelephony(), ERR_OPERATION_FAILED);
+               temporaryHandle = true;
+       }
+
+       bool ret = true;
+       Json data;
+       data.set(NULL, SOCIAL_ST_STATE, SOCIAL_ST_IDLE);
+
+       for (unsigned int i = 0; i < __handleList.count; i++) {
+               telephony_sim_state_e state;
+               int err = telephony_sim_get_state(__handleList.handle[i], &state);
+               IF_FAIL_RETURN_TAG(err == TELEPHONY_ERROR_NONE, ERR_OPERATION_FAILED, _E, "Getting SIM status failed");
+
+               if (state != TELEPHONY_SIM_STATE_AVAILABLE)
+                       continue;
+
+               ret = __readCurrentStatus(__handleList.handle[i], &data);
+               break;
+       }
+
+       if (temporaryHandle)
+               __releaseTelephony();
+
+       if (ret) {
+               replyToRead(NULL, ERR_NONE, data);
+               return ERR_NONE;
+       }
+
+       return ERR_OPERATION_FAILED;
+}
diff --git a/src/call/Call.h b/src/call/Call.h
new file mode 100644 (file)
index 0000000..a53276f
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_SOCIAL_STATUS_CALL_H_
+#define _CONTEXT_SOCIAL_STATUS_CALL_H_
+
+#include <telephony.h>
+#include "../shared/SocialTypes.h"
+#include "../shared/DeviceProviderBase.h"
+
+namespace ctx {
+
+       class SocialStatusCall : public DeviceProviderBase {
+       public:
+               SocialStatusCall();
+               ~SocialStatusCall();
+
+               int subscribe();
+               int unsubscribe();
+               int read();
+
+               bool isSupported();
+               void submitTriggerItem();
+
+       private:
+               telephony_handle_list_s __handleList;
+
+               bool __initTelephony();
+               void __releaseTelephony();
+               bool __setCallback();
+               void __unsetCallback();
+               bool __readCurrentStatus(telephony_h& handle, Json* data);
+
+               bool __getCallState(telephony_call_h& handle, std::string& state);
+               bool __getCallType(telephony_call_h& handle, std::string& type);
+               bool __getCallAddress(telephony_call_h& handle, std::string& address);
+               bool __getCallHandleId(telephony_call_h& handle, unsigned int& id);
+
+               void __handleUpdate(telephony_h handle, telephony_noti_e notiId, void* id);
+               static void __updateCb(telephony_h handle, telephony_noti_e notiId, void *data, void *userData);
+       };
+}
+
+#endif // _CONTEXT_SOCIAL_STATUS_CALL_H_
diff --git a/src/contacts/Contacts.cpp b/src/contacts/Contacts.cpp
new file mode 100644 (file)
index 0000000..42789a3
--- /dev/null
@@ -0,0 +1,134 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "Contacts.h"
+
+#define MY_PROFILE_VIEW _contacts_my_profile._uri
+#define PERSON_VIEW _contacts_person._uri
+#define TIME_INTERVAL 1
+
+using namespace ctx;
+
+SocialStatusContacts::SocialStatusContacts() :
+       DeviceProviderBase(SOCIAL_ST_SUBJ_CONTACTS),
+       __latestMyProfile(0),
+       __latestPerson(0)
+{
+}
+
+SocialStatusContacts::~SocialStatusContacts()
+{
+}
+
+bool SocialStatusContacts::isSupported()
+{
+       return true;
+}
+
+void SocialStatusContacts::submitTriggerItem()
+{
+       registerTriggerItem(OPS_SUBSCRIBE,
+                       "{"
+                               "\"Event\":{\"type\":\"string\",\"values\":[\"Changed\"]},"
+                               "\"Type\":{\"type\":\"string\",\"values\":[\"MyProfile\",\"Person\"]}"
+                       "}",
+                       NULL);
+}
+
+void SocialStatusContacts::__updateCb(const char* viewUri, void* userData)
+{
+       SocialStatusContacts *instance = static_cast<SocialStatusContacts*>(userData);
+       instance->__handleUpdate(viewUri);
+}
+
+void SocialStatusContacts::__handleUpdate(const char* viewUri)
+{
+       if (!STR_EQ(viewUri, _contacts_my_profile._uri) && !STR_EQ(viewUri, _contacts_person._uri)) {
+               _W("Unknown view uri");
+               return;
+       }
+
+       std::string view = (STR_EQ(viewUri, _contacts_my_profile._uri)? SOCIAL_ST_MY_PROFILE : SOCIAL_ST_PERSON);
+       IF_FAIL_VOID_TAG(!__isConsecutiveChange(viewUri), _D, "Ignore consecutive db change: %s", view.c_str());
+
+       Json data;
+       data.set(NULL, SOCIAL_ST_EVENT, SOCIAL_ST_CHANGED);
+       data.set(NULL, SOCIAL_ST_TYPE, view);
+       publish(NULL, ERR_NONE, data);
+}
+
+bool SocialStatusContacts::__isConsecutiveChange(const char* viewUri)
+{
+       time_t now = time(NULL);
+       double diff = 0;
+
+       if (STR_EQ(viewUri, MY_PROFILE_VIEW)) {
+               diff = difftime(now, __latestMyProfile);
+               __latestMyProfile = now;
+       } else if (STR_EQ(viewUri, PERSON_VIEW)) {
+               diff = difftime(now, __latestPerson);
+               __latestPerson = now;
+       }
+
+       if (diff < TIME_INTERVAL)
+               return true;
+
+       return false;
+}
+
+bool SocialStatusContacts::__setCallback()
+{
+       int err;
+
+       err = contacts_connect();
+       IF_FAIL_RETURN_TAG(err == CONTACTS_ERROR_NONE, false, _E, "Connecting contacts failed");
+
+       err = contacts_db_add_changed_cb(MY_PROFILE_VIEW, __updateCb, this);
+       IF_FAIL_CATCH_TAG(err == CONTACTS_ERROR_NONE, _E, "Setting my profile view changed callback failed");
+
+       err = contacts_db_add_changed_cb(PERSON_VIEW, __updateCb, this);
+       IF_FAIL_CATCH_TAG(err == CONTACTS_ERROR_NONE, _E, "Setting person view changed callback failed");
+
+       return true;
+
+CATCH:
+       contacts_disconnect();
+       return false;
+}
+
+void SocialStatusContacts::__unsetCallback()
+{
+       contacts_db_remove_changed_cb(MY_PROFILE_VIEW, __updateCb, this);
+       contacts_db_remove_changed_cb(PERSON_VIEW, __updateCb, this);
+
+       contacts_disconnect();
+
+       __latestMyProfile = 0;
+       __latestPerson = 0;
+}
+
+int SocialStatusContacts::subscribe()
+{
+       bool ret = __setCallback();
+       IF_FAIL_RETURN(ret, ERR_OPERATION_FAILED);
+       return ERR_NONE;
+}
+
+int SocialStatusContacts::unsubscribe()
+{
+       __unsetCallback();
+       return ERR_NONE;
+}
diff --git a/src/contacts/Contacts.h b/src/contacts/Contacts.h
new file mode 100644 (file)
index 0000000..28b68ce
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_SOCIAL_STATUS_CONTACTS_H_
+#define _CONTEXT_SOCIAL_STATUS_CONTACTS_H_
+
+#include <contacts.h>
+#include "../shared/SocialTypes.h"
+#include "../shared/DeviceProviderBase.h"
+
+namespace ctx {
+
+       class SocialStatusContacts : public DeviceProviderBase {
+       public:
+               SocialStatusContacts();
+               ~SocialStatusContacts();
+
+               int subscribe();
+               int unsubscribe();
+
+               bool isSupported();
+               void submitTriggerItem();
+
+       private:
+               time_t __latestMyProfile;
+               time_t __latestPerson;
+
+               bool __setCallback();
+               void __unsetCallback();
+               void __handleUpdate(const char* viewUri);
+               static void __updateCb(const char* viewUri, void* userData);
+               bool __isConsecutiveChange(const char* viewUri);
+       };
+}
+
+#endif // _CONTEXT_SOCIAL_STATUS_CONTACTS_H_
diff --git a/src/device/CMakeLists.txt b/src/device/CMakeLists.txt
deleted file mode 100644 (file)
index 16f436f..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
-# prvd_cdef, prvd_deps, and prvd_srcs need to be set properly
-
-# Common Profile
-FILE(GLOB prvd_srcs ./*.cpp system/Alarm.cpp system/Time.cpp)
-SET(prvd_deps vconf capi-system-info capi-system-device capi-system-runtime-info)
-
-# Mobile Profile
-IF("${PROFILE}" STREQUAL "mobile")
-       SET(prvd_deps ${prvd_deps} capi-network-bluetooth capi-network-wifi contacts-service2)
-       SET(prvd_deps ${prvd_deps} capi-telephony tapi msg-service capi-messaging-email motion)
-       FILE(GLOB_RECURSE prvd_srcs ${prvd_srcs} activity/*.cpp)
-       FILE(GLOB_RECURSE prvd_srcs ${prvd_srcs} system/*.cpp)
-       FILE(GLOB_RECURSE prvd_srcs ${prvd_srcs} social/*.cpp)
-ENDIF("${PROFILE}" STREQUAL "mobile")
-
-# Wearable Profile
-IF("${PROFILE}" STREQUAL "wearable")
-       SET(prvd_deps ${prvd_deps} capi-network-bluetooth capi-network-wifi)
-       SET(prvd_deps ${prvd_deps} capi-telephony tapi msg-service motion)
-       FILE(GLOB_RECURSE prvd_srcs ${prvd_srcs} activity/*.cpp)
-       FILE(GLOB_RECURSE prvd_srcs ${prvd_srcs} system/*.cpp)
-       FILE(GLOB prvd_srcs ${prvd_srcs} social/Call.cpp social/Message.cpp)
-ENDIF("${PROFILE}" STREQUAL "wearable")
-
-# TV Profile
-IF("${PROFILE}" STREQUAL "tv")
-       SET(prvd_deps ${prvd_deps} capi-network-bluetooth capi-network-wifi)
-       FILE(GLOB prvd_srcs ${prvd_srcs} system/Headphone.cpp system/Wifi.cpp)
-ENDIF("${PROFILE}" STREQUAL "tv")
diff --git a/src/device/DeviceContextProvider.cpp b/src/device/DeviceContextProvider.cpp
deleted file mode 100644 (file)
index 332efdc..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <Types.h>
-#include <ContextProvider.h>
-#include <DeviceContextProvider.h>
-
-#include "system/SystemTypes.h"
-#include "social/SocialTypes.h"
-#include "activity/ActivityTypes.h"
-
-#include "system/Alarm.h"
-#include "system/Time.h"
-
-#ifdef _MOBILE_
-#include "system/runtime_info/Charger.h"
-#include "system/runtime_info/Gps.h"
-#include "system/runtime_info/Usb.h"
-#include "system/Wifi.h"
-#include "system/Headphone.h"
-#include "system/Battery.h"
-#include "system/Psmode.h"
-#include "social/Call.h"
-#include "social/Email.h"
-#include "social/Message.h"
-#include "social/Contacts.h"
-#include "activity/Activity.h"
-#endif
-
-#ifdef _WEARABLE_
-#include "system/runtime_info/Charger.h"
-#include "system/runtime_info/Gps.h"
-#include "system/runtime_info/Usb.h"
-#include "system/Wifi.h"
-#include "system/Headphone.h"
-#include "system/Battery.h"
-#include "system/Psmode.h"
-#include "social/Call.h"
-#include "social/Message.h"
-#include "activity/Activity.h"
-#endif
-
-#define PRIV_NETWORK   "network.get"
-#define PRIV_TELEPHONY "telephony"
-#define PRIV_MESSAGE   "message.read"
-#define PRIV_CONTACT   "contact.read"
-
-template<typename Provider>
-void registerProvider(const char *subject, const char *privilege)
-{
-       Provider *provider = new(std::nothrow) Provider();
-       IF_FAIL_VOID_TAG(provider, _E, "Memory allocation failed");
-
-       if (!provider->isSupported()) {
-               delete provider;
-               return;
-       }
-
-       provider->registerProvider(privilege, provider);
-       provider->submitTriggerItem();
-}
-
-SO_EXPORT bool ctx::initDeviceContextProvider()
-{
-       registerProvider<DeviceStatusAlarm>(DEVICE_ST_SUBJ_ALARM, NULL);
-       registerProvider<DeviceStatusTime>(DEVICE_ST_SUBJ_TIME, NULL);
-
-#ifdef _MOBILE_
-       registerProvider<DeviceStatusWifi>(DEVICE_ST_SUBJ_WIFI, PRIV_NETWORK);
-       registerProvider<DeviceStatusHeadphone>(DEVICE_ST_SUBJ_HEADPHONE, NULL);
-
-       registerProvider<DeviceStatusCharger>(DEVICE_ST_SUBJ_CHARGER, NULL);
-       registerProvider<DeviceStatusGps>(DEVICE_ST_SUBJ_GPS, NULL);
-       registerProvider<DeviceStatusUsb>(DEVICE_ST_SUBJ_USB, NULL);
-       registerProvider<DeviceStatusBattery>(DEVICE_ST_SUBJ_BATTERY, NULL);
-       registerProvider<DeviceStatusPsmode>(DEVICE_ST_SUBJ_PSMODE, NULL);
-
-       registerProvider<SocialStatusCall>(SOCIAL_ST_SUBJ_CALL, PRIV_TELEPHONY);
-       registerProvider<SocialStatusEmail>(SOCIAL_ST_SUBJ_EMAIL, NULL);
-       registerProvider<SocialStatusMessage>(SOCIAL_ST_SUBJ_MESSAGE, PRIV_MESSAGE);
-       registerProvider<SocialStatusContacts>(SOCIAL_ST_SUBJ_CONTACTS, PRIV_CONTACT);
-
-       registerProvider<UserActivityStationary>(USER_ACT_SUBJ_STATIONARY, NULL);
-       registerProvider<UserActivityWalking>(USER_ACT_SUBJ_WALKING, NULL);
-       registerProvider<UserActivityRunning>(USER_ACT_SUBJ_RUNNING, NULL);
-       registerProvider<UserActivityInVehicle>(USER_ACT_SUBJ_IN_VEHICLE, NULL);
-
-       /* Create context providers, which need to be initiated before being subscribed */
-       /*
-       if (DeviceStatusWifi::isSupported())
-               DeviceStatusWifi::create(NULL);
-       */
-#endif
-
-#ifdef _WEARABLE_
-       registerProvider<DeviceStatusWifi>(DEVICE_ST_SUBJ_WIFI, PRIV_NETWORK);
-       registerProvider<DeviceStatusHeadphone>(DEVICE_ST_SUBJ_HEADPHONE, NULL);
-
-       registerProvider<DeviceStatusCharger>(DEVICE_ST_SUBJ_CHARGER, NULL);
-       registerProvider<DeviceStatusGps>(DEVICE_ST_SUBJ_GPS, NULL);
-       registerProvider<DeviceStatusUsb>(DEVICE_ST_SUBJ_USB, NULL);
-       registerProvider<DeviceStatusBattery>(DEVICE_ST_SUBJ_BATTERY, NULL);
-       registerProvider<DeviceStatusPsmode>(DEVICE_ST_SUBJ_PSMODE, NULL);
-
-       registerProvider<SocialStatusCall>(SOCIAL_ST_SUBJ_CALL, PRIV_TELEPHONY);
-       registerProvider<SocialStatusMessage>(SOCIAL_ST_SUBJ_MESSAGE, PRIV_MESSAGE);
-
-       registerProvider<UserActivityStationary>(USER_ACT_SUBJ_STATIONARY, NULL);
-       registerProvider<UserActivityWalking>(USER_ACT_SUBJ_WALKING, NULL);
-       registerProvider<UserActivityRunning>(USER_ACT_SUBJ_RUNNING, NULL);
-       registerProvider<UserActivityInVehicle>(USER_ACT_SUBJ_IN_VEHICLE, NULL);
-#endif
-
-       return true;
-}
diff --git a/src/device/DeviceProviderBase.cpp b/src/device/DeviceProviderBase.cpp
deleted file mode 100644 (file)
index 1c5f5ef..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <system_info.h>
-#include "DeviceProviderBase.h"
-
-using namespace ctx;
-
-DeviceProviderBase::DeviceProviderBase(const char *subject) :
-       ContextProvider(subject),
-       __beingSubscribed(false)
-{
-}
-
-bool DeviceProviderBase::isSupported()
-{
-       return true;
-}
-
-void DeviceProviderBase::submitTriggerItem()
-{
-}
-
-int DeviceProviderBase::subscribe(Json option, Json *requestResult)
-{
-       IF_FAIL_RETURN(!__beingSubscribed, ERR_NONE);
-
-       int ret = subscribe();
-
-       if (ret == ERR_NONE)
-               __beingSubscribed = true;
-
-       return ret;
-}
-
-int DeviceProviderBase::unsubscribe(Json option)
-{
-       int ret = ERR_NONE;
-
-       if (__beingSubscribed)
-               ret = unsubscribe();
-
-       return ret;
-}
-
-int DeviceProviderBase::read(Json option, Json *requestResult)
-{
-       return read();
-}
-
-int DeviceProviderBase::write(Json data, Json *requestResult)
-{
-       return write();
-}
-
-int DeviceProviderBase::subscribe()
-{
-       return ERR_NOT_SUPPORTED;
-}
-
-int DeviceProviderBase::unsubscribe()
-{
-       return ERR_NOT_SUPPORTED;
-}
-
-int DeviceProviderBase::read()
-{
-       return ERR_NOT_SUPPORTED;
-}
-
-int DeviceProviderBase::write()
-{
-       return ERR_NOT_SUPPORTED;
-}
-
-bool DeviceProviderBase::getSystemInfoBool(const char *key)
-{
-       bool supported = false;
-       int ret = system_info_get_platform_bool(key, &supported);
-       IF_FAIL_RETURN_TAG(ret == SYSTEM_INFO_ERROR_NONE, false, _E, "system_info_get_platform_bool() failed");
-       return supported;
-}
diff --git a/src/device/DeviceProviderBase.h b/src/device/DeviceProviderBase.h
deleted file mode 100644 (file)
index f5a55da..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_DEVICE_PROVIDER_BASE_H_
-#define _CONTEXT_DEVICE_PROVIDER_BASE_H_
-
-#include <ContextProvider.h>
-
-namespace ctx {
-
-       class DeviceProviderBase : public ContextProvider {
-       public:
-               int subscribe(Json option, Json *requestResult);
-               int unsubscribe(Json option);
-               int read(Json option, Json *requestResult);
-               int write(Json data, Json *requestResult);
-
-               virtual bool isSupported();
-               virtual void submitTriggerItem();
-
-       protected:
-               bool __beingSubscribed;
-
-               DeviceProviderBase(const char *subject);
-               virtual ~DeviceProviderBase() {}
-
-               virtual int subscribe();
-               virtual int unsubscribe();
-               virtual int read();
-               virtual int write();
-
-               static bool getSystemInfoBool(const char *key);
-       };
-}
-
-#endif // _CONTEXT_DEVICE_PROVIDER_BASE_H_
diff --git a/src/device/activity/Activity.h b/src/device/activity/Activity.h
deleted file mode 100644 (file)
index f50b283..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _DEVICE_ACTIVITY_STATUS_H_
-#define _DEVICE_ACTIVITY_STATUS_H_
-
-#include "ActivityBase.h"
-
-#define GENERATE_ACTIVITY_PROVIDER(actPrvd, actSubj, actType) \
-       class actPrvd : public UserActivityBase { \
-       public: \
-               actPrvd() : UserActivityBase(actSubj, actType) {} \
-       }; \
-
-namespace ctx {
-       GENERATE_ACTIVITY_PROVIDER(UserActivityStationary, USER_ACT_SUBJ_STATIONARY, ACTIVITY_STATIONARY);
-       GENERATE_ACTIVITY_PROVIDER(UserActivityWalking, USER_ACT_SUBJ_WALKING, ACTIVITY_WALK);
-       GENERATE_ACTIVITY_PROVIDER(UserActivityRunning, USER_ACT_SUBJ_RUNNING, ACTIVITY_RUN);
-       GENERATE_ACTIVITY_PROVIDER(UserActivityInVehicle, USER_ACT_SUBJ_IN_VEHICLE, ACTIVITY_IN_VEHICLE);
-}
-
-#endif // _DEVICE_ACTIVITY_STATUS_H_
diff --git a/src/device/activity/ActivityBase.cpp b/src/device/activity/ActivityBase.cpp
deleted file mode 100644 (file)
index 4abda04..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <system_info.h>
-#include "ActivityTypes.h"
-#include "ActivityBase.h"
-
-using namespace ctx;
-
-UserActivityBase::UserActivityBase(const char *subject, activity_type_e type)  :
-       DeviceProviderBase(subject),
-       __activityType(type),
-       __activityHandle(NULL)
-{
-}
-
-UserActivityBase::~UserActivityBase()
-{
-       if (__activityHandle)
-               activity_release(__activityHandle);
-}
-
-bool UserActivityBase::isSupported()
-{
-       return getSystemInfoBool("tizen.org/feature/sensor.activity_recognition");
-}
-
-void UserActivityBase::submitTriggerItem()
-{
-       registerTriggerItem(OPS_SUBSCRIBE,
-                       "{\"Event\":{\"type\":\"string\", \"values\":[\"Detected\"]}}",
-                       "{\"Accuracy\":{\"type\":\"string\", \"values\":[\"Low\", \"Normal\", \"High\"]}}"
-                       );
-}
-
-void UserActivityBase::__updateCb(activity_type_e activity, const activity_data_h data, double timestamp, activity_error_e error, void* userData)
-{
-       IF_FAIL_VOID_TAG(error == ACTIVITY_ERROR_NONE, _E, "Error: %d", error);
-
-       UserActivityBase *instance = static_cast<UserActivityBase*>(userData);
-       instance->__handleUpdate(activity, data, timestamp);
-}
-
-void UserActivityBase::__handleUpdate(activity_type_e activity, const activity_data_h data, double timestamp)
-{
-       IF_FAIL_VOID_TAG(activity == __activityType, _E, "Invalid activity: %d", activity);
-
-       Json dataRead;
-       dataRead.set(NULL, USER_ACT_EVENT, USER_ACT_DETECTED);
-
-       activity_accuracy_e accuracy = ACTIVITY_ACCURACY_LOW;
-       activity_get_accuracy(data, &accuracy);
-
-       switch (accuracy) {
-       case ACTIVITY_ACCURACY_HIGH:
-               dataRead.set(NULL, USER_ACT_ACCURACY, USER_ACT_HIGH);
-               break;
-       case ACTIVITY_ACCURACY_MID:
-               dataRead.set(NULL, USER_ACT_ACCURACY, USER_ACT_NORMAL);
-               break;
-       default:
-               dataRead.set(NULL, USER_ACT_ACCURACY, USER_ACT_LOW);
-               break;
-       }
-
-       publish(NULL, ERR_NONE, dataRead);
-}
-
-int UserActivityBase::subscribe()
-{
-       IF_FAIL_RETURN(__activityHandle == NULL, ERR_NONE);
-
-       activity_create(&__activityHandle);
-       IF_FAIL_RETURN_TAG(__activityHandle, ERR_OPERATION_FAILED, _E, "Memory allocation failed");
-
-       int ret = activity_start_recognition(__activityHandle, __activityType, __updateCb, this);
-       if (ret != ACTIVITY_ERROR_NONE) {
-               _E("Recognition starting failed");
-               activity_release(__activityHandle);
-               __activityHandle = NULL;
-               return ERR_OPERATION_FAILED;
-       }
-
-       return ERR_NONE;
-}
-
-int UserActivityBase::unsubscribe()
-{
-       IF_FAIL_RETURN(__activityHandle, ERR_NONE);
-
-       activity_stop_recognition(__activityHandle);
-       activity_release(__activityHandle);
-       __activityHandle = NULL;
-
-       return ERR_NONE;
-}
diff --git a/src/device/activity/ActivityBase.h b/src/device/activity/ActivityBase.h
deleted file mode 100644 (file)
index ef68d58..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _DEVICE_ACTIVITY_STATUS_BASE_H_
-#define _DEVICE_ACTIVITY_STATUS_BASE_H_
-
-#include <string>
-#include <activity_recognition.h>
-#include "../DeviceProviderBase.h"
-
-namespace ctx {
-
-       class UserActivityBase : public DeviceProviderBase {
-       public:
-               UserActivityBase(const char *subject, activity_type_e type);
-               virtual ~UserActivityBase();
-
-               int subscribe();
-               int unsubscribe();
-
-               bool isSupported();
-               void submitTriggerItem();
-
-       protected:
-               activity_type_e __activityType;
-               activity_h __activityHandle;
-
-       private:
-               void __handleUpdate(activity_type_e activity, const activity_data_h data, double timestamp);
-               static void __updateCb(activity_type_e activity, const activity_data_h data, double timestamp, activity_error_e error, void* userData);
-       };
-
-}
-
-#endif // _DEVICE_ACTIVITY_STATUS_BASE_H_
diff --git a/src/device/activity/ActivityTypes.h b/src/device/activity/ActivityTypes.h
deleted file mode 100644 (file)
index 4562b7b..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef        _DEVICE_ACTIVITY_STATUS_TYPES_H_
-#define        _DEVICE_ACTIVITY_STATUS_TYPES_H_
-
-// Subject
-#define USER_ACT_SUBJ_IN_VEHICLE       "activity/in_vehicle"
-#define USER_ACT_SUBJ_RUNNING          "activity/running"
-#define USER_ACT_SUBJ_STATIONARY       "activity/stationary"
-#define USER_ACT_SUBJ_WALKING          "activity/walking"
-
-// Data Key
-#define USER_ACT_EVENT         "Event"
-#define USER_ACT_ACCURACY      "Accuracy"
-
-// Data Value
-#define USER_ACT_DETECTED      "Detected"
-#define USER_ACT_LOW           "Low"
-#define USER_ACT_NORMAL                "Normal"
-#define USER_ACT_HIGH          "High"
-
-#endif // _DEVICE_ACTIVITY_STATUS_TYPES_H_
diff --git a/src/device/social/Call.cpp b/src/device/social/Call.cpp
deleted file mode 100644 (file)
index 460c281..0000000
+++ /dev/null
@@ -1,387 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "SocialTypes.h"
-#include "Call.h"
-
-#define TELEPHONY_NOTI_ID_CNT 8
-
-using namespace ctx;
-
-static bool __telephonyInitialized = false;
-static telephony_noti_e __callNotiIds[] =
-{
-   TELEPHONY_NOTI_VOICE_CALL_STATUS_IDLE,
-   TELEPHONY_NOTI_VOICE_CALL_STATUS_ACTIVE,
-//   TELEPHONY_NOTI_VOICE_CALL_STATUS_HELD,
-//   TELEPHONY_NOTI_VOICE_CALL_STATUS_DIALING,
-   TELEPHONY_NOTI_VOICE_CALL_STATUS_ALERTING,
-   TELEPHONY_NOTI_VOICE_CALL_STATUS_INCOMING,
-   TELEPHONY_NOTI_VIDEO_CALL_STATUS_IDLE,
-   TELEPHONY_NOTI_VIDEO_CALL_STATUS_ACTIVE,
-//   TELEPHONY_NOTI_VIDEO_CALL_STATUS_DIALING,
-   TELEPHONY_NOTI_VIDEO_CALL_STATUS_ALERTING,
-   TELEPHONY_NOTI_VIDEO_CALL_STATUS_INCOMING,
-};
-static Json __latest;
-
-SocialStatusCall::SocialStatusCall() :
-       DeviceProviderBase(SOCIAL_ST_SUBJ_CALL)
-{
-       __handleList.count = 0;
-       __handleList.handle = NULL;
-}
-
-SocialStatusCall::~SocialStatusCall()
-{
-}
-
-bool SocialStatusCall::isSupported()
-{
-       return getSystemInfoBool("tizen.org/feature/network.telephony");
-}
-
-void SocialStatusCall::submitTriggerItem()
-{
-       registerTriggerItem(OPS_SUBSCRIBE | OPS_READ,
-                       "{"
-                               "\"Medium\":{\"type\":\"string\",\"values\":[\"Voice\",\"Video\"]},"
-                               "\"State\":{\"type\":\"string\",\"values\":[\"Idle\",\"Connecting\",\"Connected\"]},"
-                               "\"Address\":{\"type\":\"string\"}"
-                       "}",
-                       NULL);
-       /* TODO remove Connecting, Connected */
-}
-
-void SocialStatusCall::__updateCb(telephony_h handle, telephony_noti_e notiId, void *data, void *userData)
-{
-       SocialStatusCall *instance = static_cast<SocialStatusCall*>(userData);
-       instance->__handleUpdate(handle, notiId, data);
-}
-
-void SocialStatusCall::__handleUpdate(telephony_h handle, telephony_noti_e notiId, void* id)
-{
-       Json data;
-       unsigned int count;
-       telephony_call_h *callList;
-
-       // Call state
-       switch (notiId) {
-       case TELEPHONY_NOTI_VOICE_CALL_STATUS_IDLE:
-       case TELEPHONY_NOTI_VIDEO_CALL_STATUS_IDLE:
-               data.set(NULL, SOCIAL_ST_STATE, SOCIAL_ST_IDLE);
-               break;
-       case TELEPHONY_NOTI_VOICE_CALL_STATUS_ACTIVE:
-       case TELEPHONY_NOTI_VIDEO_CALL_STATUS_ACTIVE:
-               data.set(NULL, SOCIAL_ST_STATE, SOCIAL_ST_ACTIVE);
-               break;
-       case TELEPHONY_NOTI_VOICE_CALL_STATUS_ALERTING:
-       case TELEPHONY_NOTI_VIDEO_CALL_STATUS_ALERTING:
-               data.set(NULL, SOCIAL_ST_STATE, SOCIAL_ST_ALERTING);
-               break;
-       case TELEPHONY_NOTI_VOICE_CALL_STATUS_INCOMING:
-       case TELEPHONY_NOTI_VIDEO_CALL_STATUS_INCOMING:
-               data.set(NULL, SOCIAL_ST_STATE, SOCIAL_ST_INCOMING);
-               break;
-/*     // Ignore below cases
-       case TELEPHONY_NOTI_VOICE_CALL_STATUS_HELD:
-       case TELEPHONY_NOTI_VOICE_CALL_STATUS_DIALING:
-       case TELEPHONY_NOTI_VIDEO_CALL_STATUS_DIALING:*/
-       default:
-               _E("Unkown noti id: %d", notiId);
-               return;
-       }
-
-       // Call type
-       switch (notiId) {
-       case TELEPHONY_NOTI_VOICE_CALL_STATUS_IDLE:
-       case TELEPHONY_NOTI_VOICE_CALL_STATUS_ACTIVE:
-       case TELEPHONY_NOTI_VOICE_CALL_STATUS_ALERTING:
-       case TELEPHONY_NOTI_VOICE_CALL_STATUS_INCOMING:
-               data.set(NULL, SOCIAL_ST_TYPE, SOCIAL_ST_VOICE);
-               break;
-       case TELEPHONY_NOTI_VIDEO_CALL_STATUS_IDLE:
-       case TELEPHONY_NOTI_VIDEO_CALL_STATUS_ACTIVE:
-       case TELEPHONY_NOTI_VIDEO_CALL_STATUS_ALERTING:
-       case TELEPHONY_NOTI_VIDEO_CALL_STATUS_INCOMING:
-               data.set(NULL, SOCIAL_ST_TYPE, SOCIAL_ST_VIDEO);
-               break;
-/*     // Ignore below cases
-       case TELEPHONY_NOTI_VOICE_CALL_STATUS_HELD:
-       case TELEPHONY_NOTI_VOICE_CALL_STATUS_DIALING:
-       case TELEPHONY_NOTI_VIDEO_CALL_STATUS_DIALING:*/
-       default:
-               _E("Unkown noti id: %d", notiId);
-               return;
-       }
-
-       int err = telephony_call_get_call_list(handle, &count, &callList);
-       IF_FAIL_VOID_TAG(err == TELEPHONY_ERROR_NONE, _E, "Getting call list failed");
-
-       unsigned int callId = *static_cast<unsigned int *>(id);
-       for (unsigned int i = 0; i < count; i++) {
-               unsigned int tempId;
-               // Handle id
-               if (!__getCallHandleId(callList[i], tempId)) {
-                       continue;
-               }
-
-               if (callId != tempId) {
-                       continue;
-               }
-
-               // Address
-               std::string address;
-               if (__getCallAddress(callList[i], address)) {
-                       data.set(NULL, SOCIAL_ST_ADDRESS, address);
-                       break;
-               }
-       }
-
-       if (__latest != data) {
-               publish(NULL, ERR_NONE, data);
-               __latest = data.str();
-       }
-       telephony_call_release_call_list(count, &callList);
-}
-
-bool SocialStatusCall::__initTelephony()
-{
-       IF_FAIL_RETURN(!__telephonyInitialized, true);
-
-       int err = telephony_init(&__handleList);
-       IF_FAIL_RETURN_TAG(err == TELEPHONY_ERROR_NONE, false, _E, "Initialization failed");
-
-       __telephonyInitialized = true;
-       return true;
-}
-
-void SocialStatusCall::__releaseTelephony()
-{
-       IF_FAIL_VOID(__telephonyInitialized);
-
-       telephony_deinit(&__handleList);
-
-       __telephonyInitialized = false;
-}
-
-bool SocialStatusCall::__setCallback()
-{
-       /* TODO: Consider dual-sim devices */
-       IF_FAIL_RETURN_TAG(__initTelephony(), false, _E, "Initialization failed");
-
-       int err;
-
-       for (unsigned int i = 0; i < __handleList.count; i++) {
-               for (unsigned int j = 0; j < TELEPHONY_NOTI_ID_CNT; j++) {
-                       err = telephony_set_noti_cb(__handleList.handle[i], __callNotiIds[j], __updateCb, this);
-                       IF_FAIL_CATCH(err == TELEPHONY_ERROR_NONE);
-               }
-       }
-
-       return true;
-
-CATCH:
-       _E("Initialization failed");
-       __releaseTelephony();
-       return false;
-}
-
-void SocialStatusCall::__unsetCallback()
-{
-       for (unsigned int i = 0; i < __handleList.count; i++) {
-               for (unsigned int j = 0; j < TELEPHONY_NOTI_ID_CNT; j++) {
-                       telephony_unset_noti_cb(__handleList.handle[i], __callNotiIds[j]);
-               }
-       }
-
-       __releaseTelephony();
-}
-
-bool SocialStatusCall::__getCallState(telephony_call_h& handle, std::string& state)
-{
-       state.clear();
-
-       telephony_call_status_e st;
-       int err = telephony_call_get_status(handle, &st);
-       IF_FAIL_RETURN_TAG(err == TELEPHONY_ERROR_NONE, false, _E, "Getting state failed");
-
-       switch (st) {
-       case TELEPHONY_CALL_STATUS_ACTIVE:
-               state = SOCIAL_ST_ACTIVE;
-               break;
-       case TELEPHONY_CALL_STATUS_HELD:
-               state = SOCIAL_ST_HELD;
-               break;
-       case TELEPHONY_CALL_STATUS_DIALING:
-               state = SOCIAL_ST_DIALING;
-               break;
-       case TELEPHONY_CALL_STATUS_ALERTING:
-               state = SOCIAL_ST_ALERTING;
-               break;
-       case TELEPHONY_CALL_STATUS_INCOMING:
-               state = SOCIAL_ST_INCOMING;
-               break;
-       default:
-               state = SOCIAL_ST_IDLE;
-       }
-
-       IF_FAIL_RETURN_TAG(!state.empty(), false, _W, "State is empty");
-
-       return true;
-}
-
-bool SocialStatusCall::__getCallType(telephony_call_h& handle, std::string& type)
-{
-       type.clear();
-
-       telephony_call_type_e t;
-       int err = telephony_call_get_type(handle, &t);
-       IF_FAIL_RETURN_TAG(err == TELEPHONY_ERROR_NONE, false, _E, "Getting type failed");
-
-       switch (t) {
-       case TELEPHONY_CALL_TYPE_VOICE:
-               type = SOCIAL_ST_VOICE;
-               break;
-       case TELEPHONY_CALL_TYPE_VIDEO:
-               type = SOCIAL_ST_VIDEO;
-               break;
-       default:
-               _E("Unknown type: %d", t);
-               return false;
-       }
-
-       IF_FAIL_RETURN_TAG(!type.empty(), false, _W, "Type is empty");
-
-       return true;
-}
-
-bool SocialStatusCall::__getCallAddress(telephony_call_h& handle, std::string& address)
-{
-       address.clear();
-
-       char* number = NULL;
-       int err = telephony_call_get_number(handle, &number);
-       IF_FAIL_RETURN_TAG(err == TELEPHONY_ERROR_NONE, false, _E, "Getting address failed");
-
-       if (number) {
-               address = number;
-               g_free(number);
-               number = NULL;
-       }
-
-       IF_FAIL_RETURN_TAG(!address.empty(), false, _W, "Address is empty");
-
-       return true;
-}
-
-bool SocialStatusCall::__getCallHandleId(telephony_call_h& handle, unsigned int& id)
-{
-       int err = telephony_call_get_handle_id(handle, &id);
-       IF_FAIL_RETURN_TAG(err == TELEPHONY_ERROR_NONE, false, _E, "Getting handle id failed");
-
-       return true;
-}
-
-int SocialStatusCall::subscribe()
-{
-       bool ret = __setCallback();
-       IF_FAIL_RETURN(ret, ERR_OPERATION_FAILED);
-       return ERR_NONE;
-}
-
-int SocialStatusCall::unsubscribe()
-{
-       __unsetCallback();
-       return ERR_NONE;
-}
-
-bool SocialStatusCall::__readCurrentStatus(telephony_h& handle, Json* data)
-{
-       unsigned int count = 0;
-       telephony_call_h *callList = NULL;
-       telephony_call_get_call_list(handle, &count, &callList);
-
-       // Default data
-       data->set(NULL, SOCIAL_ST_STATE, SOCIAL_ST_IDLE);
-
-       // Held & Dialing are ignored
-       for (unsigned int i = 0; i < count; i++) {
-               // Call state
-               std::string state;
-               if (__getCallState(callList[i], state)) {
-                       // Skip Held & Dialing
-                       if (state.compare(SOCIAL_ST_HELD) == 0 || state.compare(SOCIAL_ST_DIALING) == 0)
-                               continue;
-
-                       data->set(NULL, SOCIAL_ST_STATE, state);
-               }
-
-               // Call type
-               std::string type;
-               if (__getCallType(callList[i], type)) {
-                       data->set(NULL, SOCIAL_ST_MEDIUM, type);
-               }
-
-               // Address
-               std::string address;
-               if (__getCallAddress(callList[i], address)) {
-                       data->set(NULL, SOCIAL_ST_ADDRESS, address);
-               }
-
-               if (state == SOCIAL_ST_ACTIVE) {
-                       break;
-               }
-       }
-
-       telephony_call_release_call_list(count, &callList);
-       return true;
-}
-
-int SocialStatusCall::read()
-{
-       bool temporaryHandle = false;
-       if (!__telephonyInitialized) {
-               IF_FAIL_RETURN(__initTelephony(), ERR_OPERATION_FAILED);
-               temporaryHandle = true;
-       }
-
-       bool ret = true;
-       Json data;
-       data.set(NULL, SOCIAL_ST_STATE, SOCIAL_ST_IDLE);
-
-       for (unsigned int i = 0; i < __handleList.count; i++) {
-               telephony_sim_state_e state;
-               int err = telephony_sim_get_state(__handleList.handle[i], &state);
-               IF_FAIL_RETURN_TAG(err == TELEPHONY_ERROR_NONE, ERR_OPERATION_FAILED, _E, "Getting SIM status failed");
-
-               if (state != TELEPHONY_SIM_STATE_AVAILABLE)
-                       continue;
-
-               ret = __readCurrentStatus(__handleList.handle[i], &data);
-               break;
-       }
-
-       if (temporaryHandle)
-               __releaseTelephony();
-
-       if (ret) {
-               replyToRead(NULL, ERR_NONE, data);
-               return ERR_NONE;
-       }
-
-       return ERR_OPERATION_FAILED;
-}
diff --git a/src/device/social/Call.h b/src/device/social/Call.h
deleted file mode 100644 (file)
index 02a4eaa..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_SOCIAL_STATUS_CALL_H_
-#define _CONTEXT_SOCIAL_STATUS_CALL_H_
-
-#include <telephony.h>
-#include "../DeviceProviderBase.h"
-
-namespace ctx {
-
-       class SocialStatusCall : public DeviceProviderBase {
-       public:
-               SocialStatusCall();
-               ~SocialStatusCall();
-
-               int subscribe();
-               int unsubscribe();
-               int read();
-
-               bool isSupported();
-               void submitTriggerItem();
-
-       private:
-               telephony_handle_list_s __handleList;
-
-               bool __initTelephony();
-               void __releaseTelephony();
-               bool __setCallback();
-               void __unsetCallback();
-               bool __readCurrentStatus(telephony_h& handle, Json* data);
-
-               bool __getCallState(telephony_call_h& handle, std::string& state);
-               bool __getCallType(telephony_call_h& handle, std::string& type);
-               bool __getCallAddress(telephony_call_h& handle, std::string& address);
-               bool __getCallHandleId(telephony_call_h& handle, unsigned int& id);
-
-               void __handleUpdate(telephony_h handle, telephony_noti_e notiId, void* id);
-               static void __updateCb(telephony_h handle, telephony_noti_e notiId, void *data, void *userData);
-       };
-}
-
-#endif // _CONTEXT_SOCIAL_STATUS_CALL_H_
diff --git a/src/device/social/Contacts.cpp b/src/device/social/Contacts.cpp
deleted file mode 100644 (file)
index 55ff19a..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "SocialTypes.h"
-#include "Contacts.h"
-
-#define MY_PROFILE_VIEW _contacts_my_profile._uri
-#define PERSON_VIEW _contacts_person._uri
-#define TIME_INTERVAL 1
-
-using namespace ctx;
-
-SocialStatusContacts::SocialStatusContacts() :
-       DeviceProviderBase(SOCIAL_ST_SUBJ_CONTACTS),
-       __latestMyProfile(0),
-       __latestPerson(0)
-{
-}
-
-SocialStatusContacts::~SocialStatusContacts()
-{
-}
-
-bool SocialStatusContacts::isSupported()
-{
-       return true;
-}
-
-void SocialStatusContacts::submitTriggerItem()
-{
-       registerTriggerItem(OPS_SUBSCRIBE,
-                       "{"
-                               "\"Event\":{\"type\":\"string\",\"values\":[\"Changed\"]},"
-                               "\"Type\":{\"type\":\"string\",\"values\":[\"MyProfile\",\"Person\"]}"
-                       "}",
-                       NULL);
-}
-
-void SocialStatusContacts::__updateCb(const char* viewUri, void* userData)
-{
-       SocialStatusContacts *instance = static_cast<SocialStatusContacts*>(userData);
-       instance->__handleUpdate(viewUri);
-}
-
-void SocialStatusContacts::__handleUpdate(const char* viewUri)
-{
-       if (!STR_EQ(viewUri, _contacts_my_profile._uri) && !STR_EQ(viewUri, _contacts_person._uri)) {
-               _W("Unknown view uri");
-               return;
-       }
-
-       std::string view = (STR_EQ(viewUri, _contacts_my_profile._uri)? SOCIAL_ST_MY_PROFILE : SOCIAL_ST_PERSON);
-       IF_FAIL_VOID_TAG(!__isConsecutiveChange(viewUri), _D, "Ignore consecutive db change: %s", view.c_str());
-
-       Json data;
-       data.set(NULL, SOCIAL_ST_EVENT, SOCIAL_ST_CHANGED);
-       data.set(NULL, SOCIAL_ST_TYPE, view);
-       publish(NULL, ERR_NONE, data);
-}
-
-bool SocialStatusContacts::__isConsecutiveChange(const char* viewUri)
-{
-       time_t now = time(NULL);
-       double diff = 0;
-
-       if (STR_EQ(viewUri, MY_PROFILE_VIEW)) {
-               diff = difftime(now, __latestMyProfile);
-               __latestMyProfile = now;
-       } else if (STR_EQ(viewUri, PERSON_VIEW)) {
-               diff = difftime(now, __latestPerson);
-               __latestPerson = now;
-       }
-
-       if (diff < TIME_INTERVAL)
-               return true;
-
-       return false;
-}
-
-bool SocialStatusContacts::__setCallback()
-{
-       int err;
-
-       err = contacts_connect();
-       IF_FAIL_RETURN_TAG(err == CONTACTS_ERROR_NONE, false, _E, "Connecting contacts failed");
-
-       err = contacts_db_add_changed_cb(MY_PROFILE_VIEW, __updateCb, this);
-       IF_FAIL_CATCH_TAG(err == CONTACTS_ERROR_NONE, _E, "Setting my profile view changed callback failed");
-
-       err = contacts_db_add_changed_cb(PERSON_VIEW, __updateCb, this);
-       IF_FAIL_CATCH_TAG(err == CONTACTS_ERROR_NONE, _E, "Setting person view changed callback failed");
-
-       return true;
-
-CATCH:
-       contacts_disconnect();
-       return false;
-}
-
-void SocialStatusContacts::__unsetCallback()
-{
-       contacts_db_remove_changed_cb(MY_PROFILE_VIEW, __updateCb, this);
-       contacts_db_remove_changed_cb(PERSON_VIEW, __updateCb, this);
-
-       contacts_disconnect();
-
-       __latestMyProfile = 0;
-       __latestPerson = 0;
-}
-
-int SocialStatusContacts::subscribe()
-{
-       bool ret = __setCallback();
-       IF_FAIL_RETURN(ret, ERR_OPERATION_FAILED);
-       return ERR_NONE;
-}
-
-int SocialStatusContacts::unsubscribe()
-{
-       __unsetCallback();
-       return ERR_NONE;
-}
diff --git a/src/device/social/Contacts.h b/src/device/social/Contacts.h
deleted file mode 100644 (file)
index c5ced5a..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_SOCIAL_STATUS_CONTACTS_H_
-#define _CONTEXT_SOCIAL_STATUS_CONTACTS_H_
-
-#include <contacts.h>
-#include "../DeviceProviderBase.h"
-
-namespace ctx {
-
-       class SocialStatusContacts : public DeviceProviderBase {
-       public:
-               SocialStatusContacts();
-               ~SocialStatusContacts();
-
-               int subscribe();
-               int unsubscribe();
-
-               bool isSupported();
-               void submitTriggerItem();
-
-       private:
-               time_t __latestMyProfile;
-               time_t __latestPerson;
-
-               bool __setCallback();
-               void __unsetCallback();
-               void __handleUpdate(const char* viewUri);
-               static void __updateCb(const char* viewUri, void* userData);
-               bool __isConsecutiveChange(const char* viewUri);
-       };
-}
-
-#endif // _CONTEXT_SOCIAL_STATUS_CONTACTS_H_
diff --git a/src/device/social/Email.cpp b/src/device/social/Email.cpp
deleted file mode 100644 (file)
index e67729e..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <email-api-etc.h>
-#include "SocialTypes.h"
-#include "Email.h"
-
-using namespace ctx;
-
-SocialStatusEmail::SocialStatusEmail() :
-       DeviceProviderBase(SOCIAL_ST_SUBJ_EMAIL),
-       __dbusSignalId(-1),
-       __dbusWatcher(DBusType::SESSION)
-{
-}
-
-SocialStatusEmail::~SocialStatusEmail()
-{
-}
-
-bool SocialStatusEmail::isSupported()
-{
-       return getSystemInfoBool("tizen.org/feature/network.telephony");
-}
-
-void SocialStatusEmail::submitTriggerItem()
-{
-       registerTriggerItem(OPS_SUBSCRIBE,
-                       "{"
-                               "\"Event\":{\"type\":\"string\",\"values\":[\"Received\",\"Sent\"]}"
-                       "}",
-                       NULL);
-}
-
-void SocialStatusEmail::onSignal(const char* sender, const char* path, const char* iface, const char* name, GVariant* param)
-{
-       gint subType = 0;
-       gint gi1 = 0;
-       const gchar *gc = NULL;
-       gint gi2 = 0;
-       gint gi3 = 0;
-
-       g_variant_get(param, "(ii&sii)", &subType, &gi1, &gc, &gi2, &gi3);
-
-       if (subType == NOTI_DOWNLOAD_FINISH) {
-               //TODO: Check if this signal actually means that there are new mails
-               _D("sub type: %d, gi1: %d, gc: %s, gi2: %d, gi3: %d", subType, gi1, gc, gi2, gi3);
-               Json dataUpdated;
-               dataUpdated.set(NULL, SOCIAL_ST_EVENT, SOCIAL_ST_RECEIVED);
-               publish(NULL, ERR_NONE, dataUpdated);
-
-       } else if (subType == NOTI_SEND_FINISH) {
-               _D("sub type: %d, gi1: %d, gc: %s, gi2: %d, gi3: %d", subType, gi1, gc, gi2, gi3);
-               Json dataUpdated;
-               dataUpdated.set(NULL, SOCIAL_ST_EVENT, SOCIAL_ST_SENT);
-               publish(NULL, ERR_NONE, dataUpdated);
-       }
-}
-
-
-int SocialStatusEmail::subscribe()
-{
-       __dbusSignalId = __dbusWatcher.watch(NULL, NULL, "User.Email.NetworkStatus", "email", this);
-       IF_FAIL_RETURN_TAG(__dbusSignalId >= 0, ERR_OPERATION_FAILED, _E, "Email dbus signal subscription failed");
-       return ERR_NONE;
-}
-
-
-int SocialStatusEmail::unsubscribe()
-{
-       __dbusWatcher.unwatch(__dbusSignalId);
-       return ERR_NONE;
-}
diff --git a/src/device/social/Email.h b/src/device/social/Email.h
deleted file mode 100644 (file)
index cf44ae7..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_SOCIAL_STATUS_EMAIL_H_
-#define _CONTEXT_SOCIAL_STATUS_EMAIL_H_
-
-#include <DBusSignalWatcher.h>
-#include "../DeviceProviderBase.h"
-
-namespace ctx {
-
-       class SocialStatusEmail : public DeviceProviderBase, public IDBusSignalListener {
-       public:
-               SocialStatusEmail();
-               ~SocialStatusEmail();
-
-               int subscribe();
-               int unsubscribe();
-
-               bool isSupported();
-               void submitTriggerItem();
-
-               void onSignal(const char *sender, const char *path, const char *iface, const char *name, GVariant *param);
-
-       private:
-               int64_t __dbusSignalId;
-               DBusSignalWatcher __dbusWatcher;
-       };
-}
-
-#endif // _CONTEXT_SOCIAL_STATUS_EMAIL_H_
diff --git a/src/device/social/Message.cpp b/src/device/social/Message.cpp
deleted file mode 100644 (file)
index f55b3e6..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "SocialTypes.h"
-#include "Message.h"
-
-#define MAX_ADDR_SIZE 20
-
-using namespace ctx;
-
-SocialStatusMessage::SocialStatusMessage() :
-       DeviceProviderBase(SOCIAL_ST_SUBJ_MESSAGE),
-       __messageHandle(NULL)
-{
-}
-
-SocialStatusMessage::~SocialStatusMessage()
-{
-}
-
-bool SocialStatusMessage::isSupported()
-{
-       return getSystemInfoBool("tizen.org/feature/network.telephony");
-}
-
-void SocialStatusMessage::submitTriggerItem()
-{
-       registerTriggerItem(OPS_SUBSCRIBE,
-                       "{"
-                               "\"Event\":{\"type\":\"string\",\"values\":[\"Received\"]},"
-                               "\"Type\":{\"type\":\"string\",\"values\":[\"SMS\",\"MMS\"]},"
-                               "\"Address\":{\"type\":\"string\"}"
-                       "}",
-                       NULL);
-}
-
-void SocialStatusMessage::__updateCb(msg_handle_t handle, msg_struct_t msg, void* userData)
-{
-       SocialStatusMessage *instance = static_cast<SocialStatusMessage*>(userData);
-       instance->__handleUpdate(msg);
-}
-
-void SocialStatusMessage::__handleUpdate(msg_struct_t msg)
-{
-       int err;
-       int type;
-       char address[MAX_ADDR_SIZE];
-       Json data;
-
-       err = msg_get_int_value(msg, MSG_MESSAGE_TYPE_INT, &type);
-       IF_FAIL_VOID_TAG(err == MSG_SUCCESS, _W, "Getting message type failed");
-
-       err = msg_get_str_value(msg, MSG_MESSAGE_REPLY_ADDR_STR, address, MAX_ADDR_SIZE);
-       IF_FAIL_VOID_TAG(err == MSG_SUCCESS, _W, "Getting reply address failed");
-
-       switch (type) {
-       case MSG_TYPE_SMS_CB :
-       case MSG_TYPE_SMS_JAVACB :
-       case MSG_TYPE_SMS_WAPPUSH :
-       case MSG_TYPE_SMS_MWI :
-       case MSG_TYPE_SMS_SYNCML :
-       case MSG_TYPE_SMS_REJECT :
-       case MSG_TYPE_SMS_ETWS_PRIMARY :
-       case MSG_TYPE_SMS :
-               data.set(NULL, SOCIAL_ST_TYPE, SOCIAL_ST_SMS);
-               break;
-       case MSG_TYPE_MMS_NOTI :
-       case MSG_TYPE_MMS_JAVA :
-       case MSG_TYPE_MMS :
-               data.set(NULL, SOCIAL_ST_TYPE, SOCIAL_ST_MMS);
-               break;
-       default :
-               _W("Unknown message type");
-               return;
-       }
-
-       data.set(NULL, SOCIAL_ST_EVENT, SOCIAL_ST_RECEIVED);
-       data.set(NULL, SOCIAL_ST_ADDRESS, address);
-
-       publish(NULL, ERR_NONE, data);
-}
-
-bool SocialStatusMessage::__setCallback()
-{
-       int err;
-
-       err = msg_open_msg_handle(&__messageHandle);
-       IF_FAIL_RETURN_TAG(err == MSG_SUCCESS, false, _E, "Handle creation failed");
-
-       err = msg_reg_sms_message_callback(__messageHandle, __updateCb, 0, this);
-       if (err != MSG_SUCCESS) {
-               msg_close_msg_handle(&__messageHandle);
-               _E("Setting SMS event callback failed");
-               return false;
-       }
-
-       msg_reg_mms_conf_message_callback(__messageHandle, __updateCb, NULL, this);
-       return true;
-}
-
-void SocialStatusMessage::__unsetCallback()
-{
-       if (__messageHandle)
-               msg_close_msg_handle(&__messageHandle);
-
-       __messageHandle = NULL;
-}
-
-int SocialStatusMessage::subscribe()
-{
-       bool ret = __setCallback();
-       IF_FAIL_RETURN(ret, ERR_OPERATION_FAILED);
-       return ERR_NONE;
-}
-
-int SocialStatusMessage::unsubscribe()
-{
-       __unsetCallback();
-       return ERR_NONE;
-}
diff --git a/src/device/social/Message.h b/src/device/social/Message.h
deleted file mode 100644 (file)
index 78d006b..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_SOCIAL_STATUS_SMS_H_
-#define _CONTEXT_SOCIAL_STATUS_SMS_H_
-
-#include <msg.h>
-#include <msg_transport.h>
-#include "../DeviceProviderBase.h"
-
-namespace ctx {
-
-       class SocialStatusMessage : public DeviceProviderBase {
-       public:
-               SocialStatusMessage();
-               ~SocialStatusMessage();
-
-               int subscribe();
-               int unsubscribe();
-
-               bool isSupported();
-               void submitTriggerItem();
-
-       private:
-               msg_handle_t __messageHandle;
-               bool __beingSubscribed;
-
-               bool __setCallback();
-               void __unsetCallback();
-               void __handleUpdate(msg_struct_t msg);
-               static void __updateCb(msg_handle_t handle, msg_struct_t msg, void* userData);
-       };
-}
-
-#endif // _CONTEXT_SOCIAL_STATUS_SMS_H_
diff --git a/src/device/social/SocialTypes.h b/src/device/social/SocialTypes.h
deleted file mode 100644 (file)
index 82dccff..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_SOCIAL_STATUS_TYPES_H_
-#define _CONTEXT_SOCIAL_STATUS_TYPES_H_
-
-// Subject
-#define SOCIAL_ST_SUBJ_CALL            "social/call"
-#define SOCIAL_ST_SUBJ_EMAIL   "social/email"
-#define SOCIAL_ST_SUBJ_MESSAGE "social/message"
-#define SOCIAL_ST_SUBJ_CONTACTS        "social/contacts"
-
-// Data Key
-#define SOCIAL_ST_STATE                        "State"
-#define SOCIAL_ST_EVENT                        "Event"
-#define SOCIAL_ST_TYPE                 "Type"
-#define SOCIAL_ST_MEDIUM               "Medium"
-#define SOCIAL_ST_ADDRESS              "Address"
-
-// Data Values
-#define SOCIAL_ST_IDLE                 "Idle"
-#define SOCIAL_ST_CONNECTING   "Connecting"
-#define SOCIAL_ST_CONNECTED            "Connected"
-#define SOCIAL_ST_ACTIVE               SOCIAL_ST_CONNECTED
-#define SOCIAL_ST_HELD                 "Held"
-#define SOCIAL_ST_DIALING              "Dialing"
-#define SOCIAL_ST_ALERTING             SOCIAL_ST_CONNECTING
-#define SOCIAL_ST_INCOMING             SOCIAL_ST_CONNECTING
-#define SOCIAL_ST_VOICE                        "Voice"
-#define SOCIAL_ST_VIDEO                        "Video"
-#define SOCIAL_ST_SENT                 "Sent"
-#define SOCIAL_ST_RECEIVED             "Received"
-#define SOCIAL_ST_SMS                  "SMS"
-#define SOCIAL_ST_MMS                  "MMS"
-#define SOCIAL_ST_MY_PROFILE   "MyProfile"
-#define SOCIAL_ST_PERSON               "Person"
-#define SOCIAL_ST_CHANGED              "Changed"
-
-#endif //_CONTEXT_SOCIAL_STATUS_TYPES_H
diff --git a/src/device/system/Alarm.cpp b/src/device/system/Alarm.cpp
deleted file mode 100644 (file)
index edc7bad..0000000
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "SystemTypes.h"
-#include "Alarm.h"
-
-using namespace ctx;
-
-DeviceStatusAlarm::DeviceStatusAlarm()
-       : ContextProvider(DEVICE_ST_SUBJ_ALARM)
-{
-}
-
-DeviceStatusAlarm::~DeviceStatusAlarm()
-{
-       __clear();
-
-       for (auto it = __optionSet.begin(); it != __optionSet.end(); ++it) {
-               delete *it;
-       }
-       __optionSet.clear();
-}
-
-bool DeviceStatusAlarm::isSupported()
-{
-       return true;
-}
-
-void DeviceStatusAlarm::submitTriggerItem()
-{
-       registerTriggerItem(OPS_SUBSCRIBE,
-                       "{"
-                               "\"TimeOfDay\":{\"type\":\"integer\",\"min\":0,\"max\":1439},"
-                               "\"DayOfWeek\":{\"type\":\"string\",\"values\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\",\"Sun\",\"Weekday\",\"Weekend\"]}"
-                       "}",
-                       NULL);
-}
-
-int DeviceStatusAlarm::subscribe(Json option, Json *requestResult)
-{
-       int dow = __getArrangedDayOfWeek(option);
-
-       int time;
-       for (int i = 0; option.getAt(NULL, DEVICE_ST_TIME_OF_DAY, i, &time); i++) {
-               __add(time, dow);
-       }
-
-       Json* elem = new(std::nothrow) Json(option);
-       if (elem) {
-               __optionSet.insert(elem);
-       } else {
-               unsubscribe(option);
-               _E("Memory allocation failed");
-               return ERR_OUT_OF_MEMORY;
-       }
-
-       return ERR_NONE;
-}
-
-int DeviceStatusAlarm::unsubscribe(Json option)
-{
-       int dow = __getArrangedDayOfWeek(option);
-
-       int time;
-       for (int i = 0; option.getAt(NULL, DEVICE_ST_TIME_OF_DAY, i, &time); i++) {
-               __remove(time, dow);
-       }
-
-       OptionSet::iterator target = __findOption(option);
-       if (target != __optionSet.end()) {
-               delete (*target);
-               __optionSet.erase(target);
-       }
-
-       return ERR_NONE;
-}
-
-int DeviceStatusAlarm::__getArrangedDayOfWeek(Json& option)
-{
-       int dow = 0;
-
-       std::string tempDay;
-       for (int i = 0; option.getAt(NULL, DEVICE_ST_DAY_OF_WEEK, i, &tempDay); i++) {
-               dow |= TimerManager::dowToInt(tempDay);
-       }
-       _D("Requested day of week (%#x)", dow);
-
-       return dow;
-}
-
-DeviceStatusAlarm::RefCountArray::RefCountArray()
-{
-       memset(count, 0, sizeof(int) * DAYS_PER_WEEK);
-}
-
-int DeviceStatusAlarm::__mergeDayOfWeek(int* refCnt)
-{
-       int dayOfWeek = 0;
-
-       for (int d = 0; d < DAYS_PER_WEEK; ++d) {
-               if (refCnt[d] > 0) {
-                       dayOfWeek |= (0x01 << d);
-               }
-       }
-
-       return dayOfWeek;
-}
-
-bool DeviceStatusAlarm::__add(int minute, int dayOfWeek)
-{
-       IF_FAIL_RETURN_TAG(minute >=0 && minute < 1440 &&
-                       dayOfWeek > 0 && dayOfWeek <= static_cast<int>(DayOfWeek::EVERYDAY),
-                       false, _E, "Invalid parameter");
-
-       RefCountArray &ref = __refCountMap[minute];
-
-       for (int d = 0; d < DAYS_PER_WEEK; ++d) {
-               if ((dayOfWeek & (0x01 << d)) != 0) {
-                       ref.count[d] += 1;
-               }
-       }
-
-       return __resetTimer(minute);
-}
-
-bool DeviceStatusAlarm::__remove(int minute, int dayOfWeek)
-{
-       IF_FAIL_RETURN_TAG(minute >= 0 && minute < 1440 &&
-                       dayOfWeek > 0 && dayOfWeek <= static_cast<int>(DayOfWeek::EVERYDAY),
-                       false, _E, "Invalid parameter");
-
-       RefCountArray &ref = __refCountMap[minute];
-
-       for (int d = 0; d < DAYS_PER_WEEK; ++d) {
-               if ((dayOfWeek & (0x01 << d)) != 0 && ref.count[d] > 0) {
-                       ref.count[d] -= 1;
-               }
-       }
-
-       return __resetTimer(minute);
-}
-
-bool DeviceStatusAlarm::__resetTimer(int minute)
-{
-       int dayOfWeek = __mergeDayOfWeek(__refCountMap[minute].count);
-       TimerState &timer = __timerStateMap[minute];
-
-       if (dayOfWeek == timer.dayOfWeek) {
-               /* Necessary timers are already running... */
-               return true;
-       }
-
-       if (dayOfWeek == 0 && timer.timerId > 0) {
-               /* Turn off the timer at hour, if it is not necessray anymore. */
-               __timerManager.remove(timer.timerId);
-               __timerStateMap.erase(minute);
-               __refCountMap.erase(minute);
-               return true;
-       }
-
-       if (timer.timerId > 0) {
-               /* Turn off the current timer, to set a new one. */
-               __timerManager.remove(timer.timerId);
-               timer.timerId = -1;
-               timer.dayOfWeek = 0;
-       }
-
-       /* Create a new timer, w.r.t. the new dayOfWeek value. */
-       int h = minute / 60;
-       int m = minute - h * 60;
-       int tid = __timerManager.setAt(h, m, static_cast<DayOfWeek>(dayOfWeek), this);
-       IF_FAIL_RETURN_TAG(tid > 0, false, _E, "Timer setting failed");
-
-       timer.timerId = tid;
-       timer.dayOfWeek = dayOfWeek;
-
-       return true;
-}
-
-void DeviceStatusAlarm::__clear()
-{
-       for (auto it = __timerStateMap.begin(); it != __timerStateMap.end(); ++it) {
-               if (it->second.timerId > 0) {
-                       __timerManager.remove(it->second.timerId);
-               }
-       }
-
-       __timerStateMap.clear();
-       __refCountMap.clear();
-}
-
-bool DeviceStatusAlarm::onTimerExpired(int timerId)
-{
-       time_t rawTime;
-       struct tm timeInfo;
-
-       time(&rawTime);
-       tzset();
-       localtime_r(&rawTime, &timeInfo);
-
-       int hour = timeInfo.tm_hour;
-       int min = timeInfo.tm_min;
-       int dayOfWeek = (0x01 << timeInfo.tm_wday);
-
-       __handleUpdate(hour, min, dayOfWeek);
-
-       return true;
-}
-
-void DeviceStatusAlarm::__handleUpdate(int hour, int min, int dayOfWeek)
-{
-       _I("Time: %02d:%02d, Day of Week: %#x", hour, min, dayOfWeek);
-
-       Json dataRead;
-       int resultTime = hour * 60 + min;
-       std::string resultDay = TimerManager::dowToStr(dayOfWeek);
-       dataRead.set(NULL, DEVICE_ST_TIME_OF_DAY, resultTime);
-       dataRead.set(NULL, DEVICE_ST_DAY_OF_WEEK, resultDay);
-
-       for (auto it = __optionSet.begin(); it != __optionSet.end(); ++it) {
-               Json option = (**it);
-               if (__isMatched(option, resultTime, resultDay)) {
-                       publish(option, ERR_NONE, dataRead);
-               }
-       }
-}
-
-bool DeviceStatusAlarm::__isMatched(Json& option, int time, std::string day)
-{
-       bool ret = false;
-       int optionTime;
-       for (int i = 0; option.getAt(NULL, DEVICE_ST_TIME_OF_DAY, i, &optionTime); i++){
-               if (time == optionTime) {
-                       ret = true;
-                       break;
-               }
-       }
-       IF_FAIL_RETURN(ret, false);
-
-       std::string optionDay;
-       for (int i = 0; option.getAt(NULL, DEVICE_ST_DAY_OF_WEEK, i, &optionDay); i++){
-               if (day == optionDay) {
-                       return true;
-               }
-       }
-
-       return false;
-}
-
-DeviceStatusAlarm::OptionSet::iterator DeviceStatusAlarm::__findOption(Json& option)
-{
-       for (auto it = __optionSet.begin(); it != __optionSet.end(); ++it) {
-               if (option == (**it))
-                       return it;
-       }
-       return __optionSet.end();
-}
diff --git a/src/device/system/Alarm.h b/src/device/system/Alarm.h
deleted file mode 100644 (file)
index 5535e5c..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _DEVICE_SYSTEM_STATUS_ALARM_H_
-#define _DEVICE_SYSTEM_STATUS_ALARM_H_
-
-#include <map>
-#include <set>
-#include <TimerManager.h>
-#include <ContextProvider.h>
-
-namespace ctx {
-
-       class DeviceStatusAlarm : public ContextProvider, ITimerListener {
-       public:
-               DeviceStatusAlarm();
-               ~DeviceStatusAlarm();
-
-               int subscribe(Json option, Json *requestResult);
-               int unsubscribe(Json option);
-
-               bool isSupported();
-               void submitTriggerItem();
-
-       protected:
-               bool onTimerExpired(int timerId);
-
-       private:
-               struct RefCountArray {
-                       int count[7];   /* reference counts for days of week*/
-                       RefCountArray();
-               };
-
-               struct TimerState {
-                       int timerId;
-                       int dayOfWeek; /* day of week, merged into one integer */
-                       TimerState() : timerId(-1), dayOfWeek(0) {}
-               };
-
-               typedef std::map<int, RefCountArray> RefCountMap;
-               typedef std::map<int, TimerState> TimerStateMap;
-               typedef std::set<Json*> OptionSet;
-
-               RefCountMap __refCountMap;
-               TimerStateMap __timerStateMap;
-               OptionSet __optionSet;
-               TimerManager __timerManager;
-
-               bool __add(int minute, int dayOfWeek);
-               bool __remove(int minute, int dayOfWeek);
-               bool __resetTimer(int hour);
-               void __clear();
-               void __handleUpdate(int hour, int min, int dayOfWeek);
-
-               int __getArrangedDayOfWeek(Json& option);
-               int __mergeDayOfWeek(int *refCnt);
-
-               bool __isMatched(Json& option, int time, std::string day);
-               OptionSet::iterator __findOption(Json& option);
-       };
-}
-
-#endif // _DEVICE_SYSTEM_STATUS_ALARM_H_
diff --git a/src/device/system/Battery.cpp b/src/device/system/Battery.cpp
deleted file mode 100644 (file)
index 94c3d58..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "SystemTypes.h"
-#include "Battery.h"
-
-using namespace ctx;
-
-DeviceStatusBattery::DeviceStatusBattery()
-       : DeviceProviderBase(DEVICE_ST_SUBJ_BATTERY)
-{
-}
-
-DeviceStatusBattery::~DeviceStatusBattery()
-{
-}
-
-bool DeviceStatusBattery::isSupported()
-{
-       return true;
-}
-
-void DeviceStatusBattery::submitTriggerItem()
-{
-       registerTriggerItem(OPS_SUBSCRIBE | OPS_READ,
-                       "{"
-                               "\"Level\":{\"type\":\"string\",\"values\":[\"Empty\",\"Critical\",\"Low\",\"Normal\",\"High\",\"Full\"]},"
-                               TRIG_BOOL_ITEM_DEF("IsCharging")
-                       "}",
-                       NULL);
-}
-
-void DeviceStatusBattery::__updateCb(device_callback_e deviceType, void* value, void* userData)
-{
-       IF_FAIL_VOID(deviceType == DEVICE_CALLBACK_BATTERY_LEVEL);
-
-       DeviceStatusBattery *instance = static_cast<DeviceStatusBattery*>(userData);
-       instance->__handleUpdate(deviceType, value);
-}
-
-void DeviceStatusBattery::__handleUpdate(device_callback_e deviceType, void* value)
-{
-       intptr_t level = (intptr_t)value;
-
-       const char* levelString = __transToString(level);
-       IF_FAIL_VOID(levelString);
-
-       Json dataRead;
-       dataRead.set(NULL, DEVICE_ST_LEVEL, levelString);
-
-       bool chargingState = false;
-       int ret = device_battery_is_charging(&chargingState);
-       IF_FAIL_VOID_TAG(ret == DEVICE_ERROR_NONE, _E, "Getting state failed");
-
-       dataRead.set(NULL, DEVICE_ST_IS_CHARGING, chargingState ? DEVICE_ST_TRUE : DEVICE_ST_FALSE);
-       publish(NULL, ERR_NONE, dataRead);
-}
-
-const char* DeviceStatusBattery::__transToString(intptr_t level)
-{
-       switch (level) {
-       case DEVICE_BATTERY_LEVEL_EMPTY:
-               return DEVICE_ST_EMPTY;
-
-       case DEVICE_BATTERY_LEVEL_CRITICAL:
-               return DEVICE_ST_CRITICAL;
-
-       case DEVICE_BATTERY_LEVEL_LOW:
-               return DEVICE_ST_LOW;
-
-       case DEVICE_BATTERY_LEVEL_HIGH:
-               return DEVICE_ST_NORMAL;
-
-       case DEVICE_BATTERY_LEVEL_FULL:
-       {
-               int percent;
-               device_battery_get_percent(&percent);
-
-               if (percent == 100) {
-                       return DEVICE_ST_FULL;
-               } else {
-                       return DEVICE_ST_HIGH;
-               }
-               break;
-       }
-
-       default:
-               _E("Invalid battery level");
-               return NULL;
-       }
-}
-
-int DeviceStatusBattery::subscribe()
-{
-       int ret = device_add_callback(DEVICE_CALLBACK_BATTERY_LEVEL, __updateCb, this);
-       IF_FAIL_RETURN(ret == DEVICE_ERROR_NONE, ERR_OPERATION_FAILED);
-       return ERR_NONE;
-}
-
-int DeviceStatusBattery::unsubscribe()
-{
-       int ret = device_remove_callback(DEVICE_CALLBACK_BATTERY_LEVEL, __updateCb);
-       IF_FAIL_RETURN(ret == DEVICE_ERROR_NONE, ERR_OPERATION_FAILED);
-       return ERR_NONE;
-}
-
-int DeviceStatusBattery::read()
-{
-       device_battery_level_e level;
-       Json dataRead;
-
-       int ret = device_battery_get_level_status(&level);
-       IF_FAIL_RETURN(ret == DEVICE_ERROR_NONE, ERR_OPERATION_FAILED);
-
-       const char* levelString = __transToString(level);
-       IF_FAIL_RETURN(levelString, ERR_OPERATION_FAILED);
-
-       dataRead.set(NULL, DEVICE_ST_LEVEL, levelString);
-
-       bool chargingState = false;
-       ret = device_battery_is_charging(&chargingState);
-       IF_FAIL_RETURN(ret == DEVICE_ERROR_NONE, ERR_OPERATION_FAILED);
-
-       dataRead.set(NULL, DEVICE_ST_IS_CHARGING, chargingState ? DEVICE_ST_TRUE : DEVICE_ST_FALSE);
-
-       replyToRead(NULL, ERR_NONE, dataRead);
-       return ERR_NONE;
-}
diff --git a/src/device/system/Battery.h b/src/device/system/Battery.h
deleted file mode 100644 (file)
index d016798..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _DEVICE_SYSTEM_STATUS_BATTERY_H_
-#define _DEVICE_SYSTEM_STATUS_BATTERY_H_
-
-#include <device/callback.h>
-#include <device/battery.h>
-#include "../DeviceProviderBase.h"
-
-namespace ctx {
-
-       class DeviceStatusBattery : public DeviceProviderBase {
-       public:
-               DeviceStatusBattery();
-               ~DeviceStatusBattery();
-
-               int subscribe();
-               int unsubscribe();
-               int read();
-
-               bool isSupported();
-               void submitTriggerItem();
-
-       private:
-               const char* __transToString(intptr_t level);
-               void __handleUpdate(device_callback_e deviceType, void* value);
-               static void __updateCb(device_callback_e deviceType, void* value, void* userData);
-       };
-}
-
-#endif // _DEVICE_SYSTEM_STATUS_BATTERY_H_
diff --git a/src/device/system/Headphone.cpp b/src/device/system/Headphone.cpp
deleted file mode 100644 (file)
index 0093af9..0000000
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "SystemTypes.h"
-#include "Headphone.h"
-
-#define HANDLING_DELAY 2000
-#define MAX_HANDLING_COUNT 3
-
-using namespace ctx;
-
-DeviceStatusHeadphone::DeviceStatusHeadphone() :
-       DeviceProviderBase(DEVICE_ST_SUBJ_HEADPHONE),
-       __connected(false),
-       __audioJackState(RUNTIME_INFO_AUDIO_JACK_STATUS_UNCONNECTED),
-       __btAudioState(false),
-       __btAudioCallbackOn(false),
-       __btEventHandlerAdded(false),
-       __btEventHandlingCount(0)
-{
-}
-
-DeviceStatusHeadphone::~DeviceStatusHeadphone()
-{
-}
-
-bool DeviceStatusHeadphone::isSupported()
-{
-       return true;
-}
-
-void DeviceStatusHeadphone::submitTriggerItem()
-{
-       registerTriggerItem(OPS_SUBSCRIBE | OPS_READ,
-                       "{"
-                               TRIG_BOOL_ITEM_DEF("IsConnected") ","
-                               "\"Type\":{\"type\":\"string\",\"values\":[\"Normal\",\"Headset\",\"Bluetooth\"]}"
-                       "}",
-                       NULL);
-}
-
-int DeviceStatusHeadphone::subscribe()
-{
-       __connected = __getCurrentStatus();
-
-       // Wired headphone
-       int ret = runtime_info_set_changed_cb(RUNTIME_INFO_KEY_AUDIO_JACK_STATUS, __onAudioJackStateChanged, this);
-       IF_FAIL_RETURN(ret == RUNTIME_INFO_ERROR_NONE, ERR_OPERATION_FAILED);
-
-       // Bluetooth headphone
-       __setBtAudioCallback();
-
-       return ERR_NONE;
-}
-
-int DeviceStatusHeadphone::unsubscribe()
-{
-       runtime_info_unset_changed_cb(RUNTIME_INFO_KEY_AUDIO_JACK_STATUS);
-       __unsetBtAudioCallback();
-
-       return ERR_NONE;
-}
-
-int DeviceStatusHeadphone::read()
-{
-       if (!__beingSubscribed)
-               __connected = __getCurrentStatus();
-
-       Json data;
-       __generateDataPacket(&data);
-       replyToRead(NULL, ERR_NONE, data);
-
-       return ERR_NONE;
-}
-
-void DeviceStatusHeadphone::__setBtAudioCallback()
-{
-       IF_FAIL_VOID(!__btAudioCallbackOn);
-       int ret;
-
-       ret = bt_initialize();
-       if (ret != BT_ERROR_NONE) {
-               _W("Bluetooth initialization failed");
-               return;
-       }
-
-       ret = bt_device_set_connection_state_changed_cb(__onBtConnectionChanged, this);
-       if (ret != BT_ERROR_NONE) {
-               bt_deinitialize();
-               return;
-       }
-
-       __btAudioCallbackOn = true;
-}
-
-void DeviceStatusHeadphone::__unsetBtAudioCallback()
-{
-       IF_FAIL_VOID(__btAudioCallbackOn);
-
-       bt_device_unset_connection_state_changed_cb();
-       bt_deinitialize();
-
-       __btAudioCallbackOn = false;
-}
-
-void DeviceStatusHeadphone::__setBtAudioState(bool state)
-{
-       __btAudioState = state;
-}
-
-bool DeviceStatusHeadphone::__getCurrentStatus()
-{
-       int ret;
-
-       // Wired audio
-       ret = runtime_info_get_value_int(RUNTIME_INFO_KEY_AUDIO_JACK_STATUS, &__audioJackState);
-       IF_FAIL_RETURN(ret == ERR_NONE, __connected);
-
-       // Bluetooth audio
-       __btAudioState = false;
-       ret = bt_initialize();
-       if (ret == BT_ERROR_NONE) {
-               bt_adapter_foreach_bonded_device(__onBtBond, this);
-               bt_deinitialize();
-       }
-
-       return ((__audioJackState != RUNTIME_INFO_AUDIO_JACK_STATUS_UNCONNECTED) || __btAudioState);
-}
-
-void DeviceStatusHeadphone::__generateDataPacket(Json* data)
-{
-       data->set(NULL, DEVICE_ST_IS_CONNECTED, __connected ? DEVICE_ST_TRUE : DEVICE_ST_FALSE);
-
-       switch (__audioJackState) {
-       case RUNTIME_INFO_AUDIO_JACK_STATUS_CONNECTED_3WIRE:
-               data->set(NULL, DEVICE_ST_TYPE, DEVICE_ST_NORMAL);
-               break;
-       case RUNTIME_INFO_AUDIO_JACK_STATUS_CONNECTED_4WIRE:
-               data->set(NULL, DEVICE_ST_TYPE, DEVICE_ST_HEADSET);
-               break;
-       default:
-               if (__btAudioState)
-                       data->set(NULL, DEVICE_ST_TYPE, DEVICE_ST_BLUETOOTH);
-               break;
-       }
-}
-
-bool DeviceStatusHeadphone::__handleUpdate()
-{
-       bool prevState = __connected;
-       __connected = ((__audioJackState != RUNTIME_INFO_AUDIO_JACK_STATUS_UNCONNECTED) || __btAudioState);
-
-       IF_FAIL_RETURN(prevState != __connected, false);
-
-       Json data;
-       __generateDataPacket(&data);
-       publish(NULL, ERR_NONE, data);
-       return true;
-}
-
-void DeviceStatusHeadphone::__handleAudioJackEvent()
-{
-       int ret = runtime_info_get_value_int(RUNTIME_INFO_KEY_AUDIO_JACK_STATUS, &__audioJackState);
-       IF_FAIL_VOID_TAG(ret == ERR_NONE, _E, "Getting runtime info failed");
-       __handleUpdate();
-}
-
-void DeviceStatusHeadphone::__onAudioJackStateChanged(runtime_info_key_e runtimeKey, void* userData)
-{
-       _D("EarJack");
-       DeviceStatusHeadphone *instance = static_cast<DeviceStatusHeadphone*>(userData);
-       instance->__handleAudioJackEvent();
-}
-
-void DeviceStatusHeadphone::__onBtConnectionChanged(bool connected, bt_device_connection_info_s *connInfo, void *userData)
-{
-       DeviceStatusHeadphone *instance = static_cast<DeviceStatusHeadphone*>(userData);
-       IF_FAIL_VOID(connected != instance->__btAudioState);
-       IF_FAIL_VOID(!instance->__btEventHandlerAdded);
-
-       if (connected) {
-               _D("BT state checking scheduled");
-               instance->__btEventHandlerAdded = true;
-               instance->__btEventHandlingCount = 0;
-               g_timeout_add(HANDLING_DELAY, __handleBtEvent, userData);
-       } else {
-               __handleBtEvent(userData);
-       }
-}
-
-gboolean DeviceStatusHeadphone::__handleBtEvent(gpointer data)
-{
-       _D("BT state checking started");
-       DeviceStatusHeadphone *instance = static_cast<DeviceStatusHeadphone*>(data);
-       instance->__btEventHandlerAdded = false;
-
-       instance->__setBtAudioState(false);
-       int err = bt_adapter_foreach_bonded_device(__onBtBond, data);
-       IF_FAIL_RETURN_TAG(err == BT_ERROR_NONE, FALSE, _E, "bt_adapter_foreach_bonded_device() failed");
-
-       instance->__btEventHandlingCount++;
-
-       if (instance->__handleUpdate() || instance->__btEventHandlingCount >= MAX_HANDLING_COUNT)
-               return FALSE;
-
-       return TRUE;
-}
-
-bool DeviceStatusHeadphone::__onBtBond(bt_device_info_s *deviceInfo, void* userData)
-{
-       if (deviceInfo->bt_class.major_device_class != BT_MAJOR_DEVICE_CLASS_AUDIO_VIDEO)
-               return true;
-
-       bool st = false;
-       int err = bt_device_is_profile_connected(deviceInfo->remote_address, BT_PROFILE_A2DP, &st);
-       IF_FAIL_RETURN_TAG(err == BT_ERROR_NONE, false, _E, "bt_device_is_profile_connected() failed");
-
-       if (st) {
-               DeviceStatusHeadphone *instance = static_cast<DeviceStatusHeadphone*>(userData);
-               instance->__setBtAudioState(true);
-               return false;
-       }
-
-       return true;
-}
diff --git a/src/device/system/Headphone.h b/src/device/system/Headphone.h
deleted file mode 100644 (file)
index 00edcfd..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _DEVICE_SYSTEM_STATUS_HEADPHONE_H_
-#define _DEVICE_STATUS_HEADPNOHE_H_
-
-#include <glib.h>
-#include <runtime_info.h>
-#include <bluetooth.h>
-#include "../DeviceProviderBase.h"
-
-namespace ctx {
-
-       class DeviceStatusHeadphone : public DeviceProviderBase {
-       public:
-               DeviceStatusHeadphone();
-               ~DeviceStatusHeadphone();
-
-               int subscribe();
-               int unsubscribe();
-               int read();
-
-               bool isSupported();
-               void submitTriggerItem();
-
-       private:
-               bool __connected;
-               int __audioJackState;
-               bool __btAudioState;
-               bool __btAudioCallbackOn;
-               bool __btEventHandlerAdded;
-               int __btEventHandlingCount;
-
-               bool __getCurrentStatus();
-               void __setBtAudioCallback();
-               void __unsetBtAudioCallback();
-               void __setBtAudioState(bool state);
-
-               void __generateDataPacket(Json* data);
-               bool __handleUpdate();
-               void __handleAudioJackEvent();
-               static gboolean __handleBtEvent(gpointer data);
-
-               static void __onAudioJackStateChanged(runtime_info_key_e runtimeKey, void* userData);
-               static void __onBtConnectionChanged(bool connected, bt_device_connection_info_s *connInfo, void *userData);
-               static bool __onBtBond(bt_device_info_s *deviceInfo, void* userData);
-       };
-}
-
-#endif // _DEVICE_SYSTEM_STATUS_HEADPHONE_H_
diff --git a/src/device/system/Psmode.cpp b/src/device/system/Psmode.cpp
deleted file mode 100644 (file)
index c52b176..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "SystemTypes.h"
-#include "Psmode.h"
-
-using namespace ctx;
-
-DeviceStatusPsmode::DeviceStatusPsmode() :
-       DeviceProviderBase(DEVICE_ST_SUBJ_PSMODE)
-{
-}
-
-DeviceStatusPsmode::~DeviceStatusPsmode()
-{
-}
-
-bool DeviceStatusPsmode::isSupported()
-{
-       return true;
-}
-
-void DeviceStatusPsmode::submitTriggerItem()
-{
-       registerTriggerItem(OPS_SUBSCRIBE | OPS_READ,
-                       "{" TRIG_BOOL_ITEM_DEF("IsEnabled") "}", NULL);
-}
-
-void DeviceStatusPsmode::__updateCb(keynode_t *node, void* userData)
-{
-       DeviceStatusPsmode *instance = static_cast<DeviceStatusPsmode*>(userData);
-       instance->__handleUpdate(node);
-}
-
-void DeviceStatusPsmode::__handleUpdate(keynode_t *node)
-{
-       int status;
-       Json dataRead;
-
-       status = vconf_keynode_get_int(node);
-       IF_FAIL_VOID_TAG(status >= 0, _E, "Getting state failed");
-
-       dataRead.set(NULL, DEVICE_ST_IS_ENABLED, status == 0 ? DEVICE_ST_FALSE : DEVICE_ST_TRUE);
-
-       publish(NULL, ERR_NONE, dataRead);
-}
-
-int DeviceStatusPsmode::subscribe()
-{
-       int ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_PSMODE, __updateCb, this);
-       IF_FAIL_RETURN(ret == VCONF_OK, ERR_OPERATION_FAILED);
-       return ERR_NONE;
-}
-
-int DeviceStatusPsmode::unsubscribe()
-{
-       int ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_PSMODE, __updateCb);
-       IF_FAIL_RETURN(ret == VCONF_OK, ERR_OPERATION_FAILED);
-       return ERR_NONE;
-}
-
-int DeviceStatusPsmode::read()
-{
-       int mode;
-       int ret = vconf_get_int(VCONFKEY_SETAPPL_PSMODE, &mode);
-       IF_FAIL_RETURN(ret == VCONF_OK, ERR_OPERATION_FAILED);
-
-       Json dataRead;
-       dataRead.set(NULL, DEVICE_ST_IS_ENABLED, mode == 0 ? DEVICE_ST_FALSE : DEVICE_ST_TRUE);
-
-       replyToRead(NULL, ERR_NONE, dataRead);
-       return ERR_NONE;
-}
diff --git a/src/device/system/Psmode.h b/src/device/system/Psmode.h
deleted file mode 100644 (file)
index d324ac3..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _DEVICE_SYSTEM_STATUS_POWER_SAVING_MODE_H_
-#define _DEVICE_SYSTEM_STATUS_POWER_SAVING_MODE_H_
-
-#include <vconf.h>
-#include "../DeviceProviderBase.h"
-
-namespace ctx {
-
-       class DeviceStatusPsmode : public DeviceProviderBase {
-       public:
-               DeviceStatusPsmode();
-               ~DeviceStatusPsmode();
-
-               int subscribe();
-               int unsubscribe();
-               int read();
-
-               bool isSupported();
-               void submitTriggerItem();
-
-       private:
-               void __handleUpdate(keynode_t *node);
-               static void __updateCb(keynode_t *node, void* userData);
-       };
-}
-
-#endif // _DEVICE_SYSTEM_STATUS_POWER_SAVING_MODE_H_
diff --git a/src/device/system/SystemTypes.h b/src/device/system/SystemTypes.h
deleted file mode 100644 (file)
index 3129a36..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef        _DEVICE_SYSTEM_STATUS_TYPES_H_
-#define        _DEVICE_SYSTEM_STATUS_TYPES_H_
-
-// Subject
-#define DEVICE_ST_SUBJ_BATTERY                 "system/battery"
-#define DEVICE_ST_SUBJ_CHARGER                 "system/charger"
-#define DEVICE_ST_SUBJ_HEADPHONE               "system/headphone"
-#define DEVICE_ST_SUBJ_WIFI                            "system/wifi"
-#define DEVICE_ST_SUBJ_USB                             "system/usb"
-#define DEVICE_ST_SUBJ_GPS                             "system/gps"
-#define DEVICE_ST_SUBJ_PSMODE                  "system/psmode"
-#define DEVICE_ST_SUBJ_ALARM                   "device/alarm"
-#define DEVICE_ST_SUBJ_TIME                            "device/time"
-
-// Data Key
-#define DEVICE_ST_EVENT                        "Event"
-#define DEVICE_ST_STATE                        "State"
-#define DEVICE_ST_TYPE                 "Type"
-#define DEVICE_ST_LEVEL                        "Level"
-#define DEVICE_ST_BSSID                        "BSSID"
-#define DEVICE_ST_IS_CONNECTED "IsConnected"
-#define DEVICE_ST_IS_ENABLED   "IsEnabled"
-#define DEVICE_ST_IS_CHARGING  "IsCharging"
-#define DEVICE_ST_DETECTED             "Detected"
-#define DEVICE_ST_TIME_OF_DAY  "TimeOfDay"
-#define DEVICE_ST_DAY_OF_WEEK  "DayOfWeek"
-#define DEVICE_ST_DAY_OF_MONTH "DayOfMonth"
-
-// Data Value
-#define DEVICE_ST_TRUE                 1
-#define DEVICE_ST_FALSE                        0
-#define DEVICE_ST_ENTER                        "Enter"
-#define DEVICE_ST_EXIT                 "Exit"
-#define DEVICE_ST_DISABLED             "Disabled"
-#define DEVICE_ST_CONNECTED            "Connected"
-#define DEVICE_ST_UNCONNECTED  "Unconnected"
-#define DEVICE_ST_SEARCHING            "Searching"
-#define DEVICE_ST_EMPTY                        "Empty"
-#define DEVICE_ST_CRITICAL             "Critical"
-#define DEVICE_ST_LOW                  "Low"
-#define DEVICE_ST_NORMAL               "Normal"
-#define DEVICE_ST_HIGH                 "High"
-#define DEVICE_ST_FULL                 "Full"
-#define DEVICE_ST_HEADSET              "Headset"
-#define DEVICE_ST_BLUETOOTH            "Bluetooth"
-
-#define TRIG_BOOL_ITEM_DEF(sbj)        "\"" sbj "\":{\"type\":\"integer\",\"min\":0,\"max\":1}"
-
-#endif //_DEVICE_SYSTEM_STATUS_TYPES_H_
diff --git a/src/device/system/Time.cpp b/src/device/system/Time.cpp
deleted file mode 100644 (file)
index 6fa0c81..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <TimerManager.h>
-#include "SystemTypes.h"
-#include "Time.h"
-
-using namespace ctx;
-
-DeviceStatusTime::DeviceStatusTime() :
-       DeviceProviderBase(DEVICE_ST_SUBJ_TIME)
-{
-}
-
-DeviceStatusTime::~DeviceStatusTime()
-{
-}
-
-bool DeviceStatusTime::isSupported()
-{
-       return true;
-}
-
-void DeviceStatusTime::submitTriggerItem()
-{
-       registerTriggerItem(OPS_READ,
-                       "{"
-                               "\"TimeOfDay\":{\"type\":\"integer\",\"min\":0,\"max\":1439},"
-                               "\"DayOfWeek\":{\"type\":\"string\",\"values\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\",\"Sun\",\"Weekday\",\"Weekend\"]},"
-                               "\"DayOfMonth\":{\"type\":\"integer\",\"min\":1,\"max\":31}"
-                       "}",
-                       NULL);
-}
-
-int DeviceStatusTime::subscribe()
-{
-       return ERR_NOT_SUPPORTED;
-}
-
-int DeviceStatusTime::unsubscribe()
-{
-       return ERR_NOT_SUPPORTED;
-}
-
-int DeviceStatusTime::read()
-{
-       time_t rawtime;
-       struct tm timeInfo;
-
-       time(&rawtime);
-       tzset();
-       localtime_r(&rawtime, &timeInfo);
-
-       int dayOfMonth = timeInfo.tm_mday;
-       int minuteOfDay = timeInfo.tm_hour * 60 + timeInfo.tm_min;
-       std::string dayOfWeek = TimerManager::dowToStr(0x01 << timeInfo.tm_wday);
-
-       Json dataRead;
-       dataRead.set(NULL, DEVICE_ST_DAY_OF_MONTH, dayOfMonth);
-       dataRead.set(NULL, DEVICE_ST_DAY_OF_WEEK, dayOfWeek);
-       dataRead.set(NULL, DEVICE_ST_TIME_OF_DAY, minuteOfDay);
-
-       _I("Time: %02d:%02d, Day of Week: %s, Day of Month: %d", timeInfo.tm_hour, timeInfo.tm_min, dayOfWeek.c_str(), dayOfMonth);
-
-       replyToRead(NULL, ERR_NONE, dataRead);
-
-       return ERR_NONE;
-}
diff --git a/src/device/system/Time.h b/src/device/system/Time.h
deleted file mode 100644 (file)
index e5e1112..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _DEVICE_SYSTEM_STATUS_TIME_H_
-#define _DEVICE_SYSTEM_STATUS_TIME_H_
-
-#include "../DeviceProviderBase.h"
-
-namespace ctx {
-
-       class DeviceStatusTime : public DeviceProviderBase {
-       public:
-               DeviceStatusTime();
-               ~DeviceStatusTime();
-
-               int subscribe();
-               int unsubscribe();
-               int read();
-
-               bool isSupported();
-               void submitTriggerItem();
-       };
-}
-
-#endif // _DEVICE_SYSTEM_STATUS_TIME_H_
diff --git a/src/device/system/Wifi.cpp b/src/device/system/Wifi.cpp
deleted file mode 100644 (file)
index 5f6cca7..0000000
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <SharedVars.h>
-#include "SystemTypes.h"
-#include "Wifi.h"
-
-using namespace ctx;
-
-DeviceStatusWifi::DeviceStatusWifi() :
-       DeviceProviderBase(DEVICE_ST_SUBJ_WIFI),
-       __lastState(UNKNOWN),
-       __isInitialized(false),
-       __isActivated(false),
-       __connState(WIFI_CONNECTION_STATE_FAILURE)
-{
-       IF_FAIL_VOID_TAG(__startMonitor(), _W, "WiFi monitor initialization failed");
-
-       if (!__getCurrentState()) {
-               __stopMonitor();
-               _W("Getting current WiFi status failed");
-       }
-}
-
-DeviceStatusWifi::~DeviceStatusWifi()
-{
-       __stopMonitor();
-}
-
-bool DeviceStatusWifi::isSupported()
-{
-       return getSystemInfoBool("tizen.org/feature/network.wifi");
-}
-
-void DeviceStatusWifi::submitTriggerItem()
-{
-       registerTriggerItem(OPS_SUBSCRIBE | OPS_READ,
-                       "{"
-                               "\"State\":{\"type\":\"string\",\"values\":[\"Disabled\",\"Unconnected\",\"Connected\"]},"
-                               "\"BSSID\":{\"type\":\"string\"}"
-                       "}",
-                       NULL);
-}
-
-bool DeviceStatusWifi::__getCurrentState()
-{
-       int err;
-
-       if (!__isInitialized) {
-               err = wifi_initialize();
-               IF_FAIL_RETURN_TAG(err == WIFI_ERROR_NONE, false, _E, "wifi_initialize() failed");
-       }
-
-       err = wifi_is_activated(&__isActivated);
-       IF_FAIL_RETURN_TAG(err == WIFI_ERROR_NONE, false, _E, "wifi_is_activated() failed");
-
-       err = wifi_get_connection_state(&__connState);
-       IF_FAIL_RETURN_TAG(err == WIFI_ERROR_NONE, false, _E, "wifi_get_connection_state() failed");
-
-       if (__isActivated) {
-               if (__connState == WIFI_CONNECTION_STATE_CONNECTED) {
-                       __lastState = CONNECTED;
-                       __getBssid();
-               } else {
-                       __lastState = UNCONNECTED;
-                       __clearBssid();
-               }
-       } else {
-               __lastState = DISABLED;
-               __clearBssid();
-       }
-
-       if (!__isInitialized)
-               wifi_deinitialize();
-
-       return true;
-}
-
-bool DeviceStatusWifi::__getBssid()
-{
-       int err;
-       char *strBuf = NULL;
-       wifi_ap_h ap = NULL;
-
-       err = wifi_get_connected_ap(&ap);
-       IF_FAIL_RETURN_TAG(err == WIFI_ERROR_NONE, false, _E, "wifi_get_connected_ap() failed");
-
-       wifi_ap_get_bssid(ap, &strBuf);
-       __bssid = (strBuf != NULL ? strBuf : "");
-       g_free(strBuf);
-
-       wifi_ap_destroy(ap);
-
-       if (__bssid.empty())
-               _W("Failed to get BSSID");
-
-       SharedVars().set(SharedVars::WIFI_BSSID, __bssid);
-       _D("BSSID: %s", __bssid.c_str());
-
-       return !__bssid.empty();
-}
-
-void DeviceStatusWifi::__clearBssid()
-{
-       __bssid.clear();
-       SharedVars().clear(SharedVars::WIFI_BSSID);
-       _D("No WiFi connection");
-}
-
-bool DeviceStatusWifi::__getResponsePacket(Json* data)
-{
-       switch (__lastState) {
-       case DISABLED:
-               data->set(NULL, DEVICE_ST_STATE, DEVICE_ST_DISABLED);
-               break;
-
-       case UNCONNECTED:
-               data->set(NULL, DEVICE_ST_STATE, DEVICE_ST_UNCONNECTED);
-               break;
-
-       case CONNECTED:
-               data->set(NULL, DEVICE_ST_STATE, DEVICE_ST_CONNECTED);
-               data->set(NULL, DEVICE_ST_BSSID, __bssid);
-               break;
-
-       default:
-               return false;
-       }
-
-       return true;
-}
-
-int DeviceStatusWifi::read()
-{
-       IF_FAIL_RETURN(__getCurrentState(), ERR_OPERATION_FAILED);
-
-       Json dataRead;
-       if (__getResponsePacket(&dataRead)) {
-               replyToRead(NULL, ERR_NONE, dataRead);
-               return ERR_NONE;
-       }
-
-       return ERR_OPERATION_FAILED;
-}
-
-bool DeviceStatusWifi::__startMonitor()
-{
-       IF_FAIL_RETURN(!__isInitialized, true);
-
-       int err;
-       err = wifi_initialize();
-       IF_FAIL_RETURN_TAG(err == WIFI_ERROR_NONE, false, _E, "wifi_initialize() failed");
-
-       err = wifi_set_device_state_changed_cb(__deviceStateChangedCb, this);
-       IF_FAIL_CATCH_TAG(err == WIFI_ERROR_NONE, _E, "wifi_set_device_state_changed_cb() failed");
-
-       err = wifi_set_connection_state_changed_cb(__connectionStateChangedCb, this);
-       IF_FAIL_CATCH_TAG(err == WIFI_ERROR_NONE, _E, "wifi_set_connection_state_changed_cb() failed");
-
-       __isInitialized = true;
-       return true;
-
-CATCH:
-       wifi_deinitialize();
-       return false;
-}
-
-void DeviceStatusWifi::__stopMonitor()
-{
-       IF_FAIL_VOID(__isInitialized);
-
-       wifi_unset_device_state_changed_cb();
-       wifi_unset_connection_state_changed_cb();
-       wifi_deinitialize();
-       __isInitialized = false;
-}
-
-int DeviceStatusWifi::subscribe()
-{
-#if 0
-       IF_FAIL_RETURN(__startMonitor(), ERR_OPERATION_FAILED);
-       if (!__getCurrentState()) {
-               __stopMonitor();
-               return ERR_OPERATION_FAILED;
-       }
-#endif
-
-       return ERR_NONE;
-}
-
-int DeviceStatusWifi::unsubscribe()
-{
-#if 0
-       __stopMonitor();
-#endif
-       return ERR_NONE;
-}
-
-void DeviceStatusWifi::__handleUpdate()
-{
-       int prevState = __lastState;
-
-       if (__isActivated) {
-               if (__connState == WIFI_CONNECTION_STATE_CONNECTED) {
-                       __lastState = CONNECTED;
-               } else {
-                       __lastState = UNCONNECTED;
-               }
-       } else {
-               __lastState = DISABLED;
-       }
-
-       if (__lastState != prevState) {
-               if (__lastState == CONNECTED) {
-                       __getBssid();
-               } else {
-                       __clearBssid();
-               }
-
-               Json data;
-               if (__beingSubscribed && __getResponsePacket(&data))
-                       publish(NULL, ERR_NONE, data);
-       }
-}
-
-void DeviceStatusWifi::__deviceStateChangedCb(wifi_device_state_e state, void *userData)
-{
-       DeviceStatusWifi *instance = static_cast<DeviceStatusWifi*>(userData);
-       instance->__isActivated = (state == WIFI_DEVICE_STATE_ACTIVATED);
-       instance->__handleUpdate();
-}
-
-void DeviceStatusWifi::__connectionStateChangedCb(wifi_connection_state_e state, wifi_ap_h ap, void *userData)
-{
-       DeviceStatusWifi *instance = static_cast<DeviceStatusWifi*>(userData);
-       instance->__connState = state;
-       instance->__handleUpdate();
-}
diff --git a/src/device/system/Wifi.h b/src/device/system/Wifi.h
deleted file mode 100644 (file)
index 82cebb2..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _DEVICE_SYSTEM_STATUS_WIFI_H_
-#define _DEVICE_SYSTEM_STATUS_WIFI_H_
-
-#include <string>
-#include <wifi.h>
-#include "../DeviceProviderBase.h"
-
-namespace ctx {
-
-       class DeviceStatusWifi : public DeviceProviderBase {
-       public:
-               DeviceStatusWifi();
-               ~DeviceStatusWifi();
-
-               int subscribe();
-               int unsubscribe();
-               int read();
-
-               bool isSupported();
-               void submitTriggerItem();
-
-       private:
-               enum InternalState {
-                       UNKNOWN = -1,
-                       DISABLED = 0,
-                       UNCONNECTED,
-                       CONNECTED,
-               };
-
-               int __lastState;
-               bool __isInitialized;
-               bool __isActivated;
-               wifi_connection_state_e __connState;
-               std::string __bssid;
-
-               bool __getCurrentState();
-               bool __getBssid();
-               void __clearBssid();
-               bool __getResponsePacket(Json* data);
-               void __handleUpdate();
-               bool __startMonitor();
-               void __stopMonitor();
-               static void __deviceStateChangedCb(wifi_device_state_e state, void *userData);
-               static void __connectionStateChangedCb(wifi_connection_state_e state, wifi_ap_h ap, void *userData);
-       };
-}
-
-#endif // _CONTEXT_SYSTEM_STATUS_WIFI_H_
diff --git a/src/device/system/runtime_info/Charger.cpp b/src/device/system/runtime_info/Charger.cpp
deleted file mode 100644 (file)
index 8cdf40a..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "../SystemTypes.h"
-#include "Charger.h"
-
-using namespace ctx;
-
-DeviceStatusCharger::DeviceStatusCharger() :
-       DeviceStatusRuntimeInfo(DEVICE_ST_SUBJ_CHARGER, RUNTIME_INFO_KEY_CHARGER_CONNECTED)
-{
-}
-
-DeviceStatusCharger::~DeviceStatusCharger()
-{
-}
-
-bool DeviceStatusCharger::isSupported()
-{
-       return true;
-}
-
-void DeviceStatusCharger::submitTriggerItem()
-{
-       registerTriggerItem(OPS_SUBSCRIBE | OPS_READ,
-                       "{" TRIG_BOOL_ITEM_DEF("IsConnected") "}", NULL);
-}
-
-void DeviceStatusCharger::handleUpdate()
-{
-       bool chargerStatus = false;
-
-       int ret = runtime_info_get_value_bool(RUNTIME_INFO_KEY_CHARGER_CONNECTED, &chargerStatus);
-       IF_FAIL_VOID_TAG(ret == RUNTIME_INFO_ERROR_NONE, _E, "Getting runtime info failed");
-
-       Json dataRead;
-       dataRead.set(NULL, DEVICE_ST_IS_CONNECTED, chargerStatus ? DEVICE_ST_TRUE : DEVICE_ST_FALSE);
-
-       publish(NULL, ERR_NONE, dataRead);
-}
-
-int DeviceStatusCharger::read()
-{
-       bool chargerStatus = false;
-       Json dataRead;
-
-       int ret = runtime_info_get_value_bool(RUNTIME_INFO_KEY_CHARGER_CONNECTED, &chargerStatus);
-       IF_FAIL_RETURN_TAG(ret == RUNTIME_INFO_ERROR_NONE, ERR_OPERATION_FAILED, _E, "Getting runtime info failed");
-
-       dataRead.set(NULL, DEVICE_ST_IS_CONNECTED, chargerStatus ? DEVICE_ST_TRUE : DEVICE_ST_FALSE);
-
-       replyToRead(NULL, ERR_NONE, dataRead);
-       return ERR_NONE;
-}
diff --git a/src/device/system/runtime_info/Charger.h b/src/device/system/runtime_info/Charger.h
deleted file mode 100644 (file)
index a6746a3..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _DEVICE_SYSTEM_STATUS_CHARGER_
-#define _DEVICE_SYSTEM_STATUS_CHARGER_
-
-#include "RuntimeInfoBase.h"
-
-namespace ctx {
-
-       class DeviceStatusCharger : public DeviceStatusRuntimeInfo {
-       public:
-               DeviceStatusCharger();
-               ~DeviceStatusCharger();
-
-               int read();
-
-               bool isSupported();
-               void submitTriggerItem();
-
-       protected:
-               void handleUpdate();
-       };
-}
-
-#endif // _DEVICE_SYSTEM_STATUS_CHARGER_H_
diff --git a/src/device/system/runtime_info/Gps.cpp b/src/device/system/runtime_info/Gps.cpp
deleted file mode 100644 (file)
index d2bc301..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "../SystemTypes.h"
-#include "Gps.h"
-
-using namespace ctx;
-
-static const char* __getStatusString(int gpsStatus)
-{
-       switch (gpsStatus) {
-       case RUNTIME_INFO_GPS_STATUS_DISABLED:
-               return DEVICE_ST_DISABLED;
-
-       case RUNTIME_INFO_GPS_STATUS_SEARCHING:
-               return DEVICE_ST_SEARCHING;
-
-       case RUNTIME_INFO_GPS_STATUS_CONNECTED:
-               return DEVICE_ST_CONNECTED;
-
-       default:
-               _E("Unknown GPS status: %d", gpsStatus);
-               return NULL;
-       }
-}
-
-DeviceStatusGps::DeviceStatusGps() :
-       DeviceStatusRuntimeInfo(DEVICE_ST_SUBJ_GPS, RUNTIME_INFO_KEY_GPS_STATUS)
-{
-}
-
-DeviceStatusGps::~DeviceStatusGps()
-{
-}
-
-bool DeviceStatusGps::isSupported()
-{
-       return getSystemInfoBool("tizen.org/feature/location.gps");
-}
-
-void DeviceStatusGps::submitTriggerItem()
-{
-       registerTriggerItem(OPS_SUBSCRIBE | OPS_READ,
-                       "{"
-                               "\"State\":{\"type\":\"string\",\"values\":[\"Disabled\",\"Searching\",\"Connected\"]}"
-                       "}",
-                       NULL);
-}
-
-void DeviceStatusGps::handleUpdate()
-{
-       int gpsStatus;
-       int ret = runtime_info_get_value_int(RUNTIME_INFO_KEY_GPS_STATUS, &gpsStatus);
-       IF_FAIL_VOID_TAG(ret == RUNTIME_INFO_ERROR_NONE, _E, "Getting runtime info failed");
-
-       Json dataRead;
-
-       const char* stateStr = __getStatusString(gpsStatus);
-       IF_FAIL_VOID(stateStr);
-
-       dataRead.set(NULL, DEVICE_ST_STATE, stateStr);
-
-       publish(NULL, ERR_NONE, dataRead);
-}
-
-int DeviceStatusGps::read()
-{
-       int gpsStatus;
-       Json dataRead;
-
-       int ret = runtime_info_get_value_int(RUNTIME_INFO_KEY_GPS_STATUS, &gpsStatus);
-       IF_FAIL_RETURN_TAG(ret == RUNTIME_INFO_ERROR_NONE, ERR_OPERATION_FAILED, _E, "Getting runtime info failed");
-
-       const char* stateStr = __getStatusString(gpsStatus);
-       IF_FAIL_RETURN(stateStr, ERR_OPERATION_FAILED);
-
-       dataRead.set(NULL, DEVICE_ST_STATE, stateStr);
-
-       replyToRead(NULL, ERR_NONE, dataRead);
-       return ERR_NONE;
-}
diff --git a/src/device/system/runtime_info/Gps.h b/src/device/system/runtime_info/Gps.h
deleted file mode 100644 (file)
index 87acd1b..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _DEVICE_SYSTEM_STATUS_GPS_H_
-#define _DEVICE_SYSTEM_STATUS_GPS_H_
-
-#include "RuntimeInfoBase.h"
-
-namespace ctx {
-
-       class DeviceStatusGps : public DeviceStatusRuntimeInfo {
-       public:
-               DeviceStatusGps();
-               ~DeviceStatusGps();
-
-               int read();
-
-               bool isSupported();
-               void submitTriggerItem();
-
-       protected:
-               void handleUpdate();
-       };
-}
-
-#endif // _DEVICE_SYSTEM_STATUS_GPS_H_
diff --git a/src/device/system/runtime_info/RuntimeInfoBase.cpp b/src/device/system/runtime_info/RuntimeInfoBase.cpp
deleted file mode 100644 (file)
index 1f745ad..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "RuntimeInfoBase.h"
-
-using namespace ctx;
-
-DeviceStatusRuntimeInfo::DeviceStatusRuntimeInfo(const char *subject, runtime_info_key_e key) :
-       DeviceProviderBase(subject),
-       __infoKey(key)
-{
-}
-
-runtime_info_key_e DeviceStatusRuntimeInfo::__getInfoKey()
-{
-       return __infoKey;
-}
-
-void DeviceStatusRuntimeInfo::updateCb(runtime_info_key_e runtimeKey, void* userData)
-{
-       DeviceStatusRuntimeInfo *instance = static_cast<DeviceStatusRuntimeInfo*>(userData);
-       IF_FAIL_VOID_TAG(runtimeKey == instance->__getInfoKey(), _W, "Runtime info key mismatch");
-       instance->handleUpdate();
-}
-
-int DeviceStatusRuntimeInfo::subscribe()
-{
-       int ret = runtime_info_set_changed_cb(__infoKey, updateCb, this);
-       IF_FAIL_RETURN(ret == RUNTIME_INFO_ERROR_NONE, ERR_OPERATION_FAILED);
-       return ERR_NONE;
-}
-
-int DeviceStatusRuntimeInfo::unsubscribe()
-{
-       int ret = runtime_info_unset_changed_cb(__infoKey);
-       IF_FAIL_RETURN(ret == RUNTIME_INFO_ERROR_NONE, ERR_OPERATION_FAILED);
-       return ERR_NONE;
-}
diff --git a/src/device/system/runtime_info/RuntimeInfoBase.h b/src/device/system/runtime_info/RuntimeInfoBase.h
deleted file mode 100644 (file)
index a2e4a88..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _DEVICE_SYSTEM_STATUS_RUNTIME_INFO_BASE_H_
-#define _DEVICE_SYSTEM_STATUS_RUNTIME_INFO_BASE_H_
-
-#include <runtime_info.h>
-#include "../../DeviceProviderBase.h"
-
-namespace ctx {
-
-       class DeviceStatusRuntimeInfo : public DeviceProviderBase {
-       public:
-               DeviceStatusRuntimeInfo(const char *subject, runtime_info_key_e key);
-
-               int subscribe();
-               int unsubscribe();
-               virtual int read() = 0;
-
-       protected:
-               runtime_info_key_e __infoKey;
-
-               virtual ~DeviceStatusRuntimeInfo(){}
-               static void updateCb(runtime_info_key_e runtimeKey, void* userData);
-               virtual void handleUpdate() = 0;
-
-       private:
-               runtime_info_key_e __getInfoKey();
-       };
-}
-
-#endif // _DEVICE_SYSTEM_STATUS_RUNTIME_INFO_BASE_H_
diff --git a/src/device/system/runtime_info/Usb.cpp b/src/device/system/runtime_info/Usb.cpp
deleted file mode 100644 (file)
index e0aa6af..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "../SystemTypes.h"
-#include "Usb.h"
-
-using namespace ctx;
-
-DeviceStatusUsb::DeviceStatusUsb()     :
-       DeviceStatusRuntimeInfo(DEVICE_ST_SUBJ_USB, RUNTIME_INFO_KEY_USB_CONNECTED)
-{
-}
-
-DeviceStatusUsb::~DeviceStatusUsb()
-{
-}
-
-bool DeviceStatusUsb::isSupported()
-{
-       return getSystemInfoBool("tizen.org/feature/usb.host");
-}
-
-void DeviceStatusUsb::submitTriggerItem()
-{
-       registerTriggerItem(OPS_SUBSCRIBE | OPS_READ,
-                       "{" TRIG_BOOL_ITEM_DEF("IsConnected") "}", NULL);
-}
-
-void DeviceStatusUsb::handleUpdate()
-{
-       bool status = false;
-
-       int ret = runtime_info_get_value_bool(RUNTIME_INFO_KEY_USB_CONNECTED, &status);
-       IF_FAIL_VOID_TAG(ret == RUNTIME_INFO_ERROR_NONE, _E, "Getting runtime info failed");
-
-       Json dataRead;
-       dataRead.set(NULL, DEVICE_ST_IS_CONNECTED, status ? DEVICE_ST_TRUE : DEVICE_ST_FALSE);
-
-       publish(NULL, ERR_NONE, dataRead);
-}
-
-int DeviceStatusUsb::read()
-{
-       bool status = false;
-       Json dataRead;
-
-       int ret = runtime_info_get_value_bool(RUNTIME_INFO_KEY_USB_CONNECTED, &status);
-       IF_FAIL_RETURN_TAG(ret == RUNTIME_INFO_ERROR_NONE, ERR_OPERATION_FAILED, _E, "Getting runtime info failed");
-
-       dataRead.set(NULL, DEVICE_ST_IS_CONNECTED, status ? DEVICE_ST_TRUE : DEVICE_ST_FALSE);
-
-       replyToRead(NULL, ERR_NONE, dataRead);
-       return ERR_NONE;
-}
diff --git a/src/device/system/runtime_info/Usb.h b/src/device/system/runtime_info/Usb.h
deleted file mode 100644 (file)
index fc8678c..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _DEVICE_SYSTEM_STATUS_USB_H_
-#define _DEVICE_SYSTEM_STATUS_USB_H_
-
-#include "RuntimeInfoBase.h"
-
-namespace ctx {
-
-       class DeviceStatusUsb : public DeviceStatusRuntimeInfo {
-       public:
-               DeviceStatusUsb();
-               ~DeviceStatusUsb();
-
-               int read();
-
-               bool isSupported();
-               void submitTriggerItem();
-
-       protected:
-               void handleUpdate();
-       };
-}
-
-#endif // _DEVICE_SYSTEM_STATUS_USB_H_
diff --git a/src/email/Email.cpp b/src/email/Email.cpp
new file mode 100644 (file)
index 0000000..fbf5c8d
--- /dev/null
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <email-api-etc.h>
+#include "Email.h"
+
+using namespace ctx;
+
+SocialStatusEmail::SocialStatusEmail() :
+       DeviceProviderBase(SOCIAL_ST_SUBJ_EMAIL),
+       __dbusSignalId(-1),
+       __dbusWatcher(DBusType::SESSION)
+{
+}
+
+SocialStatusEmail::~SocialStatusEmail()
+{
+}
+
+bool SocialStatusEmail::isSupported()
+{
+       return getSystemInfoBool("tizen.org/feature/network.telephony");
+}
+
+void SocialStatusEmail::submitTriggerItem()
+{
+       registerTriggerItem(OPS_SUBSCRIBE,
+                       "{"
+                               "\"Event\":{\"type\":\"string\",\"values\":[\"Received\",\"Sent\"]}"
+                       "}",
+                       NULL);
+}
+
+void SocialStatusEmail::onSignal(const char* sender, const char* path, const char* iface, const char* name, GVariant* param)
+{
+       gint subType = 0;
+       gint gi1 = 0;
+       const gchar *gc = NULL;
+       gint gi2 = 0;
+       gint gi3 = 0;
+
+       g_variant_get(param, "(ii&sii)", &subType, &gi1, &gc, &gi2, &gi3);
+
+       if (subType == NOTI_DOWNLOAD_FINISH) {
+               //TODO: Check if this signal actually means that there are new mails
+               _D("sub type: %d, gi1: %d, gc: %s, gi2: %d, gi3: %d", subType, gi1, gc, gi2, gi3);
+               Json dataUpdated;
+               dataUpdated.set(NULL, SOCIAL_ST_EVENT, SOCIAL_ST_RECEIVED);
+               publish(NULL, ERR_NONE, dataUpdated);
+
+       } else if (subType == NOTI_SEND_FINISH) {
+               _D("sub type: %d, gi1: %d, gc: %s, gi2: %d, gi3: %d", subType, gi1, gc, gi2, gi3);
+               Json dataUpdated;
+               dataUpdated.set(NULL, SOCIAL_ST_EVENT, SOCIAL_ST_SENT);
+               publish(NULL, ERR_NONE, dataUpdated);
+       }
+}
+
+
+int SocialStatusEmail::subscribe()
+{
+       __dbusSignalId = __dbusWatcher.watch(NULL, NULL, "User.Email.NetworkStatus", "email", this);
+       IF_FAIL_RETURN_TAG(__dbusSignalId >= 0, ERR_OPERATION_FAILED, _E, "Email dbus signal subscription failed");
+       return ERR_NONE;
+}
+
+
+int SocialStatusEmail::unsubscribe()
+{
+       __dbusWatcher.unwatch(__dbusSignalId);
+       return ERR_NONE;
+}
diff --git a/src/email/Email.h b/src/email/Email.h
new file mode 100644 (file)
index 0000000..b78eb33
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_SOCIAL_STATUS_EMAIL_H_
+#define _CONTEXT_SOCIAL_STATUS_EMAIL_H_
+
+#include <DBusSignalWatcher.h>
+#include "../shared/SocialTypes.h"
+#include "../shared/DeviceProviderBase.h"
+
+namespace ctx {
+
+       class SocialStatusEmail : public DeviceProviderBase, public IDBusSignalListener {
+       public:
+               SocialStatusEmail();
+               ~SocialStatusEmail();
+
+               int subscribe();
+               int unsubscribe();
+
+               bool isSupported();
+               void submitTriggerItem();
+
+               void onSignal(const char *sender, const char *path, const char *iface, const char *name, GVariant *param);
+
+       private:
+               int64_t __dbusSignalId;
+               DBusSignalWatcher __dbusWatcher;
+       };
+}
+
+#endif // _CONTEXT_SOCIAL_STATUS_EMAIL_H_
diff --git a/src/geofence/GeofenceMonitorHandle.cpp b/src/geofence/GeofenceMonitorHandle.cpp
new file mode 100644 (file)
index 0000000..868966a
--- /dev/null
@@ -0,0 +1,220 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <Types.h>
+#include <Json.h>
+#include "PlaceGeofenceProvider.h"
+#include "GeofenceMonitorHandle.h"
+
+using namespace ctx;
+
+GeofenceMonitorHandle::GeofenceMonitorHandle(PlaceGeofenceProvider *provider) :
+       __provider(provider),
+       __placeId(-1),
+       __prevState(GEOFENCE_STATE_UNCERTAIN),
+       __geoHandle(NULL)
+{
+}
+
+GeofenceMonitorHandle::~GeofenceMonitorHandle()
+{
+       __stopMonitor();
+}
+
+bool GeofenceMonitorHandle::startMonitor(int placeId)
+{
+       _D("Starts to monitor Place-%d", placeId);
+
+       IF_FAIL_RETURN(placeId >= 0, false);
+       IF_FAIL_RETURN_TAG(__geoHandle == NULL, false, _E, "Re-starting MyPlace monitor");
+
+       geofence_manager_create(&__geoHandle);
+       IF_FAIL_RETURN_TAG(__geoHandle, false, _E, "Geofence initialization failed");
+
+       int ret;
+
+       ret = geofence_manager_set_geofence_state_changed_cb(__geoHandle, __fenceStateCb, this);
+       IF_FAIL_CATCH_TAG(ret == GEOFENCE_MANAGER_ERROR_NONE, _E, "Setting state callback failed");
+
+       ret = geofence_manager_set_geofence_event_cb(__geoHandle, __fenceEventCb, this);
+       IF_FAIL_CATCH_TAG(ret == GEOFENCE_MANAGER_ERROR_NONE, _E, "Setting event callback failed");
+
+       ret = geofence_manager_foreach_place_geofence_list(__geoHandle, placeId, __fenceListCb, this);
+       IF_FAIL_CATCH_TAG(ret == GEOFENCE_MANAGER_ERROR_NONE, _E, "Getting fence list failed");
+
+       __placeId = placeId;
+       return true;
+
+CATCH:
+       __stopMonitor();
+       return false;
+}
+
+int GeofenceMonitorHandle::getPlaceId()
+{
+       return __placeId;
+}
+
+void GeofenceMonitorHandle::__stopMonitor()
+{
+       _D("Stops monitoring Place-%d", __placeId);
+
+       //TODO: Do we need to stop all geofences explicitly?
+       if (__geoHandle) {
+               geofence_manager_destroy(__geoHandle);
+               __geoHandle = NULL;
+       }
+
+       __geoStateMap.clear();
+       __placeId = -1;
+       __prevState = GEOFENCE_STATE_UNCERTAIN;
+}
+
+bool GeofenceMonitorHandle::__startFence(int fenceId)
+{
+       int ret;
+
+       ret = geofence_manager_start(__geoHandle, fenceId);
+       IF_FAIL_RETURN_TAG(ret == GEOFENCE_MANAGER_ERROR_NONE, true, _W, "Starting failed");
+
+       geofence_status_h status;
+       ret = geofence_status_create(fenceId, &status);
+       IF_FAIL_RETURN_TAG(ret == GEOFENCE_MANAGER_ERROR_NONE, true, _W, "Getting status failed");
+
+       geofence_state_e state = GEOFENCE_STATE_UNCERTAIN;
+       geofence_status_get_state(status, &state);
+       geofence_status_destroy(status);
+
+       __geoStateMap[fenceId] = state;
+
+       return true;
+}
+
+void GeofenceMonitorHandle::__removeFence(int fenceId)
+{
+       geofence_manager_stop(__geoHandle, fenceId);
+       __geoStateMap.erase(fenceId);
+}
+
+void GeofenceMonitorHandle::__updateFence(int fenceId, geofence_manage_e manage)
+{
+       switch (manage) {
+       case GEOFENCE_MANAGE_PLACE_REMOVED:
+               _W("[Place-%d] Removed", __placeId);
+               __stopMonitor();
+               break;
+       case GEOFENCE_MANAGE_FENCE_ADDED:
+               _I("[Place %d] Fence-%d added", __placeId, fenceId);
+               __startFence(fenceId);
+               __emitStateChange();
+               break;
+       case GEOFENCE_MANAGE_FENCE_REMOVED:
+               _I("[Place-%d] Fence-%d removed", __placeId, fenceId);
+               __removeFence(fenceId);
+               __emitStateChange();
+               break;
+       case GEOFENCE_MANAGE_FENCE_STARTED:
+               _D("[Place-%d] Fence-%d started", __placeId, fenceId);
+               break;
+       case GEOFENCE_MANAGE_FENCE_STOPPED:
+               _D("[Place-%d] Fence-%d stopped", __placeId, fenceId);
+               //TODO: Do we need to restart this?
+               break;
+       default:
+               _D("[Place-%d] Ignoring the manage event %d", __placeId, manage);
+               break;
+       }
+}
+
+void GeofenceMonitorHandle::__updateState(int fenceId, geofence_state_e state)
+{
+       __geoStateMap[fenceId] = state;
+}
+
+void GeofenceMonitorHandle::__emitStateChange()
+{
+       geofence_state_e currentState = GEOFENCE_STATE_UNCERTAIN;
+       int outCount = 0;
+
+       for (auto it = __geoStateMap.begin(); it != __geoStateMap.end(); ++it) {
+               if (it->second == GEOFENCE_STATE_IN) {
+                       currentState = GEOFENCE_STATE_IN;
+                       break;
+               } else if (it->second == GEOFENCE_STATE_OUT) {
+                       ++outCount;
+               }
+       }
+
+       if (currentState != GEOFENCE_STATE_IN && outCount > 0) {
+               currentState = GEOFENCE_STATE_OUT;
+       }
+
+       if (currentState == __prevState) {
+               return;
+       }
+
+       __prevState = currentState;
+
+       Json option;
+       option.set(NULL, PLACE_GEOFENCE_PLACE_ID, __placeId);
+
+       Json data;
+       data.set(NULL, PLACE_GEOFENCE_PLACE_ID, __placeId);
+       data.set(NULL, PLACE_GEOFENCE_EVENT, __getStateString(currentState));
+
+       __provider->publish(option, ERR_NONE, data);
+}
+
+const char* GeofenceMonitorHandle::__getStateString(geofence_state_e state)
+{
+       switch (state) {
+       case GEOFENCE_STATE_IN:
+               return PLACE_GEOFENCE_IN;
+       case GEOFENCE_STATE_OUT:
+               return PLACE_GEOFENCE_OUT;
+       case GEOFENCE_STATE_UNCERTAIN:
+               return PLACE_GEOFENCE_UNCERTAIN;
+       default:
+               return PLACE_GEOFENCE_UNCERTAIN;
+       }
+}
+
+bool GeofenceMonitorHandle::__fenceListCb(int geofenceId, geofence_h fence, int fenceIndex, int fenceCount, void* userData)
+{
+       _D("FenceID: %d, Index: %d, Count: %d", geofenceId, fenceIndex, fenceCount);
+       IF_FAIL_RETURN(fenceCount > 0, false);
+
+       GeofenceMonitorHandle *handle = reinterpret_cast<GeofenceMonitorHandle*>(userData);
+       return handle->__startFence(geofenceId);
+}
+
+void GeofenceMonitorHandle::__fenceEventCb(int placeId, int geofenceId, geofence_manager_error_e error, geofence_manage_e manage, void* userData)
+{
+       IF_FAIL_VOID_TAG(error == GEOFENCE_MANAGER_ERROR_NONE, _W, "Geofence error: %d", error);
+
+       GeofenceMonitorHandle *handle = reinterpret_cast<GeofenceMonitorHandle*>(userData);
+
+       IF_FAIL_VOID_TAG(placeId == handle->getPlaceId(), _W, "Mismatched Place ID");
+
+       handle->__updateFence(geofenceId, manage);
+}
+
+void GeofenceMonitorHandle::__fenceStateCb(int geofenceId, geofence_state_e state, void* userData)
+{
+       GeofenceMonitorHandle *handle = reinterpret_cast<GeofenceMonitorHandle*>(userData);
+       handle->__updateState(geofenceId, state);
+       handle->__emitStateChange();
+}
diff --git a/src/geofence/GeofenceMonitorHandle.h b/src/geofence/GeofenceMonitorHandle.h
new file mode 100644 (file)
index 0000000..6bdd301
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_GEOFENCE_MONITOR_HANDLE_H_
+#define _CONTEXT_PLACE_GEOFENCE_MONITOR_HANDLE_H_
+
+#include <string>
+#include <map>
+#include <geofence_manager.h>
+
+namespace ctx {
+
+       class PlaceGeofenceProvider;
+
+       class GeofenceMonitorHandle {
+       public:
+               GeofenceMonitorHandle(PlaceGeofenceProvider *provider);
+               ~GeofenceMonitorHandle();
+
+               bool startMonitor(int placeId);
+               int getPlaceId();
+
+       private:
+               PlaceGeofenceProvider *__provider;
+               int __placeId;
+               geofence_state_e __prevState;
+               geofence_manager_h __geoHandle;
+               std::map<int, geofence_state_e> __geoStateMap;
+
+               void __emitStateChange();
+               void __stopMonitor();
+               bool __startFence(int fenceId);
+               void __removeFence(int fenceId);
+               void __updateFence(int fenceId, geofence_manage_e manage);
+               void __updateState(int fenceId, geofence_state_e state);
+
+               static const char* __getStateString(geofence_state_e state);
+
+               static bool __fenceListCb(int geofenceId, geofence_h fence, int fenceIndex, int fenceCount, void* userData);
+               static void __fenceEventCb(int placeId, int geofenceId, geofence_manager_error_e error, geofence_manage_e manage, void* userData);
+               static void __fenceStateCb(int geofenceId, geofence_state_e state, void* userData);
+       };
+
+}      /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_GEOFENCE_MONITOR_HANDLE_H_ */
diff --git a/src/geofence/PlaceGeofenceProvider.cpp b/src/geofence/PlaceGeofenceProvider.cpp
new file mode 100644 (file)
index 0000000..e7aff50
--- /dev/null
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <geofence_manager.h>
+#include "GeofenceMonitorHandle.h"
+#include "PlaceGeofenceProvider.h"
+
+using namespace ctx;
+
+PlaceGeofenceProvider::PlaceGeofenceProvider() :
+       ContextProvider(PLACE_SUBJ_GEOFENCE)
+{
+}
+
+PlaceGeofenceProvider::~PlaceGeofenceProvider()
+{
+       for (auto& it : __handleMap) {
+               delete it.second;
+       }
+
+       __handleMap.clear();
+}
+
+bool PlaceGeofenceProvider::isSupported()
+{
+       bool supported = false;
+       int ret = geofence_manager_is_supported(&supported);
+       IF_FAIL_RETURN_TAG(ret == GEOFENCE_MANAGER_ERROR_NONE, false, _E, "geofence_manager_is_supported() failed");
+       return supported;
+}
+
+void PlaceGeofenceProvider::submitTriggerItem()
+{
+       registerTriggerItem(OPS_SUBSCRIBE,
+                       "{"
+                               "\"Event\":{\"type\":\"string\",\"values\":[\"In\",\"Out\"]}"
+                       "}",
+                       "{"
+                               "\"PlaceId\":{\"type\":\"integer\",\"min\":1}"
+                       "}");
+}
+
+int PlaceGeofenceProvider::subscribe(Json option, Json *requestResult)
+{
+       int placeId = -1;
+       option.get(NULL, PLACE_GEOFENCE_PLACE_ID, &placeId);
+       IF_FAIL_RETURN_TAG(placeId != -1, ERR_INVALID_PARAMETER, _E, "Getting PlaceID failed");
+
+       auto it = __handleMap.find(placeId);
+       if (it != __handleMap.end()) {
+               _D("Place ID %d is being monitored already", placeId);
+               return ERR_NONE;
+       }
+
+       GeofenceMonitorHandle *handle = new(std::nothrow) GeofenceMonitorHandle(this);
+       ASSERT_ALLOC(handle);
+
+       bool ret = handle->startMonitor(placeId);
+       if (!ret) {
+               _E("Monitoring Place ID %d failed", placeId);
+               delete handle;
+               return ERR_OPERATION_FAILED;
+       }
+
+       __handleMap[placeId] = handle;
+
+       return ERR_NONE;
+}
+
+int PlaceGeofenceProvider::unsubscribe(Json option)
+{
+       int placeId = -1;
+       option.get(NULL, PLACE_GEOFENCE_PLACE_ID, &placeId);
+       IF_FAIL_RETURN_TAG(placeId != -1, ERR_INVALID_PARAMETER, _E, "Getting PlaceID failed");
+
+       auto it = __handleMap.find(placeId);
+       if (it == __handleMap.end()) {
+               _D("Place ID %d is not being monitored", placeId);
+               return ERR_NONE;
+       }
+
+       delete it->second;
+       __handleMap.erase(it);
+
+       return ERR_NONE;
+}
diff --git a/src/geofence/PlaceGeofenceProvider.h b/src/geofence/PlaceGeofenceProvider.h
new file mode 100644 (file)
index 0000000..e6ebf2f
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_GEOFENCE_PROVIDER_H_
+#define _CONTEXT_PLACE_GEOFENCE_PROVIDER_H_
+
+#include <map>
+#include <ContextProvider.h>
+#include "PlaceGeofenceTypes.h"
+
+namespace ctx {
+
+       class GeofenceMonitorHandle;
+
+       class PlaceGeofenceProvider : public ContextProvider {
+       public:
+               PlaceGeofenceProvider();
+               ~PlaceGeofenceProvider();
+
+               int subscribe(Json option, Json *requestResult);
+               int unsubscribe(Json option);
+
+               bool isSupported();
+               void submitTriggerItem();
+
+       private:
+               std::map<int, GeofenceMonitorHandle*> __handleMap;
+       };
+
+}      /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_GEOFENCE_PROVIDER_H_ */
diff --git a/src/geofence/PlaceGeofenceTypes.h b/src/geofence/PlaceGeofenceTypes.h
new file mode 100644 (file)
index 0000000..fa66a41
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_GEOFENCE_TYPES_H_
+#define _CONTEXT_PLACE_GEOFENCE_TYPES_H_
+
+// Subject
+#define PLACE_SUBJ_GEOFENCE            "place/geofence"
+
+// Privilege
+#define PLACE_PRIV_GEOFENCE            "location"
+
+// Option & Data Key
+#define PLACE_GEOFENCE_PLACE_ID        "PlaceId"
+#define PLACE_GEOFENCE_EVENT   "Event"
+
+// Data Value
+#define        PLACE_GEOFENCE_UNCERTAIN        "Uncertain"
+#define        PLACE_GEOFENCE_IN               "In"
+#define        PLACE_GEOFENCE_OUT              "Out"
+
+#endif /* End of _CONTEXT_PLACE_GEOFENCE_TYPES_H_ */
diff --git a/src/headphone/Headphone.cpp b/src/headphone/Headphone.cpp
new file mode 100644 (file)
index 0000000..3ee6dfa
--- /dev/null
@@ -0,0 +1,237 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "Headphone.h"
+
+#define HANDLING_DELAY 2000
+#define MAX_HANDLING_COUNT 3
+
+using namespace ctx;
+
+DeviceStatusHeadphone::DeviceStatusHeadphone() :
+       DeviceProviderBase(DEVICE_ST_SUBJ_HEADPHONE),
+       __connected(false),
+       __audioJackState(RUNTIME_INFO_AUDIO_JACK_STATUS_UNCONNECTED),
+       __btAudioState(false),
+       __btAudioCallbackOn(false),
+       __btEventHandlerAdded(false),
+       __btEventHandlingCount(0)
+{
+}
+
+DeviceStatusHeadphone::~DeviceStatusHeadphone()
+{
+}
+
+bool DeviceStatusHeadphone::isSupported()
+{
+       return true;
+}
+
+void DeviceStatusHeadphone::submitTriggerItem()
+{
+       registerTriggerItem(OPS_SUBSCRIBE | OPS_READ,
+                       "{"
+                               TRIG_BOOL_ITEM_DEF("IsConnected") ","
+                               "\"Type\":{\"type\":\"string\",\"values\":[\"Normal\",\"Headset\",\"Bluetooth\"]}"
+                       "}",
+                       NULL);
+}
+
+int DeviceStatusHeadphone::subscribe()
+{
+       __connected = __getCurrentStatus();
+
+       // Wired headphone
+       int ret = runtime_info_set_changed_cb(RUNTIME_INFO_KEY_AUDIO_JACK_STATUS, __onAudioJackStateChanged, this);
+       IF_FAIL_RETURN(ret == RUNTIME_INFO_ERROR_NONE, ERR_OPERATION_FAILED);
+
+       // Bluetooth headphone
+       __setBtAudioCallback();
+
+       return ERR_NONE;
+}
+
+int DeviceStatusHeadphone::unsubscribe()
+{
+       runtime_info_unset_changed_cb(RUNTIME_INFO_KEY_AUDIO_JACK_STATUS);
+       __unsetBtAudioCallback();
+
+       return ERR_NONE;
+}
+
+int DeviceStatusHeadphone::read()
+{
+       if (!__beingSubscribed)
+               __connected = __getCurrentStatus();
+
+       Json data;
+       __generateDataPacket(&data);
+       replyToRead(NULL, ERR_NONE, data);
+
+       return ERR_NONE;
+}
+
+void DeviceStatusHeadphone::__setBtAudioCallback()
+{
+       IF_FAIL_VOID(!__btAudioCallbackOn);
+       int ret;
+
+       ret = bt_initialize();
+       if (ret != BT_ERROR_NONE) {
+               _W("Bluetooth initialization failed");
+               return;
+       }
+
+       ret = bt_device_set_connection_state_changed_cb(__onBtConnectionChanged, this);
+       if (ret != BT_ERROR_NONE) {
+               bt_deinitialize();
+               return;
+       }
+
+       __btAudioCallbackOn = true;
+}
+
+void DeviceStatusHeadphone::__unsetBtAudioCallback()
+{
+       IF_FAIL_VOID(__btAudioCallbackOn);
+
+       bt_device_unset_connection_state_changed_cb();
+       bt_deinitialize();
+
+       __btAudioCallbackOn = false;
+}
+
+void DeviceStatusHeadphone::__setBtAudioState(bool state)
+{
+       __btAudioState = state;
+}
+
+bool DeviceStatusHeadphone::__getCurrentStatus()
+{
+       int ret;
+
+       // Wired audio
+       ret = runtime_info_get_value_int(RUNTIME_INFO_KEY_AUDIO_JACK_STATUS, &__audioJackState);
+       IF_FAIL_RETURN(ret == ERR_NONE, __connected);
+
+       // Bluetooth audio
+       __btAudioState = false;
+       ret = bt_initialize();
+       if (ret == BT_ERROR_NONE) {
+               bt_adapter_foreach_bonded_device(__onBtBond, this);
+               bt_deinitialize();
+       }
+
+       return ((__audioJackState != RUNTIME_INFO_AUDIO_JACK_STATUS_UNCONNECTED) || __btAudioState);
+}
+
+void DeviceStatusHeadphone::__generateDataPacket(Json* data)
+{
+       data->set(NULL, DEVICE_ST_IS_CONNECTED, __connected ? DEVICE_ST_TRUE : DEVICE_ST_FALSE);
+
+       switch (__audioJackState) {
+       case RUNTIME_INFO_AUDIO_JACK_STATUS_CONNECTED_3WIRE:
+               data->set(NULL, DEVICE_ST_TYPE, DEVICE_ST_NORMAL);
+               break;
+       case RUNTIME_INFO_AUDIO_JACK_STATUS_CONNECTED_4WIRE:
+               data->set(NULL, DEVICE_ST_TYPE, DEVICE_ST_HEADSET);
+               break;
+       default:
+               if (__btAudioState)
+                       data->set(NULL, DEVICE_ST_TYPE, DEVICE_ST_BLUETOOTH);
+               break;
+       }
+}
+
+bool DeviceStatusHeadphone::__handleUpdate()
+{
+       bool prevState = __connected;
+       __connected = ((__audioJackState != RUNTIME_INFO_AUDIO_JACK_STATUS_UNCONNECTED) || __btAudioState);
+
+       IF_FAIL_RETURN(prevState != __connected, false);
+
+       Json data;
+       __generateDataPacket(&data);
+       publish(NULL, ERR_NONE, data);
+       return true;
+}
+
+void DeviceStatusHeadphone::__handleAudioJackEvent()
+{
+       int ret = runtime_info_get_value_int(RUNTIME_INFO_KEY_AUDIO_JACK_STATUS, &__audioJackState);
+       IF_FAIL_VOID_TAG(ret == ERR_NONE, _E, "Getting runtime info failed");
+       __handleUpdate();
+}
+
+void DeviceStatusHeadphone::__onAudioJackStateChanged(runtime_info_key_e runtimeKey, void* userData)
+{
+       _D("EarJack");
+       DeviceStatusHeadphone *instance = static_cast<DeviceStatusHeadphone*>(userData);
+       instance->__handleAudioJackEvent();
+}
+
+void DeviceStatusHeadphone::__onBtConnectionChanged(bool connected, bt_device_connection_info_s *connInfo, void *userData)
+{
+       DeviceStatusHeadphone *instance = static_cast<DeviceStatusHeadphone*>(userData);
+       IF_FAIL_VOID(connected != instance->__btAudioState);
+       IF_FAIL_VOID(!instance->__btEventHandlerAdded);
+
+       if (connected) {
+               _D("BT state checking scheduled");
+               instance->__btEventHandlerAdded = true;
+               instance->__btEventHandlingCount = 0;
+               g_timeout_add(HANDLING_DELAY, __handleBtEvent, userData);
+       } else {
+               __handleBtEvent(userData);
+       }
+}
+
+gboolean DeviceStatusHeadphone::__handleBtEvent(gpointer data)
+{
+       _D("BT state checking started");
+       DeviceStatusHeadphone *instance = static_cast<DeviceStatusHeadphone*>(data);
+       instance->__btEventHandlerAdded = false;
+
+       instance->__setBtAudioState(false);
+       int err = bt_adapter_foreach_bonded_device(__onBtBond, data);
+       IF_FAIL_RETURN_TAG(err == BT_ERROR_NONE, FALSE, _E, "bt_adapter_foreach_bonded_device() failed");
+
+       instance->__btEventHandlingCount++;
+
+       if (instance->__handleUpdate() || instance->__btEventHandlingCount >= MAX_HANDLING_COUNT)
+               return FALSE;
+
+       return TRUE;
+}
+
+bool DeviceStatusHeadphone::__onBtBond(bt_device_info_s *deviceInfo, void* userData)
+{
+       if (deviceInfo->bt_class.major_device_class != BT_MAJOR_DEVICE_CLASS_AUDIO_VIDEO)
+               return true;
+
+       bool st = false;
+       int err = bt_device_is_profile_connected(deviceInfo->remote_address, BT_PROFILE_A2DP, &st);
+       IF_FAIL_RETURN_TAG(err == BT_ERROR_NONE, false, _E, "bt_device_is_profile_connected() failed");
+
+       if (st) {
+               DeviceStatusHeadphone *instance = static_cast<DeviceStatusHeadphone*>(userData);
+               instance->__setBtAudioState(true);
+               return false;
+       }
+
+       return true;
+}
diff --git a/src/headphone/Headphone.h b/src/headphone/Headphone.h
new file mode 100644 (file)
index 0000000..2fdd780
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_HEADPHONE_H_
+#define _CONTEXT_HEADPNOHE_H_
+
+#include <glib.h>
+#include <runtime_info.h>
+#include <bluetooth.h>
+#include "../shared/SystemTypes.h"
+#include "../shared/DeviceProviderBase.h"
+
+namespace ctx {
+
+       class DeviceStatusHeadphone : public DeviceProviderBase {
+       public:
+               DeviceStatusHeadphone();
+               ~DeviceStatusHeadphone();
+
+               int subscribe();
+               int unsubscribe();
+               int read();
+
+               bool isSupported();
+               void submitTriggerItem();
+
+       private:
+               bool __connected;
+               int __audioJackState;
+               bool __btAudioState;
+               bool __btAudioCallbackOn;
+               bool __btEventHandlerAdded;
+               int __btEventHandlingCount;
+
+               bool __getCurrentStatus();
+               void __setBtAudioCallback();
+               void __unsetBtAudioCallback();
+               void __setBtAudioState(bool state);
+
+               void __generateDataPacket(Json* data);
+               bool __handleUpdate();
+               void __handleAudioJackEvent();
+               static gboolean __handleBtEvent(gpointer data);
+
+               static void __onAudioJackStateChanged(runtime_info_key_e runtimeKey, void* userData);
+               static void __onBtConnectionChanged(bool connected, bt_device_connection_info_s *connInfo, void *userData);
+               static bool __onBtBond(bt_device_info_s *deviceInfo, void* userData);
+       };
+}
+
+#endif // _CONTEXT_HEADPHONE_H_
diff --git a/src/media-stats/DbHandle.cpp b/src/media-stats/DbHandle.cpp
new file mode 100644 (file)
index 0000000..e8f0f03
--- /dev/null
@@ -0,0 +1,126 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <sstream>
+#include <Types.h>
+#include "../shared/SystemInfo.h"
+#include "MediaStatisticsTypes.h"
+#include "DbHandle.h"
+
+using namespace ctx;
+
+MediaDbHandle::MediaDbHandle(ContextProvider *provider) :
+       StatsDbHandleBase(provider)
+{
+}
+
+MediaDbHandle::~MediaDbHandle()
+{
+}
+
+int MediaDbHandle::read(Json filter)
+{
+       //TODO: filter validation (in the API side?)
+       std::string query;
+       const char *subject = reqProvider->getSubject();
+
+       if (STR_EQ(subject, MEDIA_SUBJ_PEAK_TIME_FOR_MUSIC)) {
+               query = createSqlPeakTime(MEDIA_TYPE_MUSIC, filter);
+
+       } else if (STR_EQ(subject, MEDIA_SUBJ_PEAK_TIME_FOR_VIDEO)) {
+               query = createSqlPeakTime(MEDIA_TYPE_VIDEO, filter);
+
+       } else if (STR_EQ(subject, MEDIA_SUBJ_COMMON_SETTING_FOR_MUSIC)) {
+               query = createSqlCommonSetting(MEDIA_TYPE_MUSIC, filter);
+
+       } else if (STR_EQ(subject, MEDIA_SUBJ_COMMON_SETTING_FOR_VIDEO)) {
+               query = createSqlCommonSetting(MEDIA_TYPE_VIDEO, filter);
+
+       } else if (STR_EQ(subject, MEDIA_SUBJ_MUSIC_FREQUENCY)) {
+               isTriggerItem = true;
+               query = createSqlFrequency(MEDIA_TYPE_MUSIC, filter);
+
+       } else if (STR_EQ(subject, MEDIA_SUBJ_VIDEO_FREQUENCY)) {
+               isTriggerItem = true;
+               query = createSqlFrequency(MEDIA_TYPE_VIDEO, filter);
+       }
+
+       IF_FAIL_RETURN(!query.empty(), ERR_OPERATION_FAILED);
+
+       bool ret = executeQuery(filter, query.c_str());
+       IF_FAIL_RETURN(ret, ERR_OPERATION_FAILED);
+
+       return ERR_NONE;
+}
+
+std::string MediaDbHandle::createWhereClause(int mediaType, Json filter)
+{
+       std::stringstream whereClause;
+
+       whereClause << CX_MEDIA_TYPE " = " << mediaType << " AND ";
+       whereClause << StatsDbHandleBase::createWhereClause(filter);
+
+       return whereClause.str();
+}
+
+std::string MediaDbHandle::createSqlPeakTime(int mediaType, Json filter)
+{
+       std::string where = createWhereClause(mediaType, filter);
+       return StatsDbHandleBase::createSqlPeakTime(filter, MEDIA_TABLE_NAME, where);
+}
+
+std::string MediaDbHandle::createSqlCommonSetting(int mediaType, Json filter)
+{
+       std::string where = createWhereClause(mediaType, filter);
+       return StatsDbHandleBase::createSqlCommonSetting(filter, MEDIA_TABLE_NAME, where);
+}
+
+std::string MediaDbHandle::createSqlFrequency(int mediaType, Json filter)
+{
+       Json filterCleaned;
+       std::string weekStr;
+       std::string timeOfDay;
+
+       if (filter.get(NULL, STATS_DAY_OF_WEEK, &weekStr))
+               filterCleaned.set(NULL, STATS_DAY_OF_WEEK, weekStr);
+
+       if (filter.get(NULL, STATS_TIME_OF_DAY, &timeOfDay))
+               filterCleaned.set(NULL, STATS_TIME_OF_DAY, timeOfDay);
+
+       std::string whereClause = createWhereClause(mediaType, filterCleaned);
+
+       std::stringstream query;
+       query <<
+               "SELECT IFNULL(COUNT(*),0) AS " STATS_TOTAL_COUNT \
+               " FROM " MEDIA_TABLE_NAME \
+               " WHERE " << whereClause;
+
+       return query.str();
+}
+
+void MediaDbHandle::replyTriggerItem(int error, Json &jsonResult)
+{
+       IF_FAIL_VOID_TAG(STR_EQ(reqProvider->getSubject(), MEDIA_SUBJ_MUSIC_FREQUENCY) ||
+               STR_EQ(reqProvider->getSubject(), MEDIA_SUBJ_VIDEO_FREQUENCY), _E, "Invalid subject");
+
+       Json results;
+       int val;
+
+       jsonResult.get(NULL, STATS_TOTAL_COUNT, &val);
+       results.set(NULL, STATS_TOTAL_COUNT, val);
+
+       reqProvider->replyToRead(reqFilter, error, results);
+}
diff --git a/src/media-stats/DbHandle.h b/src/media-stats/DbHandle.h
new file mode 100644 (file)
index 0000000..8b7f1c1
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_STATS_MEDIA_DB_HANDLE_H_
+#define _CONTEXT_STATS_MEDIA_DB_HANDLE_H_
+
+#include <string>
+#include <Json.h>
+#include "../shared/DbHandleBase.h"
+
+namespace ctx {
+       class MediaDbHandle : public StatsDbHandleBase {
+       public:
+               MediaDbHandle(ContextProvider *provider);
+               ~MediaDbHandle();
+
+               int read(Json filter);
+
+       protected:
+               std::string createWhereClause(int mediaType, Json filter);
+               std::string createSqlPeakTime(int mediaType, Json filter);
+               std::string createSqlCommonSetting(int mediaType, Json filter);
+               std::string createSqlFrequency(int mediaType, Json filter);
+               void replyTriggerItem(int error, Json &jsonResult);
+       };
+}
+
+#endif /* End of _CONTEXT_STATS_MEDIA_DB_HANDLE_H_ */
diff --git a/src/media-stats/MediaContentMonitor.cpp b/src/media-stats/MediaContentMonitor.cpp
new file mode 100644 (file)
index 0000000..78ff0ef
--- /dev/null
@@ -0,0 +1,149 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <time.h>
+#include <Types.h>
+#include "../shared/SystemInfo.h"
+#include "MediaStatisticsTypes.h"
+#include "DbHandle.h"
+#include "MediaContentMonitor.h"
+
+#define PLAYCOUNT_RETENTION_PERIOD 259200      /* 1 month in secs */
+#define ONE_DAY_IN_SEC 86400
+
+ctx::MediaContentMonitor::MediaContentMonitor() :
+       __started(false),
+       __lastCleanupTime(0)
+{
+       __dbManager.createTable(0, MEDIA_TABLE_NAME, MEDIA_TABLE_COLUMNS, NULL, NULL);
+       __dbManager.execute(0, MEDIA_PLAYCOUNT_TABLE_SCHEMA, NULL);
+
+       __started = __startMonitoring();
+}
+
+ctx::MediaContentMonitor::~MediaContentMonitor()
+{
+       if (__started)
+               __stopMonitoring();
+}
+
+bool ctx::MediaContentMonitor::__startMonitoring()
+{
+       int err;
+       err = media_content_connect();
+       IF_FAIL_RETURN_TAG(err == MEDIA_CONTENT_ERROR_NONE, false, _E, "media_content_connect() failed");
+
+       err = media_content_set_db_updated_cb(__onMediaContentDbUpdated, this);
+       if (err != MEDIA_CONTENT_ERROR_NONE) {
+               media_content_disconnect();
+               _E("media_content_set_db_updated_cb() failed");
+               return false;
+       }
+
+       return true;
+}
+
+void ctx::MediaContentMonitor::__stopMonitoring()
+{
+       media_content_unset_db_updated_cb();
+       media_content_disconnect();
+}
+
+void ctx::MediaContentMonitor::__onMediaContentDbUpdated(
+               media_content_error_e error, int pid,
+               media_content_db_update_item_type_e updateItem,
+               media_content_db_update_type_e updateType,
+               media_content_type_e mediaType,
+               char *uuid, char *path, char *mimeType, void *userData)
+{
+       IF_FAIL_VOID(error == MEDIA_CONTENT_ERROR_NONE && uuid != NULL);
+       IF_FAIL_VOID(updateItem == MEDIA_ITEM_FILE && updateType == MEDIA_CONTENT_UPDATE);
+       IF_FAIL_VOID(mediaType == MEDIA_CONTENT_TYPE_MUSIC || mediaType == MEDIA_CONTENT_TYPE_VIDEO);
+
+       media_info_h media = NULL;
+       media_info_get_media_from_db(uuid, &media);
+       IF_FAIL_VOID_TAG(media, _E, "media_info_get_media_from_db() failed");
+
+       int cnt = -1;
+       media_info_get_played_count(media, &cnt);
+       media_info_destroy(media);
+       IF_FAIL_VOID_TAG(cnt >= 0, _E, "Invalid play count");
+
+       MediaContentMonitor *instance = static_cast<MediaContentMonitor*>(userData);
+       instance->__updatePlayCount(uuid,
+                       (mediaType == MEDIA_CONTENT_TYPE_MUSIC) ? MEDIA_TYPE_MUSIC : MEDIA_TYPE_VIDEO,
+                       cnt);
+}
+
+void ctx::MediaContentMonitor::__appendCleanupQuery(std::stringstream &query)
+{
+       int timestamp = static_cast<int>(time(NULL));
+       IF_FAIL_VOID(timestamp - __lastCleanupTime >= ONE_DAY_IN_SEC);
+
+       __lastCleanupTime = timestamp;
+
+       query <<
+               "DELETE FROM Log_MediaPlayCount WHERE UTC < strftime('%s', 'now') - " << PLAYCOUNT_RETENTION_PERIOD << ";" \
+               "DELETE FROM " MEDIA_TABLE_NAME " WHERE UTC < strftime('%s', 'now') - " << LOG_RETENTION_PERIOD << ";";
+}
+
+void ctx::MediaContentMonitor::__updatePlayCount(const char *uuid, int type, int count)
+{
+       std::stringstream query;
+       query <<
+               /* Inserting the media record to the play count table, if not exist */
+               "INSERT OR IGNORE INTO Log_MediaPlayCount" \
+               " (UUID, MediaType) VALUES ('" << uuid << "'," << type <<");" \
+               /* Updating the play count and getting the diff from the previous count */
+               "UPDATE Log_MediaPlayCount SET Diff = " << count << " - Count," \
+               " Count = " << count << ", UTC = strftime('%s', 'now')" \
+               " WHERE UUID = '" << uuid << "';";
+       __appendCleanupQuery(query);
+       query <<
+               /* Checking whether the play count changes */
+               "SELECT MediaType FROM Log_MediaPlayCount" \
+               " WHERE UUID = '" << uuid << "' AND Diff > 0;";
+
+       __dbManager.execute(0, query.str().c_str(), this);
+}
+
+void ctx::MediaContentMonitor::onExecuted(unsigned int queryId, int error, std::vector<Json>& records)
+{
+       IF_FAIL_VOID(!records.empty());
+
+       int mediaType = 0;
+       records[0].get(NULL, CX_MEDIA_TYPE, &mediaType);
+
+       __insertLog(mediaType);
+}
+
+void ctx::MediaContentMonitor::__insertLog(int mediaType)
+{
+       int systemVolume = -1, mediaVolume = -1, audioJack = -1;
+
+       Json data;
+       data.set(NULL, CX_MEDIA_TYPE, mediaType);
+
+       if (ctx::system_info::getAudioJackState(&audioJack))
+               data.set(NULL, STATS_AUDIO_JACK, audioJack);
+
+       if (ctx::system_info::getVolume(&systemVolume, &mediaVolume)) {
+               data.set(NULL, STATS_SYSTEM_VOLUME, systemVolume);
+               data.set(NULL, STATS_MEDIA_VOLUME, mediaVolume);
+       }
+
+       __dbManager.insert(0, MEDIA_TABLE_NAME, data, NULL);
+}
diff --git a/src/media-stats/MediaContentMonitor.h b/src/media-stats/MediaContentMonitor.h
new file mode 100644 (file)
index 0000000..b8709aa
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_STATS_MEDIA_CONTENT_MONITOR_H_
+#define _CONTEXT_STATS_MEDIA_CONTENT_MONITOR_H_
+
+#include <sstream>
+#include <media_content.h>
+#include <DatabaseManager.h>
+
+namespace ctx {
+
+       class MediaContentMonitor : public IDatabaseListener {
+       private:
+               bool __started;
+               int __lastCleanupTime;
+               DatabaseManager __dbManager;
+
+               bool __startMonitoring();
+               void __stopMonitoring();
+
+               void __appendCleanupQuery(std::stringstream &query);
+               void __updatePlayCount(const char *uuid, int type, int count);
+               void __insertLog(int mediaType);
+
+               void onTableCreated(unsigned int queryId, int error) {}
+               void onInserted(unsigned int queryId, int error, int64_t rowId) {}
+               void onExecuted(unsigned int queryId, int error, std::vector<Json>& records);
+
+               static void __onMediaContentDbUpdated(media_content_error_e error, int pid,
+                               media_content_db_update_item_type_e updateItem,
+                               media_content_db_update_type_e updateType,
+                               media_content_type_e mediaType,
+                               char *uuid, char *path, char *mimeType, void *userData);
+
+       public:
+               MediaContentMonitor();
+               ~MediaContentMonitor();
+       };
+
+}      /* namespace ctx */
+
+#endif /* End of _CONTEXT_STATS_MEDIA_CONTENT_MONITOR_H_ */
diff --git a/src/media-stats/MediaStatisticsTypes.h b/src/media-stats/MediaStatisticsTypes.h
new file mode 100644 (file)
index 0000000..a71e553
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_STATS_MEDIA_TYPES_H_
+#define _CONTEXT_STATS_MEDIA_TYPES_H_
+
+#include "../shared/CommonTypes.h"
+
+#define MEDIA_HISTORY_PRIV                                     "mediahistory.read"
+#define MEDIA_SUBJ_LOGGER                                      "stats/media/logger"
+#define MEDIA_SUBJ_PEAK_TIME_FOR_MUSIC         "stats/music/peak_time"
+#define MEDIA_SUBJ_PEAK_TIME_FOR_VIDEO         "stats/video/peak_time"
+#define MEDIA_SUBJ_COMMON_SETTING_FOR_MUSIC    "stats/music/setting"
+#define MEDIA_SUBJ_COMMON_SETTING_FOR_VIDEO    "stats/video/setting"
+#define MEDIA_SUBJ_MUSIC_FREQUENCY                     "stats/music/frequency"
+#define MEDIA_SUBJ_VIDEO_FREQUENCY                     "stats/video/frequency"
+
+#define MEDIA_TABLE_NAME       "Log_MediaPlayback"
+#define MEDIA_TABLE_COLUMNS \
+       "MediaType INTEGER NOT NULL, " \
+       "SystemVolume INTEGER, MediaVolume INTEGER, AudioJack INTEGER, " \
+       "UTC TIMESTAMP DEFAULT (strftime('%s', 'now')), " \
+       "LocalTime TIMESTAMP DEFAULT (strftime('%s', 'now', 'localtime'))"
+
+#define MEDIA_PLAYCOUNT_TABLE_SCHEMA \
+       "CREATE TABLE IF NOT EXISTS Log_MediaPlayCount" \
+       " (UUID TEXT NOT NULL PRIMARY KEY, MediaType INTEGER NOT NULL," \
+       " Count INTEGER DEFAULT 0, Diff INTEGER DEFAULT 0, " \
+       " UTC TIMESTAMP DEFAULT (strftime('%s', 'now')))"
+
+#define CX_MEDIA_TYPE          "MediaType"
+
+enum mediaType_e {
+       MEDIA_TYPE_MUSIC = 1,
+       MEDIA_TYPE_VIDEO,
+};
+
+#endif /* End of _CONTEXT_STATS_MEDIA_TYPES_H_ */
diff --git a/src/media-stats/MediaStatsLogger.cpp b/src/media-stats/MediaStatsLogger.cpp
new file mode 100644 (file)
index 0000000..9b1db7d
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "MediaStatisticsTypes.h"
+#include "MediaStatsLogger.h"
+
+using namespace ctx;
+
+MediaStatsLogger::MediaStatsLogger() :
+       ContextProvider(MEDIA_SUBJ_LOGGER)
+{
+}
+
+MediaStatsLogger::~MediaStatsLogger()
+{
+}
+
+int MediaStatsLogger::subscribe(Json option, Json* requestResult)
+{
+       return ERR_NONE;
+}
+
+int MediaStatsLogger::unsubscribe(Json option)
+{
+       return ERR_NONE;
+}
diff --git a/src/media-stats/MediaStatsLogger.h b/src/media-stats/MediaStatsLogger.h
new file mode 100644 (file)
index 0000000..28e8aca
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_MEDIA_STATS_LOGGER_H_
+#define _CONTEXT_MEDIA_STATS_LOGGER_H_
+
+#include <ContextProvider.h>
+#include "MediaContentMonitor.h"
+
+namespace ctx {
+
+       class MediaStatsLogger : public ContextProvider {
+       public:
+               MediaStatsLogger();
+               ~MediaStatsLogger();
+
+               int subscribe(Json option, Json *requestResult);
+               int unsubscribe(Json option);
+
+               void submitTriggerItem() {}
+
+       private:
+               MediaContentMonitor __contentMon;
+       };
+
+}      /* namespace ctx */
+
+#endif /* _CONTEXT_MEDIA_STATS_LOGGER_H_ */
+
diff --git a/src/media-stats/MediaStatsProvider.cpp b/src/media-stats/MediaStatsProvider.cpp
new file mode 100644 (file)
index 0000000..b8ce482
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "MediaStatsProvider.h"
+#include "DbHandle.h"
+
+using namespace ctx;
+
+MediaStatsProvider::MediaStatsProvider(const char *subject) :
+       ContextProvider(subject)
+{
+}
+
+MediaStatsProvider::~MediaStatsProvider()
+{
+}
+
+bool MediaStatsProvider::isSupported()
+{
+       /* TODO */
+       return true;
+}
+
+void MediaStatsProvider::submitTriggerItem()
+{
+}
+
+int MediaStatsProvider::read(Json option, Json* requestResult)
+{
+       MediaDbHandle *handle = new(std::nothrow) MediaDbHandle(this);
+       IF_FAIL_RETURN_TAG(handle, ERR_OPERATION_FAILED, _E, "Memory allocation failed");
+
+       int err = handle->read(option);
+       if (err != ERR_NONE) {
+               delete handle;
+               return err;
+       }
+
+       return ERR_NONE;
+}
+
+void MusicFreqProvider::submitTriggerItem()
+{
+       registerTriggerItem(OPS_READ,
+                       "{" TRIG_DEF_TOTAL_COUNT "}",
+                       "{" TRIG_DEF_TIME_OF_DAY "," TRIG_DEF_DAY_OF_WEEK "}");
+}
+
+void VideoFreqProvider::submitTriggerItem()
+{
+       registerTriggerItem(OPS_READ,
+                       "{" TRIG_DEF_TOTAL_COUNT "}",
+                       "{" TRIG_DEF_TIME_OF_DAY "," TRIG_DEF_DAY_OF_WEEK "}");
+}
diff --git a/src/media-stats/MediaStatsProvider.h b/src/media-stats/MediaStatsProvider.h
new file mode 100644 (file)
index 0000000..5895c46
--- /dev/null
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_MEDIA_STATS_PROVIDER_H_
+#define _CONTEXT_MEDIA_STATS_PROVIDER_H_
+
+#include <ContextProvider.h>
+#include "MediaStatisticsTypes.h"
+
+namespace ctx {
+
+       class MediaStatsProvider : public ContextProvider {
+       public:
+               int read(Json option, Json* requestResult);
+
+               bool isSupported();
+               virtual void submitTriggerItem();
+
+       protected:
+               MediaStatsProvider(const char *subject);
+               virtual ~MediaStatsProvider();
+       };      /* class MediaStatsProvider */
+
+
+       class MusicPeakTimeProvider : public MediaStatsProvider {
+       public:
+               MusicPeakTimeProvider() :
+                       MediaStatsProvider(MEDIA_SUBJ_PEAK_TIME_FOR_MUSIC) {}
+       };
+
+
+       class VideoPeakTimeProvider : public MediaStatsProvider {
+       public:
+               VideoPeakTimeProvider() :
+                       MediaStatsProvider(MEDIA_SUBJ_PEAK_TIME_FOR_VIDEO) {}
+       };
+
+
+       class MusicSettingProvider: public MediaStatsProvider {
+       public:
+               MusicSettingProvider() :
+                       MediaStatsProvider(MEDIA_SUBJ_COMMON_SETTING_FOR_MUSIC) {}
+       };
+
+
+       class VideoSettingProvider: public MediaStatsProvider {
+       public:
+               VideoSettingProvider() :
+                       MediaStatsProvider(MEDIA_SUBJ_COMMON_SETTING_FOR_VIDEO) {}
+       };
+
+
+       class MusicFreqProvider: public MediaStatsProvider {
+       public:
+               MusicFreqProvider() :
+                       MediaStatsProvider(MEDIA_SUBJ_MUSIC_FREQUENCY) {}
+
+               void submitTriggerItem();
+       };
+
+
+       class VideoFreqProvider: public MediaStatsProvider {
+       public:
+               VideoFreqProvider() :
+                       MediaStatsProvider(MEDIA_SUBJ_VIDEO_FREQUENCY) {}
+
+               void submitTriggerItem();
+       };
+
+}      /* namespace ctx */
+
+#endif /* _CONTEXT_MEDIA_STATS_PROVIDER_H_ */
diff --git a/src/message/Message.cpp b/src/message/Message.cpp
new file mode 100644 (file)
index 0000000..9316806
--- /dev/null
@@ -0,0 +1,132 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "Message.h"
+
+#define MAX_ADDR_SIZE 20
+
+using namespace ctx;
+
+SocialStatusMessage::SocialStatusMessage() :
+       DeviceProviderBase(SOCIAL_ST_SUBJ_MESSAGE),
+       __messageHandle(NULL)
+{
+}
+
+SocialStatusMessage::~SocialStatusMessage()
+{
+}
+
+bool SocialStatusMessage::isSupported()
+{
+       return getSystemInfoBool("tizen.org/feature/network.telephony");
+}
+
+void SocialStatusMessage::submitTriggerItem()
+{
+       registerTriggerItem(OPS_SUBSCRIBE,
+                       "{"
+                               "\"Event\":{\"type\":\"string\",\"values\":[\"Received\"]},"
+                               "\"Type\":{\"type\":\"string\",\"values\":[\"SMS\",\"MMS\"]},"
+                               "\"Address\":{\"type\":\"string\"}"
+                       "}",
+                       NULL);
+}
+
+void SocialStatusMessage::__updateCb(msg_handle_t handle, msg_struct_t msg, void* userData)
+{
+       SocialStatusMessage *instance = static_cast<SocialStatusMessage*>(userData);
+       instance->__handleUpdate(msg);
+}
+
+void SocialStatusMessage::__handleUpdate(msg_struct_t msg)
+{
+       int err;
+       int type;
+       char address[MAX_ADDR_SIZE];
+       Json data;
+
+       err = msg_get_int_value(msg, MSG_MESSAGE_TYPE_INT, &type);
+       IF_FAIL_VOID_TAG(err == MSG_SUCCESS, _W, "Getting message type failed");
+
+       err = msg_get_str_value(msg, MSG_MESSAGE_REPLY_ADDR_STR, address, MAX_ADDR_SIZE);
+       IF_FAIL_VOID_TAG(err == MSG_SUCCESS, _W, "Getting reply address failed");
+
+       switch (type) {
+       case MSG_TYPE_SMS_CB :
+       case MSG_TYPE_SMS_JAVACB :
+       case MSG_TYPE_SMS_WAPPUSH :
+       case MSG_TYPE_SMS_MWI :
+       case MSG_TYPE_SMS_SYNCML :
+       case MSG_TYPE_SMS_REJECT :
+       case MSG_TYPE_SMS_ETWS_PRIMARY :
+       case MSG_TYPE_SMS :
+               data.set(NULL, SOCIAL_ST_TYPE, SOCIAL_ST_SMS);
+               break;
+       case MSG_TYPE_MMS_NOTI :
+       case MSG_TYPE_MMS_JAVA :
+       case MSG_TYPE_MMS :
+               data.set(NULL, SOCIAL_ST_TYPE, SOCIAL_ST_MMS);
+               break;
+       default :
+               _W("Unknown message type");
+               return;
+       }
+
+       data.set(NULL, SOCIAL_ST_EVENT, SOCIAL_ST_RECEIVED);
+       data.set(NULL, SOCIAL_ST_ADDRESS, address);
+
+       publish(NULL, ERR_NONE, data);
+}
+
+bool SocialStatusMessage::__setCallback()
+{
+       int err;
+
+       err = msg_open_msg_handle(&__messageHandle);
+       IF_FAIL_RETURN_TAG(err == MSG_SUCCESS, false, _E, "Handle creation failed");
+
+       err = msg_reg_sms_message_callback(__messageHandle, __updateCb, 0, this);
+       if (err != MSG_SUCCESS) {
+               msg_close_msg_handle(&__messageHandle);
+               _E("Setting SMS event callback failed");
+               return false;
+       }
+
+       msg_reg_mms_conf_message_callback(__messageHandle, __updateCb, NULL, this);
+       return true;
+}
+
+void SocialStatusMessage::__unsetCallback()
+{
+       if (__messageHandle)
+               msg_close_msg_handle(&__messageHandle);
+
+       __messageHandle = NULL;
+}
+
+int SocialStatusMessage::subscribe()
+{
+       bool ret = __setCallback();
+       IF_FAIL_RETURN(ret, ERR_OPERATION_FAILED);
+       return ERR_NONE;
+}
+
+int SocialStatusMessage::unsubscribe()
+{
+       __unsetCallback();
+       return ERR_NONE;
+}
diff --git a/src/message/Message.h b/src/message/Message.h
new file mode 100644 (file)
index 0000000..79e489a
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_SOCIAL_STATUS_SMS_H_
+#define _CONTEXT_SOCIAL_STATUS_SMS_H_
+
+#include <msg.h>
+#include <msg_transport.h>
+#include "../shared/SocialTypes.h"
+#include "../shared/DeviceProviderBase.h"
+
+namespace ctx {
+
+       class SocialStatusMessage : public DeviceProviderBase {
+       public:
+               SocialStatusMessage();
+               ~SocialStatusMessage();
+
+               int subscribe();
+               int unsubscribe();
+
+               bool isSupported();
+               void submitTriggerItem();
+
+       private:
+               msg_handle_t __messageHandle;
+               bool __beingSubscribed;
+
+               bool __setCallback();
+               void __unsetCallback();
+               void __handleUpdate(msg_struct_t msg);
+               static void __updateCb(msg_handle_t handle, msg_struct_t msg, void* userData);
+       };
+}
+
+#endif // _CONTEXT_SOCIAL_STATUS_SMS_H_
diff --git a/src/my-place/place_recognition.cpp b/src/my-place/place_recognition.cpp
new file mode 100644 (file)
index 0000000..b736f1a
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "place_recognition.h"
+#include "user_places/user_places.h"
+
+int ctx::PlaceRecognitionProvider::subscribe(ctx::Json option, ctx::Json* requestResult)
+{
+       return ERR_NOT_SUPPORTED;
+}
+
+int ctx::PlaceRecognitionProvider::unsubscribe(ctx::Json option)
+{
+       return ERR_NOT_SUPPORTED;
+}
+
+int ctx::PlaceRecognitionProvider::read(ctx::Json option, ctx::Json* requestResult)
+{
+       _I(BLUE("Read"));
+       _J("Option", option);
+
+       std::vector<std::shared_ptr<ctx::Place>> places = __engine.getPlaces();
+       Json dataRead = UserPlaces::composeJson(places);
+
+       /*
+        * The below function needs to be called once.
+        * It does not need to be called within this read() function.
+        * In can be called later, in another scope.
+        * Please just be sure that, the 2nd input parameter "option" should be the same to the
+        * "option" parameter received via ctx::PlaceRecognitionProvider::read().
+        */
+       replyToRead(option, ERR_NONE, dataRead);
+
+       return ERR_NONE;
+}
+
+int ctx::PlaceRecognitionProvider::write(ctx::Json data, ctx::Json* requestResult)
+{
+       return ERR_NOT_SUPPORTED;
+}
+
+bool ctx::PlaceRecognitionProvider::isSupported()
+{
+       /* TODO: This function should be implemented properly */
+       return true;
+}
diff --git a/src/my-place/place_recognition.h b/src/my-place/place_recognition.h
new file mode 100644 (file)
index 0000000..814bb00
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_H_
+#define _CONTEXT_PLACE_RECOGNITION_H_
+
+#include <ContextProvider.h>
+#include "place_recognition_types.h"
+#include "user_places/user_places.h"
+
+namespace ctx {
+
+       class PlaceRecognitionProvider : public ContextProvider {
+       public:
+               PlaceRecognitionProvider() :
+                       ContextProvider(PLACE_SUBJ_RECOGNITION),
+                       __engine(PLACE_RECOG_HIGH_ACCURACY_MODE) {}
+
+               ~PlaceRecognitionProvider() {}
+
+               int subscribe(ctx::Json option, ctx::Json *requestResult);
+               int unsubscribe(ctx::Json option);
+               int read(ctx::Json option, ctx::Json *requestResult);
+               int write(ctx::Json data, ctx::Json *requestResult);
+
+               bool isSupported();
+               void submitTriggerItem() {}
+
+       private:
+               UserPlaces __engine;
+       };      /* class PlaceRecognitionProvider */
+
+}      /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_H_ */
diff --git a/src/my-place/place_recognition_types.h b/src/my-place/place_recognition_types.h
new file mode 100644 (file)
index 0000000..9576331
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_TYPES_
+#define _CONTEXT_PLACE_RECOGNITION_TYPES_
+
+// Context Items
+#define PLACE_SUBJ_RECOGNITION                 "place/pattern/personal_poi"
+
+#define PLACE_PRIV_RECOGNITION                 "location"
+
+// Database
+#define VISIT_TABLE                            "place_status_user_place_visit"
+#define VISIT_COLUMN_START_TIME                "start_time"
+#define VISIT_COLUMN_END_TIME                  "end_time"
+#define VISIT_COLUMN_WIFI_APS                  "wifi_aps"
+#define VISIT_COLUMN_CATEGORY                  "category"
+#ifdef TIZEN_ENGINEER_MODE
+#define VISIT_COLUMN_START_TIME_HUMAN          "start_time_human" // only for debug: human readable time data:
+#define VISIT_COLUMN_END_TIME_HUMAN            "end_time_human" // only for debug: human readable time data:
+#endif /* TIZEN_ENGINEER_MODE */
+#define VISIT_COLUMN_LOCATION_VALID            "geo_valid"
+#define VISIT_COLUMN_LOCATION_LATITUDE         "geo_latitude"
+#define VISIT_COLUMN_LOCATION_LONGITUDE        "geo_longitude"
+#define VISIT_COLUMN_CATEG_HOME                "categ_home"
+#define VISIT_COLUMN_CATEG_WORK                "categ_work"
+#define VISIT_COLUMN_CATEG_OTHER               "categ_other"
+
+#define PLACE_TABLE                            "place_status_user_place"
+#define PLACE_COLUMN_CATEG_ID                  "type_id" // Name inconsistency: "cated_id" vs "type_id" TODO make it consistent
+#define PLACE_COLUMN_CATEG_CONFIDENCE          "type_confidence"
+#define PLACE_COLUMN_NAME                      "name"
+#define PLACE_COLUMN_LOCATION_VALID            "geo_valid"
+#define PLACE_COLUMN_LOCATION_LATITUDE         "geo_latitude"
+#define PLACE_COLUMN_LOCATION_LONGITUDE        "geo_longitude"
+#define PLACE_COLUMN_WIFI_APS                  "wifi_aps"
+#define PLACE_COLUMN_CREATE_DATE               "create_date"
+
+#define WIFI_TABLE_NAME                        "place_status_user_place_wifi"
+#define WIFI_COLUMN_TIMESTAMP                  "timestamp"
+#define WIFI_COLUMN_BSSID                      "bssid"
+
+#define LOCATION_TABLE_NAME                    "place_status_user_place_location"
+#define LOCATION_COLUMN_LATITUDE               "geo_latitude"
+#define LOCATION_COLUMN_LONGITUDE              "geo_longitude"
+#define LOCATION_COLUMN_ACCURACY               "accuracy"
+#define LOCATION_COLUMN_TIMESTAMP              "timestamp"
+#ifdef TIZEN_ENGINEER_MODE
+#define LOCATION_COLUMN_TIMESTAMP_HUMAN        "time_human" // only for debug: human readable time data:
+#define LOCATION_COLUMN_METHOD                 "method"
+#endif /* TIZEN_ENGINEER_MODE */
+
+// Data Key
+#define DATA_READ                              "PlacesList"
+#define PLACE_CATEG_ID                         "TypeId" // Name inconsistency: "cated_id" vs "type_id" TODO make it consistent
+#define PLACE_CATEG_CONFIDENCE                 "TypeConfidence"
+#define PLACE_NAME                             "Name"
+#define PLACE_GEO_LATITUDE                     "GeoLatitude"
+#define PLACE_GEO_LONGITUDE                    "GeoLongitude"
+#define PLACE_WIFI_APS                         "WifiAPs"
+#define PLACE_CREATE_DATE                      "CreateDate"
+
+// Data values
+enum PlaceCategId {
+       PLACE_CATEG_ID_NONE = 0,
+       PLACE_CATEG_ID_HOME = 1,
+       PLACE_CATEG_ID_WORK = 2,
+       PLACE_CATEG_ID_OTHER = 3
+};
+
+enum PlaceRecogMode {
+       PLACE_RECOG_HIGH_ACCURACY_MODE = 0,
+       PLACE_RECOG_LOW_POWER_MODE = 1
+};
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_TYPES_ */
diff --git a/src/my-place/user_places/debug_utils.cpp b/src/my-place/user_places/debug_utils.cpp
new file mode 100644 (file)
index 0000000..b5fccf2
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "debug_utils.h"
+#include <Types.h>
+
+std::string ctx::DebugUtils::humanReadableDateTime(time_t timestamp, std::string format, size_t size, bool utc)
+{
+       struct tm * timeinfo;
+       if (utc) {
+               format += " UTC";
+               size += 4;
+               timeinfo = gmtime(&timestamp);
+       } else {
+               timeinfo = localtime(&timestamp);
+       }
+       char buffer[size];
+       if (timeinfo) {
+               strftime(buffer, size, format.c_str(), timeinfo);
+       } else {
+               snprintf(buffer, size, "NULL");
+       }
+       return std::string(buffer);
+}
diff --git a/src/my-place/user_places/debug_utils.h b/src/my-place/user_places/debug_utils.h
new file mode 100644 (file)
index 0000000..dde40bc
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_DEBUG_UTILS_H_
+#define _CONTEXT_PLACE_RECOGNITION_DEBUG_UTILS_H_
+
+#include <string>
+#include <ctime>
+
+namespace ctx {
+
+       class DebugUtils {
+
+       public:
+               static std::string humanReadableDateTime(time_t timestamp, std::string format, size_t size, bool utc = false);
+
+       };      /* class DebugUtils */
+
+}      /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_DEBUG_UTILS_H_ */
diff --git a/src/my-place/user_places/gmap.cpp b/src/my-place/user_places/gmap.cpp
new file mode 100644 (file)
index 0000000..845b3cf
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "gmap.h"
+#include <iostream>
+#include <fstream>
+
+const std::string ctx::Gmap::__HTML_HEADER = R"(
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
+    <meta charset="utf-8">
+    <title>Simple markers</title>
+    <style>
+      html, body, #map-canvas {
+        height: 100%;
+        margin: 0px;
+        padding: 0px
+      }
+    </style>
+    <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=true"></script>
+    <script>
+function initialize() {
+  var mapOptions = {
+    zoom: 2,
+    center: new google.maps.LatLng(20,60)
+  }
+  var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
+)";
+
+const std::string ctx::Gmap::__HTML_FOOTER = R"(
+}
+
+google.maps.event.addDomListener(window, 'load', initialize);
+
+    </script>
+  </head>
+  <body>
+    <div id="map-canvas"></div>
+  </body>
+</html>
+)";
+
+std::string ctx::Gmap::__iconForCategId(PlaceCategId categId)
+{
+       switch (categId) {
+       case PLACE_CATEG_ID_HOME:  return "markerH.png";
+       case PLACE_CATEG_ID_WORK:  return "markerW.png";
+       case PLACE_CATEG_ID_OTHER: return "markerO.png";
+       case PLACE_CATEG_ID_NONE:  return "markerN.png";
+       default: return "markerD.png";
+       }
+}
+
+void ctx::Gmap::__placeMarker2Stream(const ctx::Place& place, std::ostream& out)
+{
+       if (place.locationValid) {
+               out << "new google.maps.Marker({" << std::endl;
+               out << "    position: new google.maps.LatLng(" << place.location.latitude << "," << place.location.longitude << ")," << std::endl;
+               out << "    map: map," << std::endl;
+               out << "    icon: \"http://maps.google.com/mapfiles/" << __iconForCategId(place.categId)<< "\"" << std::endl;
+               out << "});" << std::endl;
+       }
+}
+
+void ctx::Gmap::__html2Stream(const std::vector<std::shared_ptr<ctx::Place>>& places, std::ostream& out)
+{
+       out << __HTML_HEADER;
+       for (std::shared_ptr<ctx::Place> place : places) {
+               __placeMarker2Stream(*place, out);
+       }
+       out << __HTML_FOOTER;
+}
+
+void ctx::Gmap::writeMap(const std::vector<std::shared_ptr<ctx::Place>>& places)
+{
+       std::ofstream out(GMAP_FILE);
+       __html2Stream(places, out);
+}
diff --git a/src/my-place/user_places/gmap.h b/src/my-place/user_places/gmap.h
new file mode 100644 (file)
index 0000000..29eacd2
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_GMAP_H_
+#define _CONTEXT_PLACE_RECOGNITION_GMAP_H_
+
+#include "user_places_types.h"
+#include "../place_recognition_types.h"
+
+#define GMAP_FILE "/opt/usr/media/Others/user_places_map.html"
+
+namespace ctx {
+
+       /*
+        * Class for generating a HTML page with GoogleMaps with all user places.
+        * This class is for test/demo purposes only. TODO: Remove this class from final solution.
+        */
+       class Gmap {
+
+       private:
+               static const std::string __HTML_HEADER;
+               static const std::string __HTML_FOOTER;
+               static std::string __iconForCategId(PlaceCategId categId);
+               static void __placeMarker2Stream(const Place& place, std::ostream& out);
+               static void __html2Stream(const std::vector<std::shared_ptr<Place>>& places, std::ostream& out);
+
+       public:
+               static void writeMap(const std::vector<std::shared_ptr<Place>>& places);
+
+       };      /* class Gmap */
+
+}      /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_GMAP_H_ */
diff --git a/src/my-place/user_places/graph.cpp b/src/my-place/user_places/graph.cpp
new file mode 100644 (file)
index 0000000..53daeb3
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <memory>
+#include <queue>
+#include "graph.h"
+
+std::shared_ptr<ctx::graph::Components> ctx::graph::connectedComponents(Graph &graph)
+{
+       std::shared_ptr<Components> ccs = std::make_shared<Components>();
+       std::set<int> fringe;
+
+       for (Node i = 0; i < static_cast<Node>(graph.size()); i++) {
+               if (!graph[i]) {
+                       continue;
+               }
+               // neighbourhood of node i exists (was not removed)
+               std::shared_ptr<Component> c = std::make_shared<Component>();
+               ccs->push_back(c);
+               fringe.insert(i);
+               while (!fringe.empty()) {
+                       Node currNode = *fringe.begin();
+                       fringe.erase(fringe.begin());
+                       c->insert(currNode);
+
+                       std::shared_ptr<NeighbourNodes> currNhood = graph[currNode];
+                       for (Node nhoodNode : *currNhood) {
+                               if (graph[nhoodNode] && fringe.find(nhoodNode) == fringe.end()) {
+                                       fringe.insert(nhoodNode);
+                               }
+                       }
+                       graph[currNode].reset();  // removing current node
+               }
+       }
+       return ccs;
+}
diff --git a/src/my-place/user_places/graph.h b/src/my-place/user_places/graph.h
new file mode 100644 (file)
index 0000000..9fedb26
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_GRAPH_H_
+#define _CONTEXT_PLACE_RECOGNITION_GRAPH_H_
+
+#include <memory>
+#include <vector>
+#include <set>
+
+namespace ctx {
+
+namespace graph {
+
+       typedef int Node;
+       typedef std::set<Node> NeighbourNodes;
+       typedef std::vector<std::shared_ptr<NeighbourNodes>> Graph;
+       typedef std::set<Node> Component;
+       typedef std::vector<std::shared_ptr<Component>> Components;
+
+       /*
+        * make connected components of a given graph
+        * caution: the graph will be changed (its nodes will be cleared)
+        */
+       std::shared_ptr<Components> connectedComponents(Graph &graph);
+
+}      /* namespace graph */
+
+}      /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_GRAPH_H_ */
diff --git a/src/my-place/user_places/location_listener_iface.h b/src/my-place/user_places/location_listener_iface.h
new file mode 100644 (file)
index 0000000..914e022
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_LOCATION_LISTENER_IFACE_H_
+#define _CONTEXT_PLACE_RECOGNITION_LOCATION_LISTENER_IFACE_H_
+
+#include "user_places_types.h"
+
+namespace ctx {
+
+       class ILocationListener {
+
+       public:
+               virtual ~ILocationListener() {};
+               virtual void onNewLocation(LocationEvent location) = 0;
+
+       };      /* class ILocationListener */
+
+}      /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_LOCATION_LISTENER_IFACE_H_ */
diff --git a/src/my-place/user_places/location_logger.cpp b/src/my-place/user_places/location_logger.cpp
new file mode 100644 (file)
index 0000000..0994734
--- /dev/null
@@ -0,0 +1,617 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <sstream>
+#include <Types.h>
+#include <Json.h>
+#include <DatabaseManager.h>
+#include "../place_recognition_types.h"
+#include "user_places_params.h"
+#include "debug_utils.h"
+#include "location_logger.h"
+
+#ifdef TIZEN_ENGINEER_MODE
+#define __LOCATION_CREATE_TABLE_COLUMNS \
+       LOCATION_COLUMN_LATITUDE " REAL NOT NULL, "\
+       LOCATION_COLUMN_LONGITUDE " REAL NOT NULL, "\
+       LOCATION_COLUMN_ACCURACY " REAL, "\
+       LOCATION_COLUMN_TIMESTAMP " timestamp NOT NULL, "\
+       LOCATION_COLUMN_TIMESTAMP_HUMAN " TEXT, "\
+       LOCATION_COLUMN_METHOD " INTEGER "
+#else /* TIZEN_ENGINEER_MODE */
+#define __LOCATION_CREATE_TABLE_COLUMNS \
+       LOCATION_COLUMN_LATITUDE " REAL NOT NULL, "\
+       LOCATION_COLUMN_LONGITUDE " REAL NOT NULL, "\
+       LOCATION_COLUMN_ACCURACY " REAL, "\
+       LOCATION_COLUMN_TIMESTAMP " timestamp NOT NULL "
+#endif /* TIZEN_ENGINEER_MODE */
+
+#define __LOCATION_ERROR_LOG(error) { \
+       if (error != LOCATIONS_ERROR_NONE) { \
+               _E("ERROR == %s", __locationError2Str(error)); \
+       } else { \
+               _D("SUCCESS"); \
+       } \
+}
+
+void ctx::LocationLogger::__locationServiceStateChangedCb(location_service_state_e state, void *userData)
+{
+       ctx::LocationLogger* locationLogger = (ctx::LocationLogger *)userData;
+       locationLogger->__locationServiceState = state;
+       if (state == LOCATIONS_SERVICE_ENABLED) {
+               _D("LOCATIONS_SERVICE_ENABLED");
+               switch (locationLogger->__timerPurpose) {
+               case LOCATION_LOGGER_WAITING_FOR_SERVICE_START:
+                       _D("Waiting for location service start FINISHED");
+                       locationLogger->__timerStop();
+                       locationLogger->__locationRequest();
+                       break;
+               case LOCATION_LOGGER_WAITING_FOR_ACTIVE_REQUEST:
+               case LOCATION_LOGGER_WAITING_FOR_LOCATION_METHOD_SETTING_ON:
+               case LOCATION_LOGGER_WAITING_FOR_ACTIVE_INTERVAL:
+               case LOCATION_LOGGER_WAITING_FOR_PASSIVE_INTERVAL:
+               default:
+                       // Do nothing
+                       break;
+               }
+       } else {
+               _D("LOCATIONS_SERVICE_DISABLED");
+//             locationLogger->__timerStop();
+       }
+}
+
+void ctx::LocationLogger::__locationSettingChangedCb(location_method_e method, bool enable, void *userData)
+{
+       ctx::LocationLogger* locationLogger = (ctx::LocationLogger *)userData;
+       locationLogger->__locationMethodState = enable;
+       if (method == locationLogger->__locationMethod) {
+               if (enable) {
+                       _D("Location method settings ON");
+                       switch (locationLogger->__timerPurpose) {
+                       case LOCATION_LOGGER_WAITING_FOR_LOCATION_METHOD_SETTING_ON:
+                               _D("Waiting for location method settings on FINISHED");
+                               if (locationLogger->__locationServiceState == LOCATIONS_SERVICE_ENABLED) {
+                                       locationLogger->__timerStop();
+                                       locationLogger->__locationRequest();
+                               } else {
+                                       locationLogger->__locationManagerStart();
+                               }
+                               break;
+                       case LOCATION_LOGGER_WAITING_FOR_SERVICE_START:
+                       case LOCATION_LOGGER_WAITING_FOR_ACTIVE_REQUEST:
+                       case LOCATION_LOGGER_WAITING_FOR_ACTIVE_INTERVAL:
+                       case LOCATION_LOGGER_WAITING_FOR_PASSIVE_INTERVAL:
+                       default:
+                               // Do nothing
+                               break;
+                       }
+               } else {
+                       _D("Location method settings OFF");
+//                     locationLogger->__timerStop();
+               }
+       }
+}
+
+void ctx::LocationLogger::__positionUpdatedCb(double latitude, double longitude,
+               double altitude, time_t timestamp, void *userData)
+{
+       _D("");
+       ctx::LocationLogger* locationLogger = (ctx::LocationLogger *)userData;
+       double horizontal = locationLogger->__locationManagerGetHorizontalAccuracy();
+#ifdef TIZEN_ENGINEER_MODE
+       ctx::LocationEvent location(latitude, longitude, horizontal, timestamp, LOCATION_METHOD_REQUEST);
+#else /* TIZEN_ENGINEER_MODE */
+       ctx::LocationEvent location(latitude, longitude, horizontal, timestamp);
+#endif /* TIZEN_ENGINEER_MODE */
+       locationLogger->__broadcast(location);
+       locationLogger->__onActiveRequestSucceeded();
+}
+
+void ctx::LocationLogger::__locationUpdatedCb(location_error_e error, double latitude, double longitude,
+               double altitude, time_t timestamp, double speed, double direction, double climb, void *userData)
+{
+       _D("");
+       __positionUpdatedCb(latitude, longitude, altitude, timestamp, userData);
+}
+
+const char* ctx::LocationLogger::__locationError2Str(int error)
+{
+       switch (error) {
+       case LOCATIONS_ERROR_NONE:
+               return "LOCATIONS_ERROR_NONE";
+       case LOCATIONS_ERROR_OUT_OF_MEMORY:
+               return "LOCATIONS_ERROR_OUT_OF_MEMORY";
+       case LOCATIONS_ERROR_INVALID_PARAMETER:
+               return "LOCATIONS_ERROR_INVALID_PARAMETER";
+       case LOCATIONS_ERROR_ACCESSIBILITY_NOT_ALLOWED:
+               return "LOCATIONS_ERROR_ACCESSIBILITY_NOT_ALLOWED";
+       case LOCATIONS_ERROR_NOT_SUPPORTED:
+               return "LOCATIONS_ERROR_NOT_SUPPORTED";
+       case LOCATIONS_ERROR_INCORRECT_METHOD:
+               return "LOCATIONS_ERROR_INCORRECT_METHOD";
+       case LOCATIONS_ERROR_NETWORK_FAILED:
+               return "LOCATIONS_ERROR_NETWORK_FAILED";
+       case LOCATIONS_ERROR_SERVICE_NOT_AVAILABLE:
+               return "LOCATIONS_ERROR_SERVICE_NOT_AVAILABLE";
+       case LOCATIONS_ERROR_GPS_SETTING_OFF:
+               return "LOCATIONS_ERROR_GPS_SETTING_OFF";
+       case LOCATIONS_ERROR_SECURITY_RESTRICTED:
+               return "LOCATIONS_ERROR_SECURITY_RESTRICTED";
+       default:
+               return "unknown location error code";
+       }
+}
+
+
+void ctx::LocationLogger::__log(location_accessibility_state_e state)
+{
+       switch (state) {
+       case LOCATIONS_ACCESS_STATE_NONE : // Access state is not determined
+               _D("LOCATIONS_ACCESS_STATE_NONE ");
+               break;
+       case LOCATIONS_ACCESS_STATE_DENIED: // Access denied
+               _D("LOCATIONS_ACCESS_STATE_DENIED");
+               break;
+       case LOCATIONS_ACCESS_STATE_ALLOWED: // Access authorized
+               _D("LOCATIONS_ACCESS_STATE_ALLOWED");
+               break;
+       default:
+               break;
+       }
+}
+
+int ctx::LocationLogger::__dbCreateTable()
+{
+       ctx::DatabaseManager dbManager;
+       bool ret = dbManager.createTable(0, LOCATION_TABLE_NAME, __LOCATION_CREATE_TABLE_COLUMNS, NULL, NULL);
+       _D("%s -> Table Creation Request", ret ? "SUCCESS" : "FAIL");
+       return 0;
+}
+
+int ctx::LocationLogger::__dbInsertLog(LocationEvent locationEvent)
+{
+       Json data;
+       data.set(NULL, LOCATION_COLUMN_LATITUDE, locationEvent.coordinates.latitude);
+       data.set(NULL, LOCATION_COLUMN_LONGITUDE, locationEvent.coordinates.longitude);
+       data.set(NULL, LOCATION_COLUMN_ACCURACY, locationEvent.coordinates.accuracy);
+       data.set(NULL, LOCATION_COLUMN_TIMESTAMP, static_cast<int>(locationEvent.timestamp));
+#ifdef TIZEN_ENGINEER_MODE
+       std::string timeHuman = DebugUtils::humanReadableDateTime(locationEvent.timestamp, "%F %T", 80);
+       data.set(NULL, LOCATION_COLUMN_TIMESTAMP_HUMAN, timeHuman);
+       data.set(NULL, LOCATION_COLUMN_METHOD, static_cast<int>(locationEvent.method));
+#endif /* TIZEN_ENGINEER_MODE */
+
+       ctx::DatabaseManager dbManager;
+       int64_t rowId;
+       bool ret = dbManager.insertSync(LOCATION_TABLE_NAME, data, &rowId);
+       _D("%s -> DB: location table insert result", ret ? "SUCCESS" : "FAIL");
+       return ret;
+}
+
+ctx::LocationLogger::LocationLogger(ILocationListener *listener, bool testMode) :
+       __listener(listener),
+       __testMode(testMode),
+       __activeRequestAttempts(0),
+       __activeAttempts(0),
+       __allAttempts(0),
+       __locationCount(0),
+       __activeRequestSucceeded(false),
+       __activeLocationSucceeded(false),
+       __timerId(-1),
+       __timerTimestamp(0),
+       __timerPurpose(LOCATION_LOGGER_WAITING_FOR_PASSIVE_INTERVAL),
+       __locationServiceState(LOCATIONS_SERVICE_DISABLED),
+       __locationMethod(LOCATION_LOGGER_METHOD),
+       __locationMethodState(false)
+{
+       _D("CONSTRUCTOR");
+
+       __locationManagerCreate();
+
+       if (__testMode) {
+               return;
+       }
+       if (LOCATION_LOGGER_DATABASE) {
+               __dbCreateTable();
+       }
+
+       __locationManagerSetServiceStateChangedCb();
+       __locationManagerSetSettingChangedCb();
+       __locationMethodState = __locationManagerIsEnabledMethod(__locationMethod);
+}
+
+ctx::LocationLogger::~LocationLogger()
+{
+       _D("DESTRUCTOR");
+       __stopLogging();
+       __locationManagerUnsetServiceStateChangedCb();
+       __locationManagerUnsetSettingChangedCb();
+       __locationManagerDestroy();
+}
+
+void ctx::LocationLogger::__locationManagerCreate()
+{
+       int ret = location_manager_create(__locationMethod, &__locationManager);
+       __LOCATION_ERROR_LOG(ret);
+}
+
+void ctx::LocationLogger::__locationManagerDestroy()
+{
+       int ret = location_manager_destroy(__locationManager);
+       __LOCATION_ERROR_LOG(ret);
+}
+
+void ctx::LocationLogger::__locationManagerSetServiceStateChangedCb()
+{
+       int ret = location_manager_set_service_state_changed_cb(__locationManager, __locationServiceStateChangedCb, this);
+       __LOCATION_ERROR_LOG(ret);
+}
+
+void ctx::LocationLogger::__locationManagerUnsetServiceStateChangedCb()
+{
+       int ret = location_manager_unset_service_state_changed_cb(__locationManager);
+       __LOCATION_ERROR_LOG(ret);
+}
+
+void ctx::LocationLogger::__locationManagerStart()
+{
+       int ret = location_manager_start(__locationManager);
+       __LOCATION_ERROR_LOG(ret);
+       __startServiceTimerStart();
+}
+
+void ctx::LocationLogger::__locationManagerStop()
+{
+       int ret = location_manager_stop(__locationManager);
+       __LOCATION_ERROR_LOG(ret);
+}
+
+double ctx::LocationLogger::__locationManagerGetHorizontalAccuracy()
+{
+       location_accuracy_level_e accuracyLevel;
+       double horizontal, vertical;
+       int ret = location_manager_get_accuracy(__locationManager, &accuracyLevel, &horizontal, &vertical);
+       __LOCATION_ERROR_LOG(ret);
+       return horizontal;
+}
+
+location_accessibility_state_e ctx::LocationLogger::__locationManagerGetAccessibilityState()
+{
+       location_accessibility_state_e state;
+       int ret = location_manager_get_accessibility_state(&state);
+       __LOCATION_ERROR_LOG(ret);
+       return state;
+}
+
+void ctx::LocationLogger::__locationManagerSetSettingChangedCb()
+{
+       int ret = location_manager_set_setting_changed_cb(__locationMethod, __locationSettingChangedCb, this);
+       __LOCATION_ERROR_LOG(ret);
+}
+
+void ctx::LocationLogger::__locationManagerUnsetSettingChangedCb()
+{
+       int ret = location_manager_unset_setting_changed_cb(__locationMethod);
+       __LOCATION_ERROR_LOG(ret);
+}
+
+bool ctx::LocationLogger::__locationManagerRequestSingleLocation()
+{
+       int ret = location_manager_request_single_location(__locationManager,
+                       LOCATION_LOGGER_ACTIVE_REQUEST_TIMEOUT_SECONDS, __locationUpdatedCb, this);
+       _D("%s (seconds=%d) ----- ATTEMPTS: REQ[%d/%d], ACT[%d/%d], ALL[%d/%d]; ----- LOCATIONS:[%d/%d]",
+                       ret == LOCATIONS_ERROR_NONE ? "SUCCESS" : "ERROR",
+                       LOCATION_LOGGER_ACTIVE_REQUEST_TIMEOUT_SECONDS,
+                       __activeRequestAttempts,
+                       LOCATION_LOGGER_MAX_ACTIVE_REQUEST_ATTEMPTS,
+                       __activeAttempts,
+                       LOCATION_LOGGER_MAX_ACTIVE_LOCATION_ATTEMPTS,
+                       __allAttempts,
+                       LOCATION_LOGGER_MAX_LOCATION_ATTEMPTS,
+                       __locationCount,
+                       LOCATION_LOGGER_MAX_LOCATION_COUNT);
+       __LOCATION_ERROR_LOG(ret);
+       __activeRequestAttempts++;
+       __activeAttempts++;
+       __allAttempts++;
+       if (ret == LOCATIONS_ERROR_NONE) {
+               __activeRequestTimerStart();
+               return true;
+       } else {
+               return false;
+       }
+}
+
+bool ctx::LocationLogger::__locationManagerGetLocation()
+{
+       double altitude, latitude, longitude, climb, direction, speed, horizontal, vertical;
+       location_accuracy_level_e level;
+       time_t timestamp;
+       int ret = location_manager_get_location(__locationManager, &altitude, &latitude, &longitude,
+                       &climb, &direction, &speed, &level, &horizontal, &vertical, &timestamp);
+       _D("%s ----- ATTEMPTS: REQ[%d/%d], ACT[%d/%d], ALL[%d/%d]; ----- LOCATIONS:[%d/%d]",
+                       ret == LOCATIONS_ERROR_NONE ? "SUCCESS" : "ERROR",
+                       __activeRequestAttempts,
+                       LOCATION_LOGGER_MAX_ACTIVE_REQUEST_ATTEMPTS,
+                       __activeAttempts,
+                       LOCATION_LOGGER_MAX_ACTIVE_LOCATION_ATTEMPTS,
+                       __allAttempts,
+                       LOCATION_LOGGER_MAX_LOCATION_ATTEMPTS,
+                       __locationCount,
+                       LOCATION_LOGGER_MAX_LOCATION_COUNT);
+       __LOCATION_ERROR_LOG(ret);
+       __activeAttempts++;
+       __allAttempts++;
+       if (ret == LOCATIONS_ERROR_NONE) {
+#ifdef TIZEN_ENGINEER_MODE
+               ctx::LocationEvent location(latitude, longitude, horizontal, timestamp, LOCATION_METHOD_GET_LOCATION);
+#else /* TIZEN_ENGINEER_MODE */
+               ctx::LocationEvent location(latitude, longitude, horizontal, timestamp);
+#endif /* TIZEN_ENGINEER_MODE */
+               __broadcast(location);
+               __onActiveLocationSucceeded();
+               return true;
+       } else {
+               return false;
+       }
+}
+
+void ctx::LocationLogger::__locationManagerGetLastLocation()
+{
+       double altitude, latitude, longitude, climb, direction, speed, horizontal, vertical;
+       location_accuracy_level_e level;
+       time_t timestamp;
+       int ret = location_manager_get_last_location(__locationManager, &altitude, &latitude, &longitude,
+                       &climb, &direction, &speed, &level, &horizontal, &vertical, &timestamp);
+       _D("%s ----- ATTEMPTS: REQ[%d/%d], ACT[%d/%d], ALL[%d/%d]; ----- LOCATIONS:[%d/%d]",
+                       ret == LOCATIONS_ERROR_NONE ? "SUCCESS" : "ERROR",
+                       __activeRequestAttempts,
+                       LOCATION_LOGGER_MAX_ACTIVE_REQUEST_ATTEMPTS,
+                       __activeAttempts,
+                       LOCATION_LOGGER_MAX_ACTIVE_LOCATION_ATTEMPTS,
+                       __allAttempts,
+                       LOCATION_LOGGER_MAX_LOCATION_ATTEMPTS,
+                       __locationCount,
+                       LOCATION_LOGGER_MAX_LOCATION_COUNT);
+       __LOCATION_ERROR_LOG(ret);
+       __allAttempts++;
+       if (ret == LOCATIONS_ERROR_NONE) {
+#ifdef TIZEN_ENGINEER_MODE
+               ctx::LocationEvent location(latitude, longitude, horizontal, timestamp, LOCATION_METHOD_GET_LAST_LOCATION);
+#else /* TIZEN_ENGINEER_MODE */
+               ctx::LocationEvent location(latitude, longitude, horizontal, timestamp);
+#endif /* TIZEN_ENGINEER_MODE */
+               __broadcast(location);
+       }
+}
+
+bool ctx::LocationLogger::__locationManagerIsEnabledMethod(location_method_e method)
+{
+       bool enable;
+       int ret = location_manager_is_enabled_method(method, &enable);
+       __LOCATION_ERROR_LOG(ret);
+       return enable;
+}
+
+bool ctx::LocationLogger::__checkGeneralLimits()
+{
+       return (__locationCount < LOCATION_LOGGER_MAX_LOCATION_COUNT
+                       && __allAttempts < LOCATION_LOGGER_MAX_LOCATION_ATTEMPTS);
+}
+
+bool ctx::LocationLogger::__checkActiveLimits()
+{
+       return (!__activeLocationSucceeded
+                       && __activeAttempts < LOCATION_LOGGER_MAX_ACTIVE_LOCATION_ATTEMPTS);
+}
+
+bool ctx::LocationLogger::__checkActiveRequestLimits()
+{
+       return (!__activeRequestSucceeded
+                       && __activeRequestAttempts < LOCATION_LOGGER_MAX_ACTIVE_REQUEST_ATTEMPTS);
+}
+
+void ctx::LocationLogger::__locationRequest()
+{
+       _D("");
+       bool requestSingleLocationRet = false;
+       bool getLocationRet = false;
+       if (__checkGeneralLimits() && __checkActiveLimits() && __checkActiveRequestLimits()) {
+               requestSingleLocationRet = __locationManagerRequestSingleLocation();
+       }
+       if (__checkGeneralLimits() && __checkActiveLimits() && !requestSingleLocationRet) {
+               getLocationRet = __locationManagerGetLocation();
+       }
+       if (__checkGeneralLimits() && !requestSingleLocationRet && !getLocationRet
+                       && __activeAttempts >= LOCATION_LOGGER_MAX_ACTIVE_LOCATION_ATTEMPTS) {
+               __locationManagerGetLastLocation();
+       }
+       if (!requestSingleLocationRet) {
+               __locationManagerStop();
+               __setNextTimer();
+       }
+}
+
+void ctx::LocationLogger::__setNextTimer()
+{
+       _D("ATTEMPTS: REQ[%d/%d], ACT[%d/%d], ALL[%d/%d]; ----- LOCATIONS:[%d/%d])",
+                       __activeRequestAttempts,
+                       LOCATION_LOGGER_MAX_ACTIVE_REQUEST_ATTEMPTS,
+                       __activeAttempts,
+                       LOCATION_LOGGER_MAX_ACTIVE_LOCATION_ATTEMPTS,
+                       __allAttempts,
+                       LOCATION_LOGGER_MAX_LOCATION_ATTEMPTS,
+                       __locationCount,
+                       LOCATION_LOGGER_MAX_LOCATION_COUNT);
+       if (__checkGeneralLimits()) {
+               if (__checkActiveLimits()) {
+                       __activeIntervalTimerStart();
+               } else {
+                       __passiveIntervalTimerStart();
+               }
+       }
+}
+
+void ctx::LocationLogger::__onActiveRequestSucceeded()
+{
+       _D("");
+       __locationManagerStop();
+       __activeRequestSucceeded = true;
+       __onActiveLocationSucceeded();
+}
+
+void ctx::LocationLogger::__onActiveLocationSucceeded()
+{
+       _D("");
+       __activeLocationSucceeded = true;
+}
+
+void ctx::LocationLogger::__broadcast(ctx::LocationEvent locationEvent)
+{
+       _D("");
+       __locationCount++;
+       if (__listener) {
+               __listener->onNewLocation(locationEvent);
+       }
+       if (LOCATION_LOGGER_DATABASE) {
+               __dbInsertLog(locationEvent);
+       }
+}
+
+bool ctx::LocationLogger::onTimerExpired(int id)
+{
+       time_t now = time(nullptr);
+       double seconds = difftime(now, __timerTimestamp);
+
+       switch (__timerPurpose) {
+       case LOCATION_LOGGER_WAITING_FOR_ACTIVE_REQUEST:
+               _D("Active request FAILED, timerId = %d[%d], from start = %.1fs", id, __timerId, seconds);
+               __locationManagerStop();
+               __setNextTimer();
+               return false;
+       case LOCATION_LOGGER_WAITING_FOR_SERVICE_START:
+               _D("Service start in timeout time FAILED, timerId = %d[%d], from start = %.1fs", id, __timerId, seconds);
+               // Waiting for service start FAILURE is also some kind of active request attempt
+               __activeRequestAttempts++;
+               __activeAttempts++;
+               __allAttempts++;
+               __locationManagerStop();
+               __setNextTimer();
+               return false;
+       case LOCATION_LOGGER_WAITING_FOR_LOCATION_METHOD_SETTING_ON:
+               _D("Still waiting for Location method settings on, timerId = %d[%d], from start = %.1fs", id, __timerId, seconds);
+               // Do nothing
+               return false;
+       case LOCATION_LOGGER_WAITING_FOR_ACTIVE_INTERVAL:
+               _D("Active interval time expired, timerId = %d[%d], from start = %.1fs", id, __timerId, seconds);
+               break;
+       case LOCATION_LOGGER_WAITING_FOR_PASSIVE_INTERVAL:
+               _D("Passive interval time expired, timerId = %d[%d], from start = %.1fs", id, __timerId, seconds);
+               break;
+       default:
+               _D("Do nothing, timerId = %d[%d], from start = %.1fs", id, __timerId, seconds);
+               return false;
+       }
+       if (__locationMethodState) {
+               __locationManagerStart();
+       } else {
+               __timerPurpose = LOCATION_LOGGER_WAITING_FOR_LOCATION_METHOD_SETTING_ON;
+               _D("LOCATION_LOGGER_WAITING_FOR_LOCATION_METHOD_SETTING_ON");
+       }
+       return false;
+}
+
+void ctx::LocationLogger::__activeRequestTimerStart()
+{
+       int minutes = LOCATION_LOGGER_ACTIVE_REQUEST_TIMEOUT_SECONDS / 60;
+       if (LOCATION_LOGGER_ACTIVE_REQUEST_TIMEOUT_SECONDS % 60) {
+               minutes++;
+       }
+       __timerPurpose = LOCATION_LOGGER_WAITING_FOR_ACTIVE_REQUEST;
+       _D("LOCATION_LOGGER_WAITING_FOR_ACTIVE_REQUEST (minutes=%d)", minutes);
+       __timerStart(minutes);
+}
+
+void ctx::LocationLogger::__startServiceTimerStart()
+{
+       __timerPurpose = LOCATION_LOGGER_WAITING_FOR_SERVICE_START;
+       _D("LOCATION_LOGGER_WAITING_FOR_SERVICE_START");
+       __timerStart(LOCATION_LOGGER_SERVICE_START_TIMEOUT_MINUTES);
+}
+
+void ctx::LocationLogger::__activeIntervalTimerStart()
+{
+       __timerPurpose = LOCATION_LOGGER_WAITING_FOR_ACTIVE_INTERVAL;
+       _D("LOCATION_LOGGER_WAITING_FOR_ACTIVE_INTERVAL");
+       __timerStart(LOCATION_LOGGER_ACTIVE_INTERVAL_MINUTES);
+}
+
+void ctx::LocationLogger::__passiveIntervalTimerStart()
+{
+       __timerPurpose = LOCATION_LOGGER_WAITING_FOR_PASSIVE_INTERVAL;
+       _D("LOCATION_LOGGER_WAITING_FOR_PASSIVE_INTERVAL");
+       __timerStart(LOCATION_LOGGER_PASSIVE_INTERVAL_MINUTES);
+}
+
+void ctx::LocationLogger::__timerStart(time_t minutes)
+{
+       __timerTimestamp = time(nullptr);
+       __timerId = __timerManager.setFor(minutes, this);
+       _D("%s (minutes=%d) timerId = %d", __timerId >= 0 ? "SUCCESS" : "ERROR", minutes, __timerId);
+}
+
+void ctx::LocationLogger::__timerStop()
+{
+       _D("");
+       __timerManager.remove(__timerId);
+}
+
+void ctx::LocationLogger::__startLogging()
+{
+       _D("");
+       __activeRequestAttempts = 0;
+       __activeAttempts = 0;
+       __allAttempts = 0;
+       __locationCount = 0;
+       __activeRequestSucceeded = false;;
+       __activeLocationSucceeded = false;
+       __locationManagerStart();
+}
+
+void ctx::LocationLogger::__stopLogging()
+{
+       _D("");
+       __timerStop();
+       __locationManagerStop();
+}
+
+void ctx::LocationLogger::onVisitStart()
+{
+       _D("");
+       if (!__testMode) {
+               __startLogging();
+       }
+}
+
+void ctx::LocationLogger::onVisitEnd()
+{
+       _D("");
+       if (!__testMode) {
+               __stopLogging();
+       }
+}
+
+#undef __LOCATION_ERROR_LOG
diff --git a/src/my-place/user_places/location_logger.h b/src/my-place/user_places/location_logger.h
new file mode 100644 (file)
index 0000000..ae4c9bd
--- /dev/null
@@ -0,0 +1,164 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_LOCATION_LOGGER_H_
+#define _CONTEXT_PLACE_RECOGNITION_LOCATION_LOGGER_H_
+
+#include <locations.h>
+#include <TimerManager.h>
+#include "visit_listener_iface.h"
+#include "location_listener_iface.h"
+
+/* Database usage flag */
+#define LOCATION_LOGGER_DATABASE false // TODO: false in final solution
+
+/* Locations measure method */
+#define LOCATION_LOGGER_METHOD LOCATIONS_METHOD_HYBRID
+
+/* TIMEOUTS: Location active measure request timeout (in seconds). */
+#define LOCATION_LOGGER_ACTIVE_REQUEST_TIMEOUT_SECONDS 100
+
+/* TIMEOUTS: Location service start timeout (in minutes). */
+#define LOCATION_LOGGER_SERVICE_START_TIMEOUT_MINUTES 2
+
+/* FREQUENCIES/INTERVALS: "Active" measure attempts frequency (in minutes) */
+#define LOCATION_LOGGER_ACTIVE_INTERVAL_MINUTES 5
+
+/* FREQUENCIES/INTERVALS: "Passive" measure attempts frequency (in minutes) */
+#define LOCATION_LOGGER_PASSIVE_INTERVAL_MINUTES 30
+
+/* ATTEMTS LIMITS: "Active" request attempts limit (must be <= than active location attempts) */
+#define LOCATION_LOGGER_MAX_ACTIVE_REQUEST_ATTEMPTS 0
+
+/* ATTEMTS LIMITS: "Active" measures attempts limit (must be <= than all attempts limit) */
+#define LOCATION_LOGGER_MAX_ACTIVE_LOCATION_ATTEMPTS 2
+
+/* ATTEMTS LIMITS: All attempts ("active" + "passive") limit */
+#define LOCATION_LOGGER_MAX_LOCATION_ATTEMPTS 3
+
+/* LOCATION LIMIT: Location count limit per visit */
+#define LOCATION_LOGGER_MAX_LOCATION_COUNT 3
+
+namespace ctx {
+
+       enum TimerPurpose {
+               LOCATION_LOGGER_WAITING_FOR_ACTIVE_REQUEST = 0,
+               LOCATION_LOGGER_WAITING_FOR_SERVICE_START = 1,
+               LOCATION_LOGGER_WAITING_FOR_LOCATION_METHOD_SETTING_ON = 2,
+               LOCATION_LOGGER_WAITING_FOR_ACTIVE_INTERVAL = 3,
+               LOCATION_LOGGER_WAITING_FOR_PASSIVE_INTERVAL = 4
+       };
+
+       class LocationLogger : public ITimerListener, public IVisitListener {
+
+       public:
+               LocationLogger(ILocationListener *listener = nullptr, bool testMode = false);
+               ~LocationLogger();
+
+       private:
+               /* INPUT */
+               void onVisitStart();
+               void onVisitEnd();
+
+               /* OUTPUT */
+               ILocationListener * const __listener;
+               void __broadcast(LocationEvent locationEvent);
+
+               /* INTERNAL */
+               bool __testMode;
+               void __startLogging();
+               void __stopLogging();
+               void __locationRequest();
+               void __onActiveRequestSucceeded();
+               void __onActiveLocationSucceeded();
+
+               /* INTERNAL : COUNTERS (LIMITS) */
+               int __activeRequestAttempts;
+               int __activeAttempts;
+               int __allAttempts;
+               int __locationCount;
+               bool __checkGeneralLimits();
+               bool __checkActiveLimits();
+               bool __checkActiveRequestLimits();
+
+               /* INTERNAL : FLAGS */
+               bool __activeRequestSucceeded;
+               bool __activeLocationSucceeded;
+
+               /* TIMER */
+               int __timerId;
+               time_t __timerTimestamp;
+               TimerManager __timerManager;
+               TimerPurpose __timerPurpose;
+               void __setNextTimer();
+               void __activeRequestTimerStart();
+               void __startServiceTimerStart();
+               void __activeIntervalTimerStart();
+               void __passiveIntervalTimerStart();
+               void __timerStart(time_t minutes);
+               void __timerStop();
+               bool onTimerExpired(int timerId);
+
+               /* DATABASE */
+               static int __dbCreateTable();
+               int __dbInsertLog(LocationEvent locationEvent);
+
+               /* DEBUG */
+               static const char* __locationError2Str(int error);
+               static void __log(location_accessibility_state_e state);
+
+               /* LOCATION MANAGER */
+               location_manager_h __locationManager;
+               void __locationManagerCreate();
+               void __locationManagerDestroy();
+               void __locationManagerStart();
+               void __locationManagerStop();
+               location_accessibility_state_e __locationManagerGetAccessibilityState();
+
+               /* LOCATION MANAGER : LOCATION SERVICE STATE */
+               location_service_state_e __locationServiceState;
+               static void __locationServiceStateChangedCb(location_service_state_e state, void *userData);
+               void __locationManagerSetServiceStateChangedCb();
+               void __locationManagerUnsetServiceStateChangedCb();
+
+               /* LOCATION MANAGER : LOCATION METHOD SETTINGS */
+               location_method_e __locationMethod;
+               bool __locationMethodState;
+               bool __locationManagerIsEnabledMethod(location_method_e method);
+               static void __locationSettingChangedCb(location_method_e method, bool enable, void *userData);
+               void __locationManagerSetSettingChangedCb();
+               void __locationManagerUnsetSettingChangedCb();
+
+               /* LOCATION MANAGER : LOCATION */
+               double __locationManagerGetHorizontalAccuracy();
+
+               /* LOCATION MANAGER : LOCATION : SYNCHRONOUS */
+               bool __locationManagerGetLocation();
+               void __locationManagerGetLastLocation();
+
+               /* LOCATION MANAGER : LOCATION : ASYNCHRONOUS */
+               static void __positionUpdatedCb(double latitude, double longitude,
+                               double altitude, time_t timestamp, void *userData);
+               static void __locationUpdatedCb(location_error_e error, double latitude,
+                               double longitude, double altitude, time_t timestamp, double speed,
+                               double direction, double climb, void *userData);
+               bool __locationManagerRequestSingleLocation();
+
+       };      /* class LocationLogger */
+
+}      /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_LOCATION_LOGGER_H_ */
diff --git a/src/my-place/user_places/mahal.cpp b/src/my-place/user_places/mahal.cpp
new file mode 100644 (file)
index 0000000..ccc7f9f
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "mahal.h"
+#include <math.h>
+#include <Types.h>
+
+ctx::num_t ctx::MahalModel::distance(const std::vector<num_t> &v1, const std::vector<num_t> &v2, const std::vector<num_t> &m)
+{
+       size_t n = v1.size();
+       if (m.size() != n * n) {
+               _E("m.size() != n * n");
+               return 0.0; // this value does not make any sense
+       }
+
+       std::vector<num_t> diff(n);
+       for (size_t i = 0; i < n; i++) {
+               diff[i] = v2[i] - v1[i];
+       }
+
+       num_t dist2 = 0; // squared distance
+       for (size_t j = 0; j < n; j++) {
+               for (size_t i = 0; i < n; i++) {
+                       dist2 += m[i * n + j] * diff[i] * diff[j];
+               }
+       }
+       return sqrt(dist2);
+}
+
+ctx::num_t ctx::MahalModel::distance(const std::vector<ctx::num_t> &v)
+{
+       return distance(v, __mean, __sigma);
+}
diff --git a/src/my-place/user_places/mahal.h b/src/my-place/user_places/mahal.h
new file mode 100644 (file)
index 0000000..9e733c7
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_MAHAL_H_
+#define _CONTEXT_PLACE_RECOGNITION_MAHAL_H_
+
+#include <vector>
+#include "user_places_types.h"
+
+namespace ctx {
+
+       /*
+        * Class for Mahalanobis distance computation.
+        */
+       class MahalModel {
+
+       private:
+               std::vector<num_t> __mean;
+               std::vector<num_t> __sigma; // represents square matrix row-wise
+
+       public:
+               static num_t distance(const std::vector<num_t> &v1, const std::vector<num_t> &v2, const std::vector<num_t> &m);
+               MahalModel(std::vector<num_t> mean, std::vector<num_t> sigma) :
+                       __mean(mean),
+                       __sigma(sigma) { }
+               num_t distance(const std::vector<num_t> &v);
+
+       };      /* class MahalModel */
+
+}      /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_MAHAL_H_ */
diff --git a/src/my-place/user_places/median.cpp b/src/my-place/user_places/median.cpp
new file mode 100644 (file)
index 0000000..f0463b3
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <algorithm>
+#include <Types.h>
+#include "median.h"
+
+ctx::num_t ctx::median(std::vector<ctx::num_t> &v)
+{
+       if (v.empty()) {
+               _E("Median of empty set");
+               return 0; // this value does not make any sense
+       }
+       size_t n = v.size() / 2;
+       std::nth_element(v.begin(), v.begin() + n, v.end());
+       num_t vn = v[n];
+       if (v.size() % 2 == 1) {
+               return vn;
+       } else {
+               std::nth_element(v.begin(), v.begin() + n - 1, v.end());
+               return 0.5 * (vn + v[n - 1]);
+       }
+}
diff --git a/src/my-place/user_places/median.h b/src/my-place/user_places/median.h
new file mode 100644 (file)
index 0000000..70461ae
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_MEDIAN_
+#define _CONTEXT_PLACE_RECOGNITION_MEDIAN_
+
+#include "user_places_types.h"
+#include <vector>
+#include "../place_recognition_types.h"
+
+namespace ctx {
+
+       num_t median(std::vector<num_t> &values); // caution: the input vector will be sorted
+
+} /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_MEDIAN_ */
diff --git a/src/my-place/user_places/piecewise_lin.cpp b/src/my-place/user_places/piecewise_lin.cpp
new file mode 100644 (file)
index 0000000..638af66
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "piecewise_lin.h"
+#include <Types.h>
+
+ctx::PiecewiseLin::PiecewiseLin(std::vector<num_t> xs, std::vector<num_t> vs) :
+       __xs(xs),
+       __vs(vs),
+       __n(xs.size())
+{
+       if (xs.size() != vs.size()) {
+               _E("Input arguments have different sizes");
+               return;
+       }
+}
+
+ctx::num_t ctx::PiecewiseLin::value(num_t x)
+{
+       if (x <= __xs[0]) {
+               return __vs[0];
+       } else if (x >= __xs[__n-1]) {
+               return __vs[__n - 1];
+       } else {
+               num_t xp = __xs[0];
+               for (size_t i = 1; i < __n; i++) {
+                       num_t xn = __xs[i];
+                       if (x <= xn) {
+                               num_t d = xn - xp;
+                               num_t dxp = x - xp;
+                               num_t dxn = xn - x;
+                               return (dxn * __vs[i-1] + dxp * __vs[i]) / d;
+                       }
+                       xp = xn;
+               }
+       }
+       _E("Function should return result earlier");
+       return 0.0; // this value does not make any sense
+}
diff --git a/src/my-place/user_places/piecewise_lin.h b/src/my-place/user_places/piecewise_lin.h
new file mode 100644 (file)
index 0000000..0ef4bff
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_PIECEWISE_LIN_
+#define _CONTEXT_PLACE_RECOGNITION_PIECEWISE_LIN_
+
+#include "user_places_types.h"
+
+namespace ctx {
+
+       /*
+        * Piecewise linear function. Used for approximation.
+        */
+       class PiecewiseLin {
+
+       private:
+               std::vector<num_t> __xs; // nodes
+               std::vector<num_t> __vs; // values in nodes
+               size_t __n;
+
+       public:
+               PiecewiseLin(std::vector<num_t> xs, std::vector<num_t> vs);
+               num_t value(num_t x);
+
+       };      /* PiecewiseLin */
+
+}      /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_PIECEWISE_LIN_ */
diff --git a/src/my-place/user_places/place_categer.cpp b/src/my-place/user_places/place_categer.cpp
new file mode 100644 (file)
index 0000000..1b4c975
--- /dev/null
@@ -0,0 +1,113 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "place_categer.h"
+#include "median.h"
+#include "../place_recognition_types.h"
+#include "user_places_params.h"
+#include "user_places_types.h"
+#include <algorithm>
+#include <Types.h>
+
+void ctx::PlaceCateger::reduceOutliers(ctx::Visits &visits)
+{
+       int size = visits.size();
+       visits.erase(std::remove_if(
+                                       visits.begin(),
+                                       visits.end(),
+                                       [](Visit v)->bool {
+                                               return v.categs[PLACE_CATEG_ID_HOME] < PLACES_CATEGER_MIN_VISITS_SCORE
+                                                               && v.categs[PLACE_CATEG_ID_WORK] < PLACES_CATEGER_MIN_VISITS_SCORE
+                                                               && v.categs[PLACE_CATEG_ID_OTHER] < PLACES_CATEGER_MIN_VISITS_SCORE;
+                                       }),
+                               visits.end());
+       int newSize = visits.size();
+       if (size != newSize) {
+               _D("Visits number from %d to %d (visits min scores checking)", size, newSize);
+       }
+}
+
+/*
+ * Change category if home or work has to few visits
+ */
+bool ctx::PlaceCateger::__reduceCategory(const PlaceCategId &categId, const ctx::Visits &visits)
+{
+       return (categId == PLACE_CATEG_ID_HOME && visits.size() < PLACES_CATEGER_MIN_VISITS_PER_HOME)
+               || (categId == PLACE_CATEG_ID_WORK && visits.size() < PLACES_CATEGER_MIN_VISITS_PER_WORK);
+}
+
+void ctx::PlaceCateger::categorize(ctx::Visits &visits, ctx::Place &place)
+{
+       reduceOutliers(visits);
+
+       place.categId = PLACE_CATEG_ID_NONE;
+       place.categConfidence = 0.0;
+
+       if (!visits.empty()) {
+               const std::vector<PlaceCategId> categIds = {
+                       PLACE_CATEG_ID_HOME,
+                       PLACE_CATEG_ID_WORK,
+                       PLACE_CATEG_ID_OTHER
+               };
+               num_t sumScore = 0.0;
+               num_t maxScore = 0.0;
+               for (PlaceCategId categId : categIds) {
+                       std::vector<num_t> categVector = categVectorFromVisits(visits, categId);
+                       num_t score = median(categVector);
+                       sumScore += score;
+                       if (score > maxScore) {
+                               maxScore = score;
+                               place.categId = categId;
+                       }
+               }
+               if (sumScore > 0) {
+                       place.categConfidence = maxScore / sumScore;
+               }
+               if (__reduceCategory(place.categId, visits)) {
+                       place.categId = PLACE_CATEG_ID_OTHER;
+                       place.categConfidence = 0.0;
+               }
+       }
+
+       place.name = categId2Name(place.categId);
+}
+
+std::vector<ctx::num_t> ctx::PlaceCateger::categVectorFromVisits(const ctx::Visits &visits, PlaceCategId categId)
+{
+       std::vector<ctx::num_t> vec;
+       for (auto &visit : visits) {
+               auto search = visit.categs.find(categId);
+               if (search != visit.categs.end()) {
+                       vec.push_back(search->second);
+               }
+       }
+       return vec;
+}
+
+std::string ctx::PlaceCateger::categId2Name(PlaceCategId categId) {
+       switch (categId) {
+       case PLACE_CATEG_ID_HOME:
+               return "home";
+       case PLACE_CATEG_ID_WORK:
+               return "work";
+       case PLACE_CATEG_ID_OTHER:
+               return "other";
+       case PLACE_CATEG_ID_NONE:
+               return "none";
+       default:
+               return "";
+       }
+}
diff --git a/src/my-place/user_places/place_categer.h b/src/my-place/user_places/place_categer.h
new file mode 100644 (file)
index 0000000..0d127b1
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_PLACE_CATEGER_
+#define _CONTEXT_PLACE_RECOGNITION_PLACE_CATEGER_
+
+#include "user_places_types.h"
+#include <utility>
+#include <vector>
+#include <string>
+#include "../place_recognition_types.h"
+
+namespace ctx {
+
+       class PlaceCateger {
+
+       private:
+               static bool __reduceCategory(const PlaceCategId &categId, const ctx::Visits &visits);
+
+       public:
+               static void reduceOutliers(Visits &visits); // TODO: move to private
+               static std::vector<ctx::num_t> categVectorFromVisits(const ctx::Visits &visits, PlaceCategId categId); // TODO: move to private
+               static void categorize(ctx::Visits &visits, ctx::Place &place);
+               static std::string categId2Name(PlaceCategId categId); // TODO: move to private
+
+       };      /* class PlaceCateger */
+
+}      /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_PLACE_CATEGER_ */
diff --git a/src/my-place/user_places/places_detector.cpp b/src/my-place/user_places/places_detector.cpp
new file mode 100644 (file)
index 0000000..a48e395
--- /dev/null
@@ -0,0 +1,431 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <sstream>
+#include <Types.h>
+#include <Json.h>
+#include "similarity.h"
+#include "places_detector.h"
+#include "place_categer.h"
+#include "graph.h"
+#include "median.h"
+#ifdef TIZEN_ENGINEER_MODE
+#include "gmap.h"
+#endif /* TIZEN_ENGINEER_MODE */
+#include "../place_recognition_types.h"
+#include <fstream>
+#include <algorithm>
+#include "user_places_params.h"
+
+#define __DELETE_PLACES_QUERY "DELETE FROM " PLACE_TABLE
+
+#ifdef TIZEN_ENGINEER_MODE
+#define __USER_PLACES_FILE "/opt/usr/media/Others/user_places.txt" // TODO: Only for debug purposes -> Remove in final solution
+#endif /* TIZEN_ENGINEER_MODE */
+
+#define __GET_VISITS_QUERY "SELECT "\
+       VISIT_COLUMN_END_TIME ", "\
+       VISIT_COLUMN_START_TIME ", "\
+       VISIT_COLUMN_WIFI_APS ", "\
+       VISIT_COLUMN_LOCATION_VALID ", "\
+       VISIT_COLUMN_LOCATION_LATITUDE ", "\
+       VISIT_COLUMN_LOCATION_LONGITUDE ", " \
+       VISIT_COLUMN_CATEG_HOME ", "\
+       VISIT_COLUMN_CATEG_WORK ", "\
+       VISIT_COLUMN_CATEG_OTHER \
+       " FROM " VISIT_TABLE
+
+#define __GET_PLACES_QUERY "SELECT "\
+       PLACE_COLUMN_CATEG_ID ", "\
+       PLACE_COLUMN_CATEG_CONFIDENCE ", "\
+       PLACE_COLUMN_NAME ", "\
+       PLACE_COLUMN_LOCATION_VALID ", "\
+       PLACE_COLUMN_LOCATION_LATITUDE ", "\
+       PLACE_COLUMN_LOCATION_LONGITUDE ", " \
+       PLACE_COLUMN_WIFI_APS ", "\
+       PLACE_COLUMN_CREATE_DATE \
+       " FROM " PLACE_TABLE
+
+#define __PLACE_TABLE_COLUMNS \
+       PLACE_COLUMN_CATEG_ID " INTEGER, "\
+       PLACE_COLUMN_CATEG_CONFIDENCE " REAL, "\
+       PLACE_COLUMN_NAME " TEXT, "\
+       PLACE_COLUMN_LOCATION_VALID " INTEGER, "\
+       PLACE_COLUMN_LOCATION_LATITUDE " REAL, "\
+       PLACE_COLUMN_LOCATION_LONGITUDE " REAL, "\
+       PLACE_COLUMN_WIFI_APS " STRING, "\
+       PLACE_COLUMN_CREATE_DATE " timestamp"
+
+bool ctx::PlacesDetector::onTimerExpired(int timerId)
+{
+       _D("");
+       __dbDeletePlaces();
+       __dbDeleteOldVisits();
+       std::vector<Json> records = __dbGetVisits();
+       Visits visits = __visitsFromJsons(records);
+       __processVisits(visits);
+       return true;
+}
+
+std::vector<ctx::Json> ctx::PlacesDetector::__dbGetVisits()
+{
+       std::vector<Json> records;
+       bool ret = __dbManager.executeSync(__GET_VISITS_QUERY, &records);
+       _D("load visits execute query result: %s", ret ? "SUCCESS" : "FAIL");
+       return records;
+}
+
+std::vector<ctx::Json> ctx::PlacesDetector::__dbGetPlaces()
+{
+       std::vector<Json> records;
+       bool ret = __dbManager.executeSync(__GET_PLACES_QUERY, &records);
+       _D("load places execute query result: %s", ret ? "SUCCESS" : "FAIL");
+       return records;
+}
+
+double ctx::PlacesDetector::__doubleValueFromJson(Json &row, const char* key)
+{
+       double value;
+       row.get(NULL, key, &value);
+       _D("__doubleValueFromJson, key:%s, value: %lf", key, value);
+       return value;
+}
+
+ctx::Categs ctx::PlacesDetector::__visitCategsFromJson(Json &row)
+{
+       Categs categs;
+       categs[PLACE_CATEG_ID_HOME] = __doubleValueFromJson(row, VISIT_COLUMN_CATEG_HOME);
+       categs[PLACE_CATEG_ID_WORK] = __doubleValueFromJson(row, VISIT_COLUMN_CATEG_WORK);
+       categs[PLACE_CATEG_ID_OTHER] = __doubleValueFromJson(row, VISIT_COLUMN_CATEG_OTHER);
+       return categs;
+}
+
+ctx::Visit ctx::PlacesDetector::__visitFromJson(Json &row)
+{
+       int startTime;
+       int endTime;
+       std::string str;
+       row.get(NULL, VISIT_COLUMN_START_TIME, &startTime);
+       row.get(NULL, VISIT_COLUMN_END_TIME, &endTime);
+       row.get(NULL, VISIT_COLUMN_WIFI_APS, &str);
+
+       std::stringstream ss;
+       ss << str;
+       std::shared_ptr<MacSet> macSet = std::make_shared<MacSet>();
+       ss >> *macSet;
+
+       Interval interval(startTime, endTime);
+       Categs categs = __visitCategsFromJson(row);
+
+       Visit visit(interval, macSet, categs);
+
+       { // location
+               int locationValidInt;
+               row.get(NULL, VISIT_COLUMN_LOCATION_VALID, &locationValidInt);
+               visit.locationValid = (bool) locationValidInt;
+               row.get(NULL, VISIT_COLUMN_LOCATION_LATITUDE, &(visit.location.latitude));
+               row.get(NULL, VISIT_COLUMN_LOCATION_LONGITUDE, &(visit.location.longitude));
+       }
+
+       return visit;
+}
+
+ctx::Visits ctx::PlacesDetector::__visitsFromJsons(std::vector<Json>& records)
+{
+       Visits visits;
+       _D("db_result: number of all visits: %d", records.size());
+
+       for (Json &row : records) {
+               Visit visit = __visitFromJson(row);
+               visits.push_back(visit);
+       }
+       _D("number of all visits in vector: %d", visits.size());
+       return visits;
+}
+
+std::shared_ptr<ctx::Place> ctx::PlacesDetector::__placeFromJson(Json &row)
+{
+       std::shared_ptr<Place> place = std::make_shared<Place>();
+       { // category
+               int categId;
+               row.get(NULL, PLACE_COLUMN_CATEG_ID, &categId);
+               // This is due to the fact the JSON module API interface doesn't handle enum
+               place->categId = static_cast<PlaceCategId>(categId);
+       }
+       row.get(NULL, PLACE_COLUMN_NAME, &(place->name));
+       row.get(NULL, PLACE_COLUMN_WIFI_APS, &(place->wifiAps));
+       { // location
+               int locationValidInt;
+               row.get(NULL, PLACE_COLUMN_LOCATION_VALID, &locationValidInt);
+               place->locationValid = (bool) locationValidInt;
+               row.get(NULL, PLACE_COLUMN_LOCATION_LATITUDE, &(place->location.latitude));
+               row.get(NULL, PLACE_COLUMN_LOCATION_LONGITUDE, &(place->location.longitude));
+       }
+       { // createDate
+               int createDate;
+               row.get(NULL, PLACE_COLUMN_CREATE_DATE, &(createDate));
+               // This is due to the fact the JSON module API interface doesn't handle time_t
+               place->createDate = static_cast<time_t>(createDate);
+       }
+       _D("db_result: categId: %d; place: name: %s; wifiAps: %s; locationValid: %d; latitude: %lf, longitude: %lf, createDate: %d", place->categId, place->name.c_str(), place->wifiAps.c_str(), place->locationValid, place->location.latitude, place->location.longitude, place->createDate);
+       return place;
+}
+
+std::vector<std::shared_ptr<ctx::Place>> ctx::PlacesDetector::__placesFromJsons(std::vector<Json>& records)
+{
+       std::vector<std::shared_ptr<Place>> places;
+       _D("db_result: number of all places: %d", records.size());
+
+       for (Json &row : records) {
+               std::shared_ptr<Place> place = __placeFromJson(row);
+               places.push_back(place);
+       }
+       _D("number of all places in vector: %d", places.size());
+       return places;
+}
+
+void ctx::PlacesDetector::reduceOutliers(ctx::Visits &visits)
+{
+       int size = visits.size();
+       visits.erase(std::remove_if(
+                                       visits.begin(),
+                                       visits.end(),
+                                       [](Visit v)->bool {
+                                               int minutes = (v.interval.end - v.interval.start) / 60;
+                                               return (minutes < PLACES_DETECTOR_MIN_VISIT_DURATION_MINUTES)
+                                                               || (minutes > PLACES_DETECTOR_MAX_VISIT_DURATION_MINUTES);
+                                       }),
+                               visits.end());
+       int newSize = visits.size();
+       if (size != newSize) {
+               _D("Visits number from %d to %d (to short and to long reduction)", size, newSize);
+       }
+}
+
+void ctx::PlacesDetector::__processVisits(ctx::Visits &visits)
+{
+       reduceOutliers(visits);
+
+       _D("__testMode = %d", __testMode);
+       auto components = __mergeVisits(visits);
+       std::vector<std::shared_ptr<Place>> newDetectedPlaces;
+#ifdef TIZEN_ENGINEER_MODE
+       std::vector<Visits> placesVisits; // TODO: remove from final solution.
+#endif /* TIZEN_ENGINEER_MODE */
+       for (std::shared_ptr<graph::Component> component : *components) {
+               // Small places outliers reduction
+               if (!__testMode && component->size() < PLACES_DETECTOR_MIN_VISITS_PER_BIG_PLACE) {
+                       continue;
+               }
+
+               std::shared_ptr<Visits> merged = std::make_shared<Visits>();
+               for (graph::Node i : *component) {
+                       merged->push_back(visits[i]);
+               }
+               std::shared_ptr<Place> place = __placeFromMergedVisits(*merged);
+               if (place->categId == PLACE_CATEG_ID_NONE) {
+                       continue;
+               }
+               newDetectedPlaces.push_back(place);
+               if (!__testMode) {
+                       __dbInsertPlace(*place);
+               }
+
+#ifdef TIZEN_ENGINEER_MODE
+               { // TODO: Only for debug -> remove in final solution
+                       Visits placeVisits;
+                       for (graph::Node i : *component) {
+                               placeVisits.push_back(visits[i]);
+                       }
+                       placesVisits.push_back(placeVisits);
+               }
+#endif /* TIZEN_ENGINEER_MODE */
+       }
+
+       __detectedPlacesUpdate(newDetectedPlaces);
+
+#ifdef TIZEN_ENGINEER_MODE
+       { // Print to file TODO: Only for debug -> remove in final solution
+               std::ofstream out(__USER_PLACES_FILE);
+               for (size_t i = 0; i < newDetectedPlaces.size(); i++) {
+                       newDetectedPlaces[i]->print2Stream(out);
+                       Visits placeVisits = placesVisits[i];
+                       for (Visit visit : placeVisits) {
+                               visit.printShort2Stream(out);
+                       }
+               }
+               out.close();
+               Gmap::writeMap(newDetectedPlaces);
+       }
+#endif /* TIZEN_ENGINEER_MODE */
+}
+
+/*
+ * Replace old places by new ones.
+ */
+void ctx::PlacesDetector::__detectedPlacesUpdate(std::vector<std::shared_ptr<Place>> &newPlaces)
+{
+       _D("");
+       // XXX: In case of thread safety issues use std::mutex to protect places list.
+       __detectedPlaces = newPlaces;
+}
+
+void ctx::PlacesDetector::__mergeLocation(const Visits &visits, Place &place)
+{
+       place.locationValid = false;
+       std::vector<double> latitudes;
+       std::vector<double> longitudes;
+       for (const Visit& visit : visits) {
+               if (visit.locationValid) {
+                       latitudes.push_back(visit.location.latitude);
+                       longitudes.push_back(visit.location.longitude);
+                       place.locationValid = true;
+               }
+       }
+       if (place.locationValid) {
+               place.location.latitude = median(latitudes);
+               place.location.longitude = median(longitudes);
+       }
+}
+
+std::shared_ptr<ctx::Place> ctx::PlacesDetector::__placeFromMergedVisits(Visits &mergedVisits)
+{
+       std::shared_ptr<Place> place = std::make_shared<Place>();
+       place->createDate = std::time(nullptr);
+       std::vector<std::shared_ptr<MacSet>> macSets;
+       for (const Visit &visit : mergedVisits) {
+               macSets.push_back(visit.macSet);
+       }
+       std::shared_ptr<MacSet> allMacs = macSetsUnion(macSets);
+       std::stringstream ss;
+       ss << *allMacs;
+       place->wifiAps = ss.str();
+
+       __mergeLocation(mergedVisits, *place);
+
+       PlaceCateger::categorize(mergedVisits, *place);
+
+       return place;
+}
+
+void ctx::PlacesDetector::reduceOutliers(std::shared_ptr<ctx::graph::Components> &cc)
+{
+       int size = cc->size();
+       cc->erase(std::remove_if(cc->begin(),
+                                                        cc->end(),
+                                                        [](std::shared_ptr<graph::Component> &c)->bool {
+                                                                return c->size() < PLACES_DETECTOR_MIN_VISITS_PER_PLACE;
+                                                        }),
+                         cc->end());
+       int newSize = cc->size();
+       if (size != newSize) {
+               _D("Connected components from %d to %d (min visit per place)", size, newSize);
+       }
+}
+
+std::shared_ptr<ctx::graph::Components> ctx::PlacesDetector::__mergeVisits(const std::vector<Visit> &visits)
+{
+       auto graph = __graphFromVisits(visits);
+       auto cc = graph::connectedComponents(*graph);
+       reduceOutliers(cc);
+       return cc;
+}
+
+std::shared_ptr<ctx::graph::Graph> ctx::PlacesDetector::__graphFromVisits(const std::vector<Visit> &visits)
+{
+       std::shared_ptr<graph::Graph> graph = std::make_shared<graph::Graph>();
+       graph->resize(visits.size());
+       for (size_t i = 0; i < visits.size(); i++) {
+               (*graph)[i] = std::make_shared<graph::NeighbourNodes>();
+               for (size_t j = 0; j < i; j++) {
+                       if (similarity::isJoint(*visits[i].macSet, *visits[j].macSet)) {
+                               (*graph)[i]->insert(j);
+                               (*graph)[j]->insert(i);
+                       }
+               }
+       }
+       return graph;
+}
+
+void ctx::PlacesDetector::__dbDeletePlaces()
+{
+       std::vector<Json> records;
+       bool ret = __dbManager.executeSync(__DELETE_PLACES_QUERY, &records);
+       _D("delete places execute query result: %s", ret ? "SUCCESS" : "FAIL");
+}
+
+void ctx::PlacesDetector::__dbDeleteOldVisits()
+{
+       time_t currentTime;
+       time(&currentTime);
+       time_t thresholdTime = currentTime - PLACES_DETECTOR_RETENTION_SECONDS;
+       __dbDeleteOlderVisitsThan(thresholdTime);
+}
+
+void ctx::PlacesDetector::__dbDeleteOlderVisitsThan(time_t threshold)
+{
+       _D("deleting vistits older than: %d", threshold);
+       std::stringstream query;
+       query << "DELETE FROM " << VISIT_TABLE;
+       query << " WHERE " << VISIT_COLUMN_END_TIME << " < " << threshold;
+       // query << " AND 0"; // XXX: Always false condition. Uncomment it for not deleting any visit during development.
+       std::vector<Json> records;
+       bool ret = __dbManager.executeSync(query.str().c_str(), &records);
+       _D("delete old visits execute query result: %s", ret ? "SUCCESS" : "FAIL");
+}
+
+ctx::PlacesDetector::PlacesDetector(bool testMode) :
+       __testMode(testMode)
+{
+       if (testMode) {
+               return;
+       }
+       __dbCreateTable();
+       std::vector<Json> records = __dbGetPlaces();
+       std::vector<std::shared_ptr<Place>> dbPlaces = __placesFromJsons(records);
+       __detectedPlacesUpdate(dbPlaces);
+}
+
+void ctx::PlacesDetector::__dbCreateTable()
+{
+       bool ret = __dbManager.createTable(0, PLACE_TABLE, __PLACE_TABLE_COLUMNS);
+       _D("db: place Table Creation Result: %s", ret ? "SUCCESS" : "FAIL");
+}
+
+void ctx::PlacesDetector::__dbInsertPlace(const Place &place)
+{
+       Json data;
+       data.set(NULL, PLACE_COLUMN_CATEG_ID, place.categId);
+       data.set(NULL, PLACE_COLUMN_CATEG_CONFIDENCE, place.categConfidence);
+       data.set(NULL, PLACE_COLUMN_NAME, place.name);
+
+       data.set(NULL, PLACE_COLUMN_LOCATION_VALID, place.locationValid);
+       data.set(NULL, PLACE_COLUMN_LOCATION_LATITUDE, place.location.latitude);
+       data.set(NULL, PLACE_COLUMN_LOCATION_LONGITUDE, place.location.longitude);
+
+       data.set(NULL, PLACE_COLUMN_WIFI_APS, place.wifiAps);
+       data.set(NULL, PLACE_COLUMN_CREATE_DATE, static_cast<int>(place.createDate));
+
+       int64_t rowId;
+       bool ret = __dbManager.insertSync(PLACE_TABLE, data, &rowId);
+       _D("insert place execute query result: %s", ret ? "SUCCESS" : "FAIL");
+}
+
+std::vector<std::shared_ptr<ctx::Place>> ctx::PlacesDetector::getPlaces()
+{
+       // XXX: In case of thread safety issues use std::mutex to protect places list.
+       return __detectedPlaces;
+}
diff --git a/src/my-place/user_places/places_detector.h b/src/my-place/user_places/places_detector.h
new file mode 100644 (file)
index 0000000..6444539
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_PLACES_DETECTOR_
+#define _CONTEXT_PLACE_RECOGNITION_PLACES_DETECTOR_
+
+#include <vector>
+#include <cstdint>
+#include <ITimerListener.h>
+#include <DatabaseManager.h>
+#include "visit_detector.h"
+#include "user_places_types.h"
+
+namespace ctx {
+
+       class PlacesDetector : public ITimerListener {
+
+       private:
+               bool __testMode;
+               DatabaseManager __dbManager;
+
+               double __doubleValueFromJson(Json &row, const char* key);
+               Categs __visitCategsFromJson(Json &row);
+               Visit __visitFromJson(Json &row);
+               Visits __visitsFromJsons(std::vector<Json>& records);
+               std::shared_ptr<ctx::Place> __placeFromJson(Json &row);
+               std::vector<std::shared_ptr<Place>> __placesFromJsons(std::vector<Json>& records);
+
+               std::shared_ptr<graph::Graph> __graphFromVisits(const std::vector<Visit> &visits);
+
+               void __dbCreateTable();
+               void __dbDeletePlaces();
+               void __dbDeleteOldVisits();
+               void __dbDeleteOlderVisitsThan(time_t threshold);
+               std::vector<Json> __dbGetVisits();
+               std::vector<Json> __dbGetPlaces();
+               void __dbInsertPlace(const Place &place);
+
+               std::shared_ptr<Place> __placeFromMergedVisits(Visits &mergedVisits);
+               std::vector<std::shared_ptr<Place>> __detectedPlaces;
+               void __detectedPlacesUpdate(std::vector<std::shared_ptr<Place>> &newPlaces);
+               void __processVisits(Visits &visits);
+               static void __mergeLocation(const Visits &mergedVisits, Place &place);
+               std::shared_ptr<graph::Components> __mergeVisits(const std::vector<Visit> &visits);
+
+               bool onTimerExpired(int timerId);
+
+       public:
+               PlacesDetector(bool testMode = false);
+               static void reduceOutliers(Visits &visits); // TODO: move to private
+               static void reduceOutliers(std::shared_ptr<graph::Components> &cc); // TODO: move to private
+               std::vector<std::shared_ptr<Place>> getPlaces();
+
+       };  /* class PlacesDetector */
+
+}      /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_PLACES_DETECTOR_ */
diff --git a/src/my-place/user_places/prob_features_model.h b/src/my-place/user_places/prob_features_model.h
new file mode 100644 (file)
index 0000000..d30f548
--- /dev/null
@@ -0,0 +1,30291 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_FEATURES_MODEL_H_
+#define _CONTEXT_PLACE_RECOGNITION_FEATURES_MODEL_H_
+
+namespace ctx {
+
+namespace prob_features {
+
+       /*
+        * Probabilities for whole week <monday Ã· sunday> with minutes resolution
+        * from beginning of the week (sunday -> monday midnight) <0, 10080).
+        * Key is PlaceCategId:
+        *     PLACE_CATEG_ID_HOME
+        *     PLACE_CATEG_ID_WORK
+        *     PLACE_CATEG_ID_OTHER
+        */
+       std::map<PlaceCategId, std::vector<num_t>> weekModel {
+               { PLACE_CATEG_ID_HOME,
+                       {
+                               0.9824561403508770,
+                               0.9824561403508770,
+                               0.9824561403508770,
+                               0.9824561403508770,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9833333333333330,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9830508474576270,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9827586206896550,
+                               0.9824561403508770,
+                               0.9824561403508770,
+                               0.9824561403508770,
+                               0.9824561403508770,
+                               0.9824561403508770,
+                               0.9824561403508770,
+                               0.9824561403508770,
+                               0.9824561403508770,
+                               0.9824561403508770,
+                               0.9824561403508770,
+                               0.9824561403508770,
+                               0.9824561403508770,
+                               0.9824561403508770,
+                               0.9824561403508770,
+                               0.9824561403508770,
+                               0.9824561403508770,
+                               0.9824561403508770,
+                               0.9824561403508770,
+                               0.9824561403508770,
+                               0.9824561403508770,
+                               0.9824561403508770,
+                               0.9821428571428570,
+                               0.9821428571428570,
+                               0.9821428571428570,
+                               0.9824561403508770,
+                               0.9824561403508770,
+                               0.9824561403508770,
+                               0.9824561403508770,
+                               0.9824561403508770,
+                               0.9824561403508770,
+                               0.9824561403508770,
+                               0.9821428571428570,
+                               0.9821428571428570,
+                               0.9821428571428570,
+                               0.9821428571428570,
+                               0.9821428571428570,
+                               0.9649122807017540,
+                               0.9649122807017540,
+                               0.9649122807017540,
+                               0.9649122807017540,
+                               0.9649122807017540,
+                               0.9649122807017540,
+                               0.9649122807017540,
+                               0.9636363636363640,
+                               0.9636363636363640,
+                               0.9642857142857140,
+                               0.9642857142857140,
+                               0.9642857142857140,
+                               0.9642857142857140,
+                               0.9629629629629630,
+                               0.9629629629629630,
+                               0.9629629629629630,
+                               0.9629629629629630,
+                               0.9629629629629630,
+                               0.9629629629629630,
+                               0.9454545454545450,
+                               0.9454545454545450,
+                               0.9285714285714290,
+                               0.9285714285714290,
+                               0.9285714285714290,
+                               0.9122807017543860,
+                               0.9122807017543860,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9074074074074070,
+                               0.9074074074074070,
+                               0.9074074074074070,
+                               0.9074074074074070,
+                               0.9074074074074070,
+                               0.9074074074074070,
+                               0.9074074074074070,
+                               0.9074074074074070,
+                               0.9245283018867930,
+                               0.9074074074074070,
+                               0.9074074074074070,
+                               0.9074074074074070,
+                               0.9038461538461540,
+                               0.9038461538461540,
+                               0.9038461538461540,
+                               0.9038461538461540,
+                               0.9215686274509800,
+                               0.9215686274509800,
+                               0.9038461538461540,
+                               0.9038461538461540,
+                               0.9038461538461540,
+                               0.8823529411764710,
+                               0.8823529411764710,
+                               0.8823529411764710,
+                               0.8653846153846150,
+                               0.8653846153846150,
+                               0.8653846153846150,
+                               0.8653846153846150,
+                               0.8653846153846150,
+                               0.8653846153846150,
+                               0.8653846153846150,
+                               0.8653846153846150,
+                               0.8653846153846150,
+                               0.8490566037735850,
+                               0.8490566037735850,
+                               0.8490566037735850,
+                               0.8490566037735850,
+                               0.8461538461538460,
+                               0.8461538461538460,
+                               0.8461538461538460,
+                               0.8461538461538460,
+                               0.8461538461538460,
+                               0.8461538461538460,
+                               0.8461538461538460,
+                               0.8148148148148150,
+                               0.8148148148148150,
+                               0.8148148148148150,
+                               0.8148148148148150,
+                               0.8148148148148150,
+                               0.8113207547169810,
+                               0.7962962962962960,
+                               0.7962962962962960,
+                               0.7962962962962960,
+                               0.7924528301886790,
+                               0.7924528301886790,
+                               0.7924528301886790,
+                               0.7735849056603770,
+                               0.7735849056603770,
+                               0.7735849056603770,
+                               0.7735849056603770,
+                               0.7735849056603770,
+                               0.7735849056603770,
+                               0.7735849056603770,
+                               0.7735849056603770,
+                               0.7735849056603770,
+                               0.7735849056603770,
+                               0.7735849056603770,
+                               0.7692307692307690,
+                               0.7547169811320760,
+                               0.7547169811320760,
+                               0.7547169811320760,
+                               0.7547169811320760,
+                               0.7547169811320760,
+                               0.7272727272727270,
+                               0.7272727272727270,
+                               0.7272727272727270,
+                               0.7272727272727270,
+                               0.7272727272727270,
+                               0.7272727272727270,
+                               0.7169811320754720,
+                               0.7169811320754720,
+                               0.7169811320754720,
+                               0.7115384615384620,
+                               0.7000000000000000,
+                               0.7000000000000000,
+                               0.6875000000000000,
+                               0.6808510638297870,
+                               0.6808510638297870,
+                               0.6808510638297870,
+                               0.6808510638297870,
+                               0.6666666666666670,
+                               0.6400000000000000,
+                               0.6274509803921570,
+                               0.6153846153846150,
+                               0.6153846153846150,
+                               0.6153846153846150,
+                               0.6153846153846150,
+                               0.6078431372549020,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.5882352941176470,
+                               0.5882352941176470,
+                               0.5882352941176470,
+                               0.5882352941176470,
+                               0.5882352941176470,
+                               0.5769230769230770,
+                               0.5769230769230770,
+                               0.5600000000000000,
+                               0.5490196078431370,
+                               0.5208333333333330,
+                               0.5208333333333330,
+                               0.5208333333333330,
+                               0.5208333333333330,
+                               0.5208333333333330,
+                               0.5102040816326530,
+                               0.4893617021276600,
+                               0.4893617021276600,
+                               0.4893617021276600,
+                               0.4893617021276600,
+                               0.4444444444444440,
+                               0.4347826086956520,
+                               0.4347826086956520,
+                               0.4347826086956520,
+                               0.4347826086956520,
+                               0.4347826086956520,
+                               0.4347826086956520,
+                               0.4255319148936170,
+                               0.4130434782608700,
+                               0.4130434782608700,
+                               0.3913043478260870,
+                               0.3913043478260870,
+                               0.3913043478260870,
+                               0.3913043478260870,
+                               0.3777777777777780,
+                               0.3777777777777780,
+                               0.3777777777777780,
+                               0.3478260869565220,
+                               0.3478260869565220,
+                               0.3478260869565220,
+                               0.3478260869565220,
+                               0.3478260869565220,
+                               0.3181818181818180,
+                               0.3181818181818180,
+                               0.3181818181818180,
+                               0.3181818181818180,
+                               0.3111111111111110,
+                               0.3111111111111110,
+                               0.2790697674418600,
+                               0.2727272727272730,
+                               0.2727272727272730,
+                               0.2727272727272730,
+                               0.2666666666666670,
+                               0.2666666666666670,
+                               0.2666666666666670,
+                               0.2500000000000000,
+                               0.2500000000000000,
+                               0.2500000000000000,
+                               0.2244897959183670,
+                               0.2244897959183670,
+                               0.2200000000000000,
+                               0.2156862745098040,
+                               0.2156862745098040,
+                               0.2156862745098040,
+                               0.2075471698113210,
+                               0.2075471698113210,
+                               0.1923076923076920,
+                               0.1923076923076920,
+                               0.1886792452830190,
+                               0.1886792452830190,
+                               0.1886792452830190,
+                               0.1886792452830190,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1481481481481480,
+                               0.1481481481481480,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1379310344827590,
+                               0.1379310344827590,
+                               0.1186440677966100,
+                               0.1186440677966100,
+                               0.1186440677966100,
+                               0.1186440677966100,
+                               0.1186440677966100,
+                               0.1186440677966100,
+                               0.1186440677966100,
+                               0.1186440677966100,
+                               0.1034482758620690,
+                               0.1034482758620690,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0666666666666667,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0666666666666667,
+                               0.0677966101694915,
+                               0.0666666666666667,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0819672131147541,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0847457627118644,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0847457627118644,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0819672131147541,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0689655172413793,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.1034482758620690,
+                               0.1034482758620690,
+                               0.1034482758620690,
+                               0.1052631578947370,
+                               0.1052631578947370,
+                               0.1052631578947370,
+                               0.1071428571428570,
+                               0.1071428571428570,
+                               0.1071428571428570,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1090909090909090,
+                               0.1111111111111110,
+                               0.1090909090909090,
+                               0.1111111111111110,
+                               0.1132075471698110,
+                               0.1153846153846150,
+                               0.1153846153846150,
+                               0.1153846153846150,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1346153846153850,
+                               0.1509433962264150,
+                               0.1509433962264150,
+                               0.1509433962264150,
+                               0.1481481481481480,
+                               0.1636363636363640,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1578947368421050,
+                               0.1724137931034480,
+                               0.1724137931034480,
+                               0.1754385964912280,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1818181818181820,
+                               0.1851851851851850,
+                               0.1851851851851850,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.1785714285714290,
+                               0.1851851851851850,
+                               0.1851851851851850,
+                               0.1818181818181820,
+                               0.1964285714285710,
+                               0.1818181818181820,
+                               0.1818181818181820,
+                               0.1964285714285710,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.2105263157894740,
+                               0.2142857142857140,
+                               0.2321428571428570,
+                               0.2280701754385960,
+                               0.2280701754385960,
+                               0.2321428571428570,
+                               0.2321428571428570,
+                               0.2500000000000000,
+                               0.2545454545454540,
+                               0.2545454545454540,
+                               0.2545454545454540,
+                               0.2545454545454540,
+                               0.2500000000000000,
+                               0.2500000000000000,
+                               0.2545454545454540,
+                               0.2545454545454540,
+                               0.2545454545454540,
+                               0.2545454545454540,
+                               0.2545454545454540,
+                               0.2592592592592590,
+                               0.2545454545454540,
+                               0.2545454545454540,
+                               0.2592592592592590,
+                               0.2592592592592590,
+                               0.2592592592592590,
+                               0.2777777777777780,
+                               0.2777777777777780,
+                               0.2641509433962260,
+                               0.2692307692307690,
+                               0.2692307692307690,
+                               0.2745098039215690,
+                               0.2830188679245280,
+                               0.2884615384615380,
+                               0.2941176470588230,
+                               0.2941176470588230,
+                               0.2941176470588230,
+                               0.2884615384615380,
+                               0.2941176470588230,
+                               0.2884615384615380,
+                               0.2884615384615380,
+                               0.3000000000000000,
+                               0.3061224489795920,
+                               0.3061224489795920,
+                               0.3061224489795920,
+                               0.3061224489795920,
+                               0.3000000000000000,
+                               0.3061224489795920,
+                               0.3061224489795920,
+                               0.3061224489795920,
+                               0.3265306122448980,
+                               0.3265306122448980,
+                               0.3200000000000000,
+                               0.3404255319148940,
+                               0.3404255319148940,
+                               0.3404255319148940,
+                               0.3404255319148940,
+                               0.3404255319148940,
+                               0.3404255319148940,
+                               0.3478260869565220,
+                               0.3695652173913040,
+                               0.3695652173913040,
+                               0.3695652173913040,
+                               0.4130434782608700,
+                               0.4130434782608700,
+                               0.4255319148936170,
+                               0.4255319148936170,
+                               0.4255319148936170,
+                               0.4489795918367350,
+                               0.4888888888888890,
+                               0.5000000000000000,
+                               0.5000000000000000,
+                               0.5000000000000000,
+                               0.5000000000000000,
+                               0.5116279069767440,
+                               0.5116279069767440,
+                               0.5116279069767440,
+                               0.5238095238095240,
+                               0.5238095238095240,
+                               0.5365853658536590,
+                               0.5365853658536590,
+                               0.5348837209302320,
+                               0.5348837209302320,
+                               0.5227272727272730,
+                               0.5348837209302320,
+                               0.5348837209302320,
+                               0.5348837209302320,
+                               0.5227272727272730,
+                               0.5227272727272730,
+                               0.5000000000000000,
+                               0.5000000000000000,
+                               0.5111111111111110,
+                               0.5111111111111110,
+                               0.5227272727272730,
+                               0.5227272727272730,
+                               0.4893617021276600,
+                               0.5000000000000000,
+                               0.5102040816326530,
+                               0.5102040816326530,
+                               0.5200000000000000,
+                               0.5306122448979590,
+                               0.5200000000000000,
+                               0.5294117647058820,
+                               0.5294117647058820,
+                               0.5294117647058820,
+                               0.5192307692307690,
+                               0.5094339622641510,
+                               0.5094339622641510,
+                               0.5094339622641510,
+                               0.5294117647058820,
+                               0.5384615384615380,
+                               0.5471698113207550,
+                               0.5471698113207550,
+                               0.5471698113207550,
+                               0.5555555555555560,
+                               0.5555555555555560,
+                               0.5555555555555560,
+                               0.5636363636363640,
+                               0.5535714285714290,
+                               0.5535714285714290,
+                               0.5535714285714290,
+                               0.5636363636363640,
+                               0.5714285714285710,
+                               0.5892857142857140,
+                               0.5892857142857140,
+                               0.5892857142857140,
+                               0.5892857142857140,
+                               0.5892857142857140,
+                               0.5892857142857140,
+                               0.5892857142857140,
+                               0.5892857142857140,
+                               0.5925925925925930,
+                               0.5925925925925930,
+                               0.5925925925925930,
+                               0.5925925925925930,
+                               0.5818181818181820,
+                               0.5925925925925930,
+                               0.6808510638297870,
+                               0.6808510638297870,
+                               0.6808510638297870,
+                               0.6808510638297870,
+                               0.6956521739130430,
+                               0.7111111111111110,
+                               0.7111111111111110,
+                               0.7111111111111110,
+                               0.7272727272727270,
+                               0.7272727272727270,
+                               0.7333333333333330,
+                               0.7333333333333330,
+                               0.7333333333333330,
+                               0.7333333333333330,
+                               0.7608695652173910,
+                               0.7608695652173910,
+                               0.7608695652173910,
+                               0.7826086956521740,
+                               0.7826086956521740,
+                               0.7826086956521740,
+                               0.7872340425531920,
+                               0.7872340425531920,
+                               0.7872340425531920,
+                               0.7708333333333330,
+                               0.7400000000000000,
+                               0.7400000000000000,
+                               0.7551020408163260,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7200000000000000,
+                               0.7200000000000000,
+                               0.7200000000000000,
+                               0.7058823529411760,
+                               0.7058823529411760,
+                               0.7115384615384620,
+                               0.7115384615384620,
+                               0.7115384615384620,
+                               0.7169811320754720,
+                               0.7169811320754720,
+                               0.7307692307692310,
+                               0.7307692307692310,
+                               0.7450980392156860,
+                               0.7450980392156860,
+                               0.7450980392156860,
+                               0.7450980392156860,
+                               0.7600000000000000,
+                               0.7600000000000000,
+                               0.7647058823529410,
+                               0.7647058823529410,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7800000000000000,
+                               0.7800000000000000,
+                               0.7692307692307690,
+                               0.7647058823529410,
+                               0.7647058823529410,
+                               0.7800000000000000,
+                               0.8125000000000000,
+                               0.8125000000000000,
+                               0.8200000000000000,
+                               0.8200000000000000,
+                               0.8039215686274510,
+                               0.8039215686274510,
+                               0.8039215686274510,
+                               0.8039215686274510,
+                               0.8235294117647060,
+                               0.8076923076923080,
+                               0.7924528301886790,
+                               0.7924528301886790,
+                               0.7924528301886790,
+                               0.7884615384615380,
+                               0.8076923076923080,
+                               0.8076923076923080,
+                               0.8076923076923080,
+                               0.8113207547169810,
+                               0.8113207547169810,
+                               0.8148148148148150,
+                               0.8181818181818180,
+                               0.8181818181818180,
+                               0.8181818181818180,
+                               0.8148148148148150,
+                               0.8181818181818180,
+                               0.8181818181818180,
+                               0.8181818181818180,
+                               0.8181818181818180,
+                               0.8333333333333330,
+                               0.8518518518518520,
+                               0.8545454545454550,
+                               0.8545454545454550,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8596491228070170,
+                               0.8596491228070170,
+                               0.8524590163934430,
+                               0.8524590163934430,
+                               0.8524590163934430,
+                               0.8500000000000000,
+                               0.8500000000000000,
+                               0.8500000000000000,
+                               0.8500000000000000,
+                               0.8500000000000000,
+                               0.8644067796610170,
+                               0.8644067796610170,
+                               0.8644067796610170,
+                               0.8644067796610170,
+                               0.8644067796610170,
+                               0.8644067796610170,
+                               0.8644067796610170,
+                               0.8500000000000000,
+                               0.8500000000000000,
+                               0.8644067796610170,
+                               0.8644067796610170,
+                               0.8644067796610170,
+                               0.8644067796610170,
+                               0.8793103448275860,
+                               0.8771929824561400,
+                               0.8771929824561400,
+                               0.8771929824561400,
+                               0.8771929824561400,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8771929824561400,
+                               0.8793103448275860,
+                               0.8813559322033900,
+                               0.8813559322033900,
+                               0.8965517241379310,
+                               0.8965517241379310,
+                               0.8965517241379310,
+                               0.8965517241379310,
+                               0.8965517241379310,
+                               0.8965517241379310,
+                               0.8983050847457630,
+                               0.8983050847457630,
+                               0.8983050847457630,
+                               0.8833333333333330,
+                               0.8833333333333330,
+                               0.8833333333333330,
+                               0.8833333333333330,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8709677419354840,
+                               0.8709677419354840,
+                               0.8709677419354840,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8793103448275860,
+                               0.8813559322033900,
+                               0.8813559322033900,
+                               0.8813559322033900,
+                               0.8813559322033900,
+                               0.8813559322033900,
+                               0.8813559322033900,
+                               0.8813559322033900,
+                               0.8813559322033900,
+                               0.8983050847457630,
+                               0.8983050847457630,
+                               0.8983050847457630,
+                               0.9000000000000000,
+                               0.9152542372881350,
+                               0.9152542372881350,
+                               0.9152542372881350,
+                               0.9152542372881350,
+                               0.9152542372881350,
+                               0.9137931034482760,
+                               0.9137931034482760,
+                               0.9137931034482760,
+                               0.9137931034482760,
+                               0.9137931034482760,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9016393442622950,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9062500000000000,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9062500000000000,
+                               0.9062500000000000,
+                               0.9062500000000000,
+                               0.9062500000000000,
+                               0.9062500000000000,
+                               0.9062500000000000,
+                               0.9062500000000000,
+                               0.9062500000000000,
+                               0.9062500000000000,
+                               0.9062500000000000,
+                               0.9062500000000000,
+                               0.9062500000000000,
+                               0.9062500000000000,
+                               0.9062500000000000,
+                               0.9206349206349210,
+                               0.9206349206349210,
+                               0.9206349206349210,
+                               0.9206349206349210,
+                               0.9206349206349210,
+                               0.9354838709677420,
+                               0.9354838709677420,
+                               0.9354838709677420,
+                               0.9508196721311470,
+                               0.9508196721311470,
+                               0.9508196721311470,
+                               0.9508196721311470,
+                               0.9516129032258060,
+                               0.9516129032258060,
+                               0.9523809523809520,
+                               0.9523809523809520,
+                               0.9531250000000000,
+                               0.9531250000000000,
+                               0.9531250000000000,
+                               0.9531250000000000,
+                               0.9531250000000000,
+                               0.9531250000000000,
+                               0.9531250000000000,
+                               0.9531250000000000,
+                               0.9531250000000000,
+                               0.9531250000000000,
+                               0.9531250000000000,
+                               0.9523809523809520,
+                               0.9523809523809520,
+                               0.9523809523809520,
+                               0.9523809523809520,
+                               0.9523809523809520,
+                               0.9523809523809520,
+                               0.9523809523809520,
+                               0.9677419354838710,
+                               0.9677419354838710,
+                               0.9677419354838710,
+                               0.9677419354838710,
+                               0.9677419354838710,
+                               0.9677419354838710,
+                               0.9677419354838710,
+                               0.9677419354838710,
+                               0.9677419354838710,
+                               0.9677419354838710,
+                               0.9677419354838710,
+                               0.9677419354838710,
+                               0.9677419354838710,
+                               0.9677419354838710,
+                               0.9677419354838710,
+                               0.9677419354838710,
+                               0.9677419354838710,
+                               0.9677419354838710,
+                               0.9682539682539680,
+                               0.9682539682539680,
+                               0.9682539682539680,
+                               0.9838709677419350,
+                               0.9838709677419350,
+                               0.9838709677419350,
+                               0.9838709677419350,
+                               0.9838709677419350,
+                               0.9838709677419350,
+                               0.9838709677419350,
+                               0.9838709677419350,
+                               0.9836065573770490,
+                               0.9836065573770490,
+                               0.9836065573770490,
+                               0.9836065573770490,
+                               0.9838709677419350,
+                               0.9838709677419350,
+                               0.9838709677419350,
+                               0.9838709677419350,
+                               0.9838709677419350,
+                               0.9838709677419350,
+                               0.9838709677419350,
+                               0.9838709677419350,
+                               0.9838709677419350,
+                               0.9838709677419350,
+                               0.9838709677419350,
+                               0.9838709677419350,
+                               0.9838709677419350,
+                               0.9838709677419350,
+                               0.9841269841269840,
+                               0.9841269841269840,
+                               0.9841269841269840,
+                               0.9841269841269840,
+                               0.9841269841269840,
+                               0.9841269841269840,
+                               0.9843750000000000,
+                               0.9843750000000000,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9848484848484850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9846153846153850,
+                               0.9843750000000000,
+                               0.9843750000000000,
+                               0.9843750000000000,
+                               0.9843750000000000,
+                               0.9843750000000000,
+                               0.9843750000000000,
+                               0.9843750000000000,
+                               0.9843750000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                                       1.0000000000000000,
+                               0.9661016949152540,
+                               0.9642857142857140,
+                               0.9642857142857140,
+                               0.9642857142857140,
+                               0.9642857142857140,
+                               0.9642857142857140,
+                               0.9642857142857140,
+                               0.9473684210526320,
+                               0.9473684210526320,
+                               0.9473684210526320,
+                               0.9473684210526320,
+                               0.9473684210526320,
+                               0.9473684210526320,
+                               0.9473684210526320,
+                               0.9473684210526320,
+                               0.9473684210526320,
+                               0.9473684210526320,
+                               0.9298245614035090,
+                               0.9298245614035090,
+                               0.9298245614035090,
+                               0.9298245614035090,
+                               0.9298245614035090,
+                               0.9298245614035090,
+                               0.9298245614035090,
+                               0.9137931034482760,
+                               0.9122807017543860,
+                               0.9122807017543860,
+                               0.9122807017543860,
+                               0.9122807017543860,
+                               0.9107142857142860,
+                               0.9272727272727270,
+                               0.9107142857142860,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.8947368421052630,
+                               0.9107142857142860,
+                               0.9107142857142860,
+                               0.9107142857142860,
+                               0.9107142857142860,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8727272727272730,
+                               0.8888888888888890,
+                               0.8679245283018870,
+                               0.8679245283018870,
+                               0.8679245283018870,
+                               0.8490566037735850,
+                               0.8490566037735850,
+                               0.8333333333333330,
+                               0.8333333333333330,
+                               0.8333333333333330,
+                               0.8333333333333330,
+                               0.8301886792452830,
+                               0.8301886792452830,
+                               0.8301886792452830,
+                               0.8301886792452830,
+                               0.8301886792452830,
+                               0.8301886792452830,
+                               0.8000000000000000,
+                               0.7962962962962960,
+                               0.7962962962962960,
+                               0.7962962962962960,
+                               0.7962962962962960,
+                               0.7962962962962960,
+                               0.7818181818181820,
+                               0.7777777777777780,
+                               0.7454545454545450,
+                               0.7454545454545450,
+                               0.7407407407407410,
+                               0.7407407407407410,
+                               0.7358490566037730,
+                               0.7358490566037730,
+                               0.7358490566037730,
+                               0.7307692307692310,
+                               0.7254901960784310,
+                               0.7254901960784310,
+                               0.7254901960784310,
+                               0.7254901960784310,
+                               0.7058823529411760,
+                               0.7000000000000000,
+                               0.7000000000000000,
+                               0.7000000000000000,
+                               0.6800000000000000,
+                               0.6800000000000000,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6600000000000000,
+                               0.6600000000000000,
+                               0.6600000000000000,
+                               0.6470588235294120,
+                               0.6346153846153850,
+                               0.6037735849056600,
+                               0.6037735849056600,
+                               0.5961538461538460,
+                               0.5769230769230770,
+                               0.5576923076923080,
+                               0.5576923076923080,
+                               0.5576923076923080,
+                               0.5471698113207550,
+                               0.5471698113207550,
+                               0.5471698113207550,
+                               0.5471698113207550,
+                               0.5471698113207550,
+                               0.5471698113207550,
+                               0.5294117647058820,
+                               0.5294117647058820,
+                               0.5294117647058820,
+                               0.5294117647058820,
+                               0.5200000000000000,
+                               0.5098039215686270,
+                               0.5098039215686270,
+                               0.5098039215686270,
+                               0.5098039215686270,
+                               0.5098039215686270,
+                               0.5098039215686270,
+                               0.5098039215686270,
+                               0.5200000000000000,
+                               0.5200000000000000,
+                               0.5200000000000000,
+                               0.5200000000000000,
+                               0.5200000000000000,
+                               0.5200000000000000,
+                               0.5098039215686270,
+                               0.5098039215686270,
+                               0.5098039215686270,
+                               0.5098039215686270,
+                               0.5098039215686270,
+                               0.5000000000000000,
+                               0.4814814814814810,
+                               0.4814814814814810,
+                               0.4814814814814810,
+                               0.4814814814814810,
+                               0.4509803921568630,
+                               0.4600000000000000,
+                               0.4285714285714290,
+                               0.4285714285714290,
+                               0.4285714285714290,
+                               0.4285714285714290,
+                               0.3958333333333330,
+                               0.3958333333333330,
+                               0.3617021276595740,
+                               0.3617021276595740,
+                               0.3617021276595740,
+                               0.3617021276595740,
+                               0.3617021276595740,
+                               0.3541666666666670,
+                               0.3333333333333330,
+                               0.3265306122448980,
+                               0.3265306122448980,
+                               0.3061224489795920,
+                               0.3000000000000000,
+                               0.2941176470588230,
+                               0.2941176470588230,
+                               0.2800000000000000,
+                               0.2800000000000000,
+                               0.2800000000000000,
+                               0.2340425531914890,
+                               0.2340425531914890,
+                               0.2391304347826090,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2045454545454550,
+                               0.1956521739130430,
+                               0.1914893617021280,
+                               0.1875000000000000,
+                               0.1632653061224490,
+                               0.1632653061224490,
+                               0.1600000000000000,
+                               0.1568627450980390,
+                               0.1568627450980390,
+                               0.1568627450980390,
+                               0.1568627450980390,
+                               0.1568627450980390,
+                               0.1481481481481480,
+                               0.1481481481481480,
+                               0.1481481481481480,
+                               0.1481481481481480,
+                               0.1403508771929820,
+                               0.1403508771929820,
+                               0.1379310344827590,
+                               0.1379310344827590,
+                               0.1379310344827590,
+                               0.1379310344827590,
+                               0.1166666666666670,
+                               0.1166666666666670,
+                               0.1166666666666670,
+                               0.1166666666666670,
+                               0.1166666666666670,
+                               0.1166666666666670,
+                               0.1147540983606560,
+                               0.1147540983606560,
+                               0.1129032258064520,
+                               0.1129032258064520,
+                               0.1129032258064520,
+                               0.1129032258064520,
+                               0.1129032258064520,
+                               0.1129032258064520,
+                               0.1129032258064520,
+                               0.1129032258064520,
+                               0.1129032258064520,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.1093750000000000,
+                               0.0952380952380952,
+                               0.0952380952380952,
+                               0.0952380952380952,
+                               0.0937500000000000,
+                               0.0937500000000000,
+                               0.0937500000000000,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0781250000000000,
+                               0.0781250000000000,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0666666666666667,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0500000000000000,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0483870967741936,
+                               0.0476190476190476,
+                               0.0468750000000000,
+                               0.0468750000000000,
+                               0.0468750000000000,
+                               0.0468750000000000,
+                               0.0468750000000000,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0468750000000000,
+                               0.0476190476190476,
+                               0.0468750000000000,
+                               0.0468750000000000,
+                               0.0468750000000000,
+                               0.0468750000000000,
+                               0.0468750000000000,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0476190476190476,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0333333333333333,
+                               0.0344827586206897,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0357142857142857,
+                               0.0363636363636364,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0363636363636364,
+                               0.0370370370370370,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0333333333333333,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0350877192982456,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0350877192982456,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0344827586206897,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0327868852459016,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0327868852459016,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0338983050847458,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0303030303030303,
+                               0.0303030303030303,
+                               0.0303030303030303,
+                               0.0303030303030303,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0322580645161290,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0322580645161290,
+                               0.0317460317460317,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0937500000000000,
+                               0.0952380952380952,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.1000000000000000,
+                               0.1147540983606560,
+                               0.1147540983606560,
+                               0.1290322580645160,
+                               0.1290322580645160,
+                               0.1290322580645160,
+                               0.1290322580645160,
+                               0.1311475409836070,
+                               0.1333333333333330,
+                               0.1355932203389830,
+                               0.1355932203389830,
+                               0.1333333333333330,
+                               0.1333333333333330,
+                               0.1290322580645160,
+                               0.1269841269841270,
+                               0.1406250000000000,
+                               0.1538461538461540,
+                               0.1538461538461540,
+                               0.1538461538461540,
+                               0.1538461538461540,
+                               0.1562500000000000,
+                               0.1538461538461540,
+                               0.1538461538461540,
+                               0.1538461538461540,
+                               0.1538461538461540,
+                               0.1562500000000000,
+                               0.1562500000000000,
+                               0.1587301587301590,
+                               0.1587301587301590,
+                               0.1587301587301590,
+                               0.1587301587301590,
+                               0.1587301587301590,
+                               0.1562500000000000,
+                               0.1562500000000000,
+                               0.1562500000000000,
+                               0.1562500000000000,
+                               0.1562500000000000,
+                               0.1718750000000000,
+                               0.1718750000000000,
+                               0.1718750000000000,
+                               0.1718750000000000,
+                               0.1718750000000000,
+                               0.1718750000000000,
+                               0.1718750000000000,
+                               0.1846153846153850,
+                               0.1875000000000000,
+                               0.1875000000000000,
+                               0.1875000000000000,
+                               0.1846153846153850,
+                               0.1846153846153850,
+                               0.1846153846153850,
+                               0.1904761904761900,
+                               0.1774193548387100,
+                               0.1803278688524590,
+                               0.1803278688524590,
+                               0.1803278688524590,
+                               0.1864406779661020,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1929824561403510,
+                               0.2000000000000000,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.2000000000000000,
+                               0.2037037037037040,
+                               0.2037037037037040,
+                               0.2037037037037040,
+                               0.2115384615384620,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2181818181818180,
+                               0.2181818181818180,
+                               0.2142857142857140,
+                               0.2142857142857140,
+                               0.2142857142857140,
+                               0.2241379310344830,
+                               0.2241379310344830,
+                               0.2280701754385960,
+                               0.2321428571428570,
+                               0.2363636363636360,
+                               0.2321428571428570,
+                               0.2321428571428570,
+                               0.2321428571428570,
+                               0.2321428571428570,
+                               0.2407407407407410,
+                               0.2592592592592590,
+                               0.2745098039215690,
+                               0.2745098039215690,
+                               0.2884615384615380,
+                               0.3000000000000000,
+                               0.3265306122448980,
+                               0.3265306122448980,
+                               0.3400000000000000,
+                               0.3400000000000000,
+                               0.3400000000000000,
+                               0.3400000000000000,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3469387755102040,
+                               0.3469387755102040,
+                               0.3469387755102040,
+                               0.3541666666666670,
+                               0.3541666666666670,
+                               0.3400000000000000,
+                               0.3469387755102040,
+                               0.3469387755102040,
+                               0.3469387755102040,
+                               0.3469387755102040,
+                               0.3653846153846150,
+                               0.3888888888888890,
+                               0.4107142857142860,
+                               0.4107142857142860,
+                               0.4107142857142860,
+                               0.4181818181818180,
+                               0.4181818181818180,
+                               0.4181818181818180,
+                               0.4385964912280700,
+                               0.4285714285714290,
+                               0.4285714285714290,
+                               0.4285714285714290,
+                               0.4285714285714290,
+                               0.4285714285714290,
+                               0.4464285714285710,
+                               0.4545454545454550,
+                               0.4444444444444440,
+                               0.4444444444444440,
+                               0.4444444444444440,
+                               0.4705882352941180,
+                               0.5000000000000000,
+                               0.5098039215686270,
+                               0.5098039215686270,
+                               0.5192307692307690,
+                               0.5098039215686270,
+                               0.5098039215686270,
+                               0.5098039215686270,
+                               0.5000000000000000,
+                               0.5000000000000000,
+                               0.4905660377358490,
+                               0.4814814814814810,
+                               0.4814814814814810,
+                               0.4814814814814810,
+                               0.4727272727272730,
+                               0.4727272727272730,
+                               0.4727272727272730,
+                               0.4727272727272730,
+                               0.4727272727272730,
+                               0.4807692307692310,
+                               0.4807692307692310,
+                               0.4807692307692310,
+                               0.4905660377358490,
+                               0.5000000000000000,
+                               0.5000000000000000,
+                               0.4909090909090910,
+                               0.4909090909090910,
+                               0.5192307692307690,
+                               0.5370370370370370,
+                               0.5370370370370370,
+                               0.5370370370370370,
+                               0.5576923076923080,
+                               0.5576923076923080,
+                               0.5918367346938780,
+                               0.5918367346938780,
+                               0.5918367346938780,
+                               0.5918367346938780,
+                               0.5918367346938780,
+                               0.6170212765957450,
+                               0.6304347826086960,
+                               0.6304347826086960,
+                               0.6666666666666670,
+                               0.6739130434782610,
+                               0.6808510638297870,
+                               0.6458333333333330,
+                               0.6595744680851060,
+                               0.6595744680851060,
+                               0.6595744680851060,
+                               0.6595744680851060,
+                               0.6458333333333330,
+                               0.6458333333333330,
+                               0.6530612244897960,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6875000000000000,
+                               0.6938775510204080,
+                               0.7083333333333330,
+                               0.7234042553191490,
+                               0.7083333333333330,
+                               0.7083333333333330,
+                               0.7083333333333330,
+                               0.7083333333333330,
+                               0.7083333333333330,
+                               0.6938775510204080,
+                               0.6938775510204080,
+                               0.7000000000000000,
+                               0.7000000000000000,
+                               0.7058823529411760,
+                               0.7058823529411760,
+                               0.6923076923076920,
+                               0.6923076923076920,
+                               0.6981132075471700,
+                               0.7169811320754720,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7090909090909090,
+                               0.7090909090909090,
+                               0.7090909090909090,
+                               0.7090909090909090,
+                               0.7090909090909090,
+                               0.7090909090909090,
+                               0.7222222222222220,
+                               0.7222222222222220,
+                               0.7222222222222220,
+                               0.7358490566037730,
+                               0.7407407407407410,
+                               0.7547169811320760,
+                               0.7142857142857140,
+                               0.7142857142857140,
+                               0.7142857142857140,
+                               0.7272727272727270,
+                               0.7454545454545450,
+                               0.7321428571428570,
+                               0.7321428571428570,
+                               0.7321428571428570,
+                               0.7321428571428570,
+                               0.7368421052631580,
+                               0.7368421052631580,
+                               0.7241379310344830,
+                               0.7241379310344830,
+                               0.7241379310344830,
+                               0.7241379310344830,
+                               0.7288135593220340,
+                               0.7377049180327870,
+                               0.7377049180327870,
+                               0.7377049180327870,
+                               0.7377049180327870,
+                               0.7377049180327870,
+                               0.7377049180327870,
+                               0.7377049180327870,
+                               0.7377049180327870,
+                               0.7377049180327870,
+                               0.7333333333333330,
+                               0.7333333333333330,
+                               0.7333333333333330,
+                               0.7213114754098360,
+                               0.7258064516129030,
+                               0.7377049180327870,
+                               0.7377049180327870,
+                               0.7377049180327870,
+                               0.7419354838709680,
+                               0.7419354838709680,
+                               0.7419354838709680,
+                               0.7666666666666670,
+                               0.7666666666666670,
+                               0.7666666666666670,
+                               0.7666666666666670,
+                               0.7666666666666670,
+                               0.7796610169491530,
+                               0.8214285714285710,
+                               0.8070175438596490,
+                               0.8070175438596490,
+                               0.8070175438596490,
+                               0.8070175438596490,
+                               0.8070175438596490,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8070175438596490,
+                               0.8070175438596490,
+                               0.8070175438596490,
+                               0.8070175438596490,
+                               0.8035714285714290,
+                               0.8035714285714290,
+                               0.8035714285714290,
+                               0.7758620689655170,
+                               0.7758620689655170,
+                               0.7796610169491530,
+                               0.7833333333333330,
+                               0.7868852459016390,
+                               0.8000000000000000,
+                               0.7868852459016390,
+                               0.7868852459016390,
+                               0.7868852459016390,
+                               0.7903225806451610,
+                               0.7903225806451610,
+                               0.7903225806451610,
+                               0.7903225806451610,
+                               0.8032786885245900,
+                               0.8032786885245900,
+                               0.7903225806451610,
+                               0.7903225806451610,
+                               0.7936507936507940,
+                               0.7846153846153850,
+                               0.7846153846153850,
+                               0.7846153846153850,
+                               0.7846153846153850,
+                               0.7968750000000000,
+                               0.7968750000000000,
+                               0.7968750000000000,
+                               0.7846153846153850,
+                               0.7846153846153850,
+                               0.7846153846153850,
+                               0.7846153846153850,
+                               0.8000000000000000,
+                               0.8000000000000000,
+                               0.8000000000000000,
+                               0.8000000000000000,
+                               0.8125000000000000,
+                               0.8225806451612900,
+                               0.8225806451612900,
+                               0.8644067796610170,
+                               0.8644067796610170,
+                               0.8644067796610170,
+                               0.8644067796610170,
+                               0.8793103448275860,
+                               0.8793103448275860,
+                               0.8833333333333330,
+                               0.8833333333333330,
+                               0.8833333333333330,
+                               0.8833333333333330,
+                               0.8833333333333330,
+                               0.8833333333333330,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8906250000000000,
+                               0.8906250000000000,
+                               0.8769230769230770,
+                               0.8769230769230770,
+                               0.8769230769230770,
+                               0.8769230769230770,
+                               0.8769230769230770,
+                               0.8769230769230770,
+                               0.8769230769230770,
+                               0.8769230769230770,
+                               0.8769230769230770,
+                               0.8769230769230770,
+                               0.8730158730158730,
+                               0.8888888888888890,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9193548387096770,
+                               0.9193548387096770,
+                               0.9193548387096770,
+                               0.9193548387096770,
+                               0.9206349206349210,
+                               0.9206349206349210,
+                               0.9206349206349210,
+                               0.9206349206349210,
+                               0.9206349206349210,
+                               0.9206349206349210,
+                               0.9206349206349210,
+                               0.9354838709677420,
+                               0.9354838709677420,
+                               0.9354838709677420,
+                               0.9354838709677420,
+                               0.9365079365079360,
+                               0.9365079365079360,
+                               0.9365079365079360,
+                               0.9365079365079360,
+                               0.9365079365079360,
+                               0.9354838709677420,
+                               0.9354838709677420,
+                               0.9354838709677420,
+                               0.9354838709677420,
+                               0.9365079365079360,
+                               0.9365079365079360,
+                               0.9365079365079360,
+                               0.9365079365079360,
+                               0.9365079365079360,
+                               0.9365079365079360,
+                               0.9218750000000000,
+                               0.9218750000000000,
+                               0.9218750000000000,
+                               0.9218750000000000,
+                               0.9230769230769230,
+                               0.9230769230769230,
+                               0.9230769230769230,
+                               0.9230769230769230,
+                               0.9230769230769230,
+                               0.9230769230769230,
+                               0.9242424242424240,
+                               0.9242424242424240,
+                               0.9242424242424240,
+                               0.9242424242424240,
+                               0.9242424242424240,
+                               0.9242424242424240,
+                               0.9242424242424240,
+                               0.9242424242424240,
+                               0.9242424242424240,
+                               0.9242424242424240,
+                               0.9253731343283580,
+                               0.9264705882352940,
+                               0.9264705882352940,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9285714285714290,
+                               0.9285714285714290,
+                               0.9285714285714290,
+                               0.9285714285714290,
+                               0.9285714285714290,
+                               0.9285714285714290,
+                               0.9285714285714290,
+                               0.9285714285714290,
+                               0.9420289855072460,
+                               0.9420289855072460,
+                               0.9420289855072460,
+                               0.9420289855072460,
+                               0.9420289855072460,
+                               0.9420289855072460,
+                               0.9420289855072460,
+                               0.9420289855072460,
+                               0.9420289855072460,
+                               0.9420289855072460,
+                               0.9420289855072460,
+                               0.9420289855072460,
+                               0.9420289855072460,
+                               0.9420289855072460,
+                               0.9420289855072460,
+                               0.9420289855072460,
+                               0.9420289855072460,
+                               0.9420289855072460,
+                               0.9428571428571430,
+                               0.9428571428571430,
+                               0.9428571428571430,
+                               0.9428571428571430,
+                               0.9428571428571430,
+                               0.9428571428571430,
+                               0.9428571428571430,
+                               0.9428571428571430,
+                               0.9428571428571430,
+                               0.9428571428571430,
+                               0.9428571428571430,
+                               0.9428571428571430,
+                               0.9428571428571430,
+                               0.9428571428571430,
+                               0.9428571428571430,
+                               0.9428571428571430,
+                               0.9428571428571430,
+                               0.9428571428571430,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9565217391304350,
+                               0.9705882352941180,
+                               0.9705882352941180,
+                               0.9705882352941180,
+                               0.9705882352941180,
+                               0.9705882352941180,
+                               0.9705882352941180,
+                               0.9705882352941180,
+                               0.9705882352941180,
+                               0.9705882352941180,
+                               0.9705882352941180,
+                               0.9705882352941180,
+                               0.9705882352941180,
+                               0.9705882352941180,
+                               0.9701492537313430,
+                               0.9701492537313430,
+                               0.9701492537313430,
+                               0.9701492537313430,
+                               0.9701492537313430,
+                               0.9701492537313430,
+                               0.9701492537313430,
+                               0.9701492537313430,
+                               0.9701492537313430,
+                               0.9701492537313430,
+                               0.9701492537313430,
+                               0.9701492537313430,
+                               0.9701492537313430,
+                               0.9701492537313430,
+                               0.9701492537313430,
+                               0.9701492537313430,
+                               0.9701492537313430,
+                               0.9701492537313430,
+                               0.9701492537313430,
+                               0.9701492537313430,
+                               0.9701492537313430,
+                               0.9701492537313430,
+                               0.9701492537313430,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9687500000000000,
+                               0.9687500000000000,
+                               0.9687500000000000,
+                               0.9687500000000000,
+                               0.9687500000000000,
+                               0.9687500000000000,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9696969696969700,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9692307692307690,
+                               0.9687500000000000,
+                               0.9687500000000000,
+                               0.9687500000000000,
+                               0.9687500000000000,
+                               0.9687500000000000,
+                               0.9692307692307690,
+                               0.9687500000000000,
+                               0.9687500000000000,
+                               0.9687500000000000,
+                               0.9687500000000000,
+                               0.9687500000000000,
+                               0.9538461538461540,
+                               0.9538461538461540,
+                               0.9538461538461540,
+                               0.9538461538461540,
+                               0.9538461538461540,
+                               0.9538461538461540,
+                               0.9538461538461540,
+                               0.9538461538461540,
+                               0.9538461538461540,
+                               0.9538461538461540,
+                               0.9538461538461540,
+                               0.9538461538461540,
+                               0.9538461538461540,
+                               0.9365079365079360,
+                               0.9365079365079360,
+                               0.9365079365079360,
+                               0.9365079365079360,
+                               0.9365079365079360,
+                               0.9365079365079360,
+                               0.9218750000000000,
+                               0.9218750000000000,
+                               0.9218750000000000,
+                               0.9218750000000000,
+                               0.9218750000000000,
+                               0.9218750000000000,
+                               0.9218750000000000,
+                               0.9206349206349210,
+                               0.9206349206349210,
+                               0.9206349206349210,
+                               0.9206349206349210,
+                               0.9193548387096770,
+                               0.9193548387096770,
+                               0.9180327868852460,
+                               0.9180327868852460,
+                               0.9180327868852460,
+                               0.9180327868852460,
+                               0.9180327868852460,
+                               0.9333333333333330,
+                               0.9322033898305080,
+                               0.9322033898305080,
+                               0.9322033898305080,
+                               0.9322033898305080,
+                               0.9166666666666670,
+                               0.9322033898305080,
+                               0.8870967741935480,
+                               0.8870967741935480,
+                               0.8870967741935480,
+                               0.8870967741935480,
+                               0.8870967741935480,
+                               0.8870967741935480,
+                               0.8870967741935480,
+                               0.8870967741935480,
+                               0.8852459016393440,
+                               0.8833333333333330,
+                               0.8833333333333330,
+                               0.8833333333333330,
+                               0.8813559322033900,
+                               0.8813559322033900,
+                               0.8813559322033900,
+                               0.8813559322033900,
+                               0.8793103448275860,
+                               0.8793103448275860,
+                               0.8793103448275860,
+                               0.8793103448275860,
+                               0.8793103448275860,
+                               0.8644067796610170,
+                               0.8666666666666670,
+                               0.8524590163934430,
+                               0.8500000000000000,
+                               0.8500000000000000,
+                               0.8500000000000000,
+                               0.8500000000000000,
+                               0.8474576271186440,
+                               0.8196721311475410,
+                               0.8196721311475410,
+                               0.8196721311475410,
+                               0.8196721311475410,
+                               0.8166666666666670,
+                               0.8103448275862070,
+                               0.8103448275862070,
+                               0.8103448275862070,
+                               0.8035714285714290,
+                               0.8035714285714290,
+                               0.8035714285714290,
+                               0.8000000000000000,
+                               0.7857142857142860,
+                               0.7857142857142860,
+                               0.7857142857142860,
+                               0.7857142857142860,
+                               0.7636363636363640,
+                               0.7592592592592590,
+                               0.7547169811320760,
+                               0.7547169811320760,
+                               0.7547169811320760,
+                               0.7500000000000000,
+                               0.7450980392156860,
+                               0.7346938775510200,
+                               0.7200000000000000,
+                               0.7200000000000000,
+                               0.7058823529411760,
+                               0.7000000000000000,
+                               0.6862745098039220,
+                               0.6730769230769230,
+                               0.6730769230769230,
+                               0.6730769230769230,
+                               0.6730769230769230,
+                               0.6730769230769230,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6538461538461540,
+                               0.6470588235294120,
+                               0.6346153846153850,
+                               0.6346153846153850,
+                               0.6346153846153850,
+                               0.6346153846153850,
+                               0.6346153846153850,
+                               0.6346153846153850,
+                               0.6346153846153850,
+                               0.6226415094339620,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.5818181818181820,
+                               0.5818181818181820,
+                               0.5818181818181820,
+                               0.5714285714285710,
+                               0.5714285714285710,
+                               0.5614035087719300,
+                               0.5517241379310340,
+                               0.5272727272727270,
+                               0.5272727272727270,
+                               0.5272727272727270,
+                               0.5272727272727270,
+                               0.5178571428571430,
+                               0.5178571428571430,
+                               0.4909090909090910,
+                               0.4821428571428570,
+                               0.4821428571428570,
+                               0.4736842105263160,
+                               0.4482758620689660,
+                               0.4482758620689660,
+                               0.4385964912280700,
+                               0.4385964912280700,
+                               0.4385964912280700,
+                               0.4385964912280700,
+                               0.4385964912280700,
+                               0.4385964912280700,
+                               0.3962264150943400,
+                               0.3962264150943400,
+                               0.3962264150943400,
+                               0.3962264150943400,
+                               0.3962264150943400,
+                               0.3888888888888890,
+                               0.3818181818181820,
+                               0.3818181818181820,
+                               0.3703703703703700,
+                               0.3636363636363640,
+                               0.3636363636363640,
+                               0.3636363636363640,
+                               0.3636363636363640,
+                               0.3636363636363640,
+                               0.3518518518518520,
+                               0.3137254901960780,
+                               0.2941176470588230,
+                               0.2800000000000000,
+                               0.2653061224489800,
+                               0.2653061224489800,
+                               0.2500000000000000,
+                               0.2500000000000000,
+                               0.2500000000000000,
+                               0.2500000000000000,
+                               0.2400000000000000,
+                               0.2400000000000000,
+                               0.2200000000000000,
+                               0.2156862745098040,
+                               0.2156862745098040,
+                               0.2156862745098040,
+                               0.2115384615384620,
+                               0.2115384615384620,
+                               0.2075471698113210,
+                               0.2075471698113210,
+                               0.2075471698113210,
+                               0.2075471698113210,
+                               0.1886792452830190,
+                               0.1886792452830190,
+                               0.1886792452830190,
+                               0.1886792452830190,
+                               0.1851851851851850,
+                               0.1851851851851850,
+                               0.1754385964912280,
+                               0.1754385964912280,
+                               0.1754385964912280,
+                               0.1724137931034480,
+                               0.1724137931034480,
+                               0.1724137931034480,
+                               0.1694915254237290,
+                               0.1694915254237290,
+                               0.1639344262295080,
+                               0.1639344262295080,
+                               0.1639344262295080,
+                               0.1612903225806450,
+                               0.1406250000000000,
+                               0.1406250000000000,
+                               0.1384615384615380,
+                               0.1384615384615380,
+                               0.1406250000000000,
+                               0.1406250000000000,
+                               0.1384615384615380,
+                               0.1384615384615380,
+                               0.1363636363636360,
+                               0.1363636363636360,
+                               0.1363636363636360,
+                               0.1343283582089550,
+                               0.1343283582089550,
+                               0.1343283582089550,
+                               0.1323529411764710,
+                               0.1304347826086960,
+                               0.1304347826086960,
+                               0.1323529411764710,
+                               0.1323529411764710,
+                               0.1323529411764710,
+                               0.1323529411764710,
+                               0.1323529411764710,
+                               0.1285714285714290,
+                               0.1267605633802820,
+                               0.1142857142857140,
+                               0.1142857142857140,
+                               0.1159420289855070,
+                               0.1159420289855070,
+                               0.1159420289855070,
+                               0.1029411764705880,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0869565217391304,
+                               0.0869565217391304,
+                               0.0869565217391304,
+                               0.0869565217391304,
+                               0.0869565217391304,
+                               0.0869565217391304,
+                               0.0869565217391304,
+                               0.0869565217391304,
+                               0.0869565217391304,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0869565217391304,
+                               0.0857142857142857,
+                               0.0857142857142857,
+                               0.0857142857142857,
+                               0.0857142857142857,
+                               0.0857142857142857,
+                               0.0857142857142857,
+                               0.0857142857142857,
+                               0.0857142857142857,
+                               0.0857142857142857,
+                               0.0857142857142857,
+                               0.0857142857142857,
+                               0.0857142857142857,
+                               0.0857142857142857,
+                               0.0857142857142857,
+                               0.0857142857142857,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0735294117647059,
+                               0.0724637681159420,
+                               0.0735294117647059,
+                               0.0746268656716418,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0781250000000000,
+                               0.0769230769230769,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0769230769230769,
+                               0.0781250000000000,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0625000000000000,
+                               0.0625000000000000,
+                               0.0615384615384615,
+                               0.0615384615384615,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0645161290322581,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0625000000000000,
+                               0.0625000000000000,
+                               0.0625000000000000,
+                               0.0625000000000000,
+                               0.0625000000000000,
+                               0.0625000000000000,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0666666666666667,
+                               0.0645161290322581,
+                               0.0625000000000000,
+                               0.0625000000000000,
+                               0.0625000000000000,
+                               0.0625000000000000,
+                               0.0597014925373134,
+                               0.0597014925373134,
+                               0.0597014925373134,
+                               0.0597014925373134,
+                               0.0597014925373134,
+                               0.0606060606060606,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0571428571428571,
+                               0.0571428571428571,
+                               0.0571428571428571,
+                               0.0571428571428571,
+                               0.0571428571428571,
+                               0.0571428571428571,
+                               0.0571428571428571,
+                               0.0571428571428571,
+                               0.0563380281690141,
+                               0.0563380281690141,
+                               0.0571428571428571,
+                               0.0579710144927536,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0597014925373134,
+                               0.0606060606060606,
+                               0.0597014925373134,
+                               0.0588235294117647,
+                               0.0579710144927536,
+                               0.0571428571428571,
+                               0.0571428571428571,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0597014925373134,
+                               0.0597014925373134,
+                               0.0597014925373134,
+                               0.0735294117647059,
+                               0.0735294117647059,
+                               0.0746268656716418,
+                               0.0735294117647059,
+                               0.0735294117647059,
+                               0.0735294117647059,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0704225352112676,
+                               0.0694444444444444,
+                               0.0694444444444444,
+                               0.0694444444444444,
+                               0.0684931506849315,
+                               0.0684931506849315,
+                               0.0684931506849315,
+                               0.0684931506849315,
+                               0.0684931506849315,
+                               0.0684931506849315,
+                               0.0684931506849315,
+                               0.0684931506849315,
+                               0.0684931506849315,
+                               0.0684931506849315,
+                               0.0684931506849315,
+                               0.0684931506849315,
+                               0.0694444444444444,
+                               0.0694444444444444,
+                               0.0694444444444444,
+                               0.0694444444444444,
+                               0.0694444444444444,
+                               0.0694444444444444,
+                               0.0704225352112676,
+                               0.0704225352112676,
+                               0.0704225352112676,
+                               0.0704225352112676,
+                               0.0704225352112676,
+                               0.0704225352112676,
+                               0.0704225352112676,
+                               0.0694444444444444,
+                               0.0694444444444444,
+                               0.0563380281690141,
+                               0.0563380281690141,
+                               0.0563380281690141,
+                               0.0563380281690141,
+                               0.0563380281690141,
+                               0.0563380281690141,
+                               0.0563380281690141,
+                               0.0563380281690141,
+                               0.0563380281690141,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0563380281690141,
+                               0.0571428571428571,
+                               0.0571428571428571,
+                               0.0571428571428571,
+                               0.0571428571428571,
+                               0.0571428571428571,
+                               0.0571428571428571,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0422535211267606,
+                               0.0428571428571429,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0422535211267606,
+                               0.0422535211267606,
+                               0.0422535211267606,
+                               0.0422535211267606,
+                               0.0422535211267606,
+                               0.0422535211267606,
+                               0.0422535211267606,
+                               0.0428571428571429,
+                               0.0434782608695652,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0447761194029851,
+                               0.0447761194029851,
+                               0.0447761194029851,
+                               0.0447761194029851,
+                               0.0447761194029851,
+                               0.0447761194029851,
+                               0.0447761194029851,
+                               0.0447761194029851,
+                               0.0447761194029851,
+                               0.0597014925373134,
+                               0.0597014925373134,
+                               0.0597014925373134,
+                               0.0597014925373134,
+                               0.0597014925373134,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0735294117647059,
+                               0.0735294117647059,
+                               0.0724637681159420,
+                               0.0735294117647059,
+                               0.0724637681159420,
+                               0.0857142857142857,
+                               0.0857142857142857,
+                               0.0985915492957746,
+                               0.0985915492957746,
+                               0.1000000000000000,
+                               0.1014492753623190,
+                               0.1029411764705880,
+                               0.1029411764705880,
+                               0.1029411764705880,
+                               0.1029411764705880,
+                               0.1029411764705880,
+                               0.1029411764705880,
+                               0.1029411764705880,
+                               0.1044776119402990,
+                               0.1044776119402990,
+                               0.1044776119402990,
+                               0.1044776119402990,
+                               0.1194029850746270,
+                               0.1194029850746270,
+                               0.1194029850746270,
+                               0.1194029850746270,
+                               0.1194029850746270,
+                               0.1194029850746270,
+                               0.1323529411764710,
+                               0.1323529411764710,
+                               0.1323529411764710,
+                               0.1323529411764710,
+                               0.1323529411764710,
+                               0.1323529411764710,
+                               0.1323529411764710,
+                               0.1470588235294120,
+                               0.1449275362318840,
+                               0.1449275362318840,
+                               0.1449275362318840,
+                               0.1470588235294120,
+                               0.1470588235294120,
+                               0.1449275362318840,
+                               0.1323529411764710,
+                               0.1323529411764710,
+                               0.1323529411764710,
+                               0.1323529411764710,
+                               0.1343283582089550,
+                               0.1212121212121210,
+                               0.1194029850746270,
+                               0.1194029850746270,
+                               0.1212121212121210,
+                               0.1194029850746270,
+                               0.1194029850746270,
+                               0.1343283582089550,
+                               0.1343283582089550,
+                               0.1343283582089550,
+                               0.1343283582089550,
+                               0.1343283582089550,
+                               0.1470588235294120,
+                               0.1492537313432840,
+                               0.1515151515151520,
+                               0.1515151515151520,
+                               0.1515151515151520,
+                               0.1515151515151520,
+                               0.1515151515151520,
+                               0.1538461538461540,
+                               0.1538461538461540,
+                               0.1666666666666670,
+                               0.1666666666666670,
+                               0.1791044776119400,
+                               0.1791044776119400,
+                               0.1818181818181820,
+                               0.1875000000000000,
+                               0.1746031746031750,
+                               0.1746031746031750,
+                               0.1746031746031750,
+                               0.1746031746031750,
+                               0.1746031746031750,
+                               0.1774193548387100,
+                               0.1639344262295080,
+                               0.1639344262295080,
+                               0.1639344262295080,
+                               0.1639344262295080,
+                               0.1666666666666670,
+                               0.1803278688524590,
+                               0.1803278688524590,
+                               0.1803278688524590,
+                               0.1833333333333330,
+                               0.1833333333333330,
+                               0.2131147540983610,
+                               0.2166666666666670,
+                               0.2166666666666670,
+                               0.2131147540983610,
+                               0.2258064516129030,
+                               0.2258064516129030,
+                               0.2258064516129030,
+                               0.2258064516129030,
+                               0.2258064516129030,
+                               0.2295081967213110,
+                               0.2295081967213110,
+                               0.2333333333333330,
+                               0.2333333333333330,
+                               0.2333333333333330,
+                               0.2333333333333330,
+                               0.2333333333333330,
+                               0.2333333333333330,
+                               0.2333333333333330,
+                               0.2333333333333330,
+                               0.2333333333333330,
+                               0.2333333333333330,
+                               0.2372881355932200,
+                               0.2456140350877190,
+                               0.2363636363636360,
+                               0.2631578947368420,
+                               0.2631578947368420,
+                               0.2586206896551720,
+                               0.2631578947368420,
+                               0.2631578947368420,
+                               0.2678571428571430,
+                               0.2727272727272730,
+                               0.2857142857142860,
+                               0.2857142857142860,
+                               0.2857142857142860,
+                               0.2909090909090910,
+                               0.2962962962962960,
+                               0.2830188679245280,
+                               0.3076923076923080,
+                               0.3076923076923080,
+                               0.3076923076923080,
+                               0.3207547169811320,
+                               0.3207547169811320,
+                               0.3207547169811320,
+                               0.3750000000000000,
+                               0.3750000000000000,
+                               0.3750000000000000,
+                               0.3958333333333330,
+                               0.3958333333333330,
+                               0.3958333333333330,
+                               0.3877551020408160,
+                               0.3958333333333330,
+                               0.3958333333333330,
+                               0.4081632653061220,
+                               0.4038461538461540,
+                               0.4074074074074070,
+                               0.4035087719298250,
+                               0.3965517241379310,
+                               0.3965517241379310,
+                               0.4067796610169490,
+                               0.4166666666666670,
+                               0.4166666666666670,
+                               0.4166666666666670,
+                               0.4237288135593220,
+                               0.4237288135593220,
+                               0.4237288135593220,
+                               0.4310344827586210,
+                               0.4310344827586210,
+                               0.4237288135593220,
+                               0.4237288135593220,
+                               0.4237288135593220,
+                               0.4333333333333330,
+                               0.4426229508196720,
+                               0.4426229508196720,
+                               0.4516129032258060,
+                               0.4516129032258060,
+                               0.4375000000000000,
+                               0.4375000000000000,
+                               0.4375000000000000,
+                               0.4375000000000000,
+                               0.4531250000000000,
+                               0.4461538461538460,
+                               0.4461538461538460,
+                               0.4285714285714290,
+                               0.4354838709677420,
+                               0.4262295081967210,
+                               0.4482758620689660,
+                               0.4482758620689660,
+                               0.4406779661016950,
+                               0.4406779661016950,
+                               0.4406779661016950,
+                               0.4576271186440680,
+                               0.4590163934426230,
+                               0.4677419354838710,
+                               0.4915254237288140,
+                               0.4915254237288140,
+                               0.4915254237288140,
+                               0.5000000000000000,
+                               0.5081967213114750,
+                               0.5081967213114750,
+                               0.5081967213114750,
+                               0.5081967213114750,
+                               0.5166666666666670,
+                               0.5166666666666670,
+                               0.5166666666666670,
+                               0.5166666666666670,
+                               0.5081967213114750,
+                               0.5081967213114750,
+                               0.5081967213114750,
+                               0.5000000000000000,
+                               0.5084745762711860,
+                               0.5084745762711860,
+                               0.5000000000000000,
+                               0.5000000000000000,
+                               0.5081967213114750,
+                               0.5161290322580650,
+                               0.5076923076923080,
+                               0.5156250000000000,
+                               0.5238095238095240,
+                               0.5238095238095240,
+                               0.5238095238095240,
+                               0.5245901639344260,
+                               0.5333333333333330,
+                               0.5245901639344260,
+                               0.5500000000000000,
+                               0.5500000000000000,
+                               0.5573770491803280,
+                               0.5645161290322580,
+                               0.5645161290322580,
+                               0.5645161290322580,
+                               0.5645161290322580,
+                               0.5645161290322580,
+                               0.5645161290322580,
+                               0.5645161290322580,
+                               0.5645161290322580,
+                               0.5645161290322580,
+                               0.5625000000000000,
+                               0.5538461538461540,
+                               0.5454545454545450,
+                               0.5454545454545450,
+                               0.5454545454545450,
+                               0.5454545454545450,
+                               0.5384615384615380,
+                               0.5384615384615380,
+                               0.5384615384615380,
+                               0.5454545454545450,
+                               0.5588235294117650,
+                               0.5588235294117650,
+                               0.5671641791044780,
+                               0.5588235294117650,
+                               0.5588235294117650,
+                               0.5588235294117650,
+                               0.5757575757575760,
+                               0.5757575757575760,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6290322580645160,
+                               0.6290322580645160,
+                               0.6290322580645160,
+                               0.6393442622950820,
+                               0.6393442622950820,
+                               0.6393442622950820,
+                               0.6271186440677970,
+                               0.6271186440677970,
+                               0.6271186440677970,
+                               0.6206896551724140,
+                               0.6206896551724140,
+                               0.6206896551724140,
+                               0.6428571428571430,
+                               0.6428571428571430,
+                               0.6315789473684210,
+                               0.6428571428571430,
+                               0.6428571428571430,
+                               0.6363636363636360,
+                               0.6363636363636360,
+                               0.6363636363636360,
+                               0.6363636363636360,
+                               0.6363636363636360,
+                               0.6481481481481480,
+                               0.6481481481481480,
+                               0.6296296296296300,
+                               0.6296296296296300,
+                               0.6415094339622640,
+                               0.6296296296296300,
+                               0.6415094339622640,
+                               0.6226415094339620,
+                               0.6181818181818180,
+                               0.6296296296296300,
+                               0.6181818181818180,
+                               0.6181818181818180,
+                               0.6181818181818180,
+                               0.6181818181818180,
+                               0.6315789473684210,
+                               0.6428571428571430,
+                               0.6545454545454550,
+                               0.6607142857142860,
+                               0.6607142857142860,
+                               0.6607142857142860,
+                               0.6724137931034480,
+                               0.6724137931034480,
+                               0.6779661016949150,
+                               0.6779661016949150,
+                               0.6833333333333330,
+                               0.6833333333333330,
+                               0.7000000000000000,
+                               0.7000000000000000,
+                               0.7166666666666670,
+                               0.7166666666666670,
+                               0.7118644067796610,
+                               0.7118644067796610,
+                               0.7241379310344830,
+                               0.7241379310344830,
+                               0.7368421052631580,
+                               0.7368421052631580,
+                               0.7368421052631580,
+                               0.7118644067796610,
+                               0.7118644067796610,
+                               0.7118644067796610,
+                               0.7118644067796610,
+                               0.7118644067796610,
+                               0.7118644067796610,
+                               0.7118644067796610,
+                               0.7166666666666670,
+                               0.7049180327868850,
+                               0.7049180327868850,
+                               0.7049180327868850,
+                               0.7049180327868850,
+                               0.6935483870967740,
+                               0.6935483870967740,
+                               0.6935483870967740,
+                               0.7096774193548390,
+                               0.7096774193548390,
+                               0.7096774193548390,
+                               0.7096774193548390,
+                               0.7096774193548390,
+                               0.7096774193548390,
+                               0.6923076923076920,
+                               0.6923076923076920,
+                               0.6969696969696970,
+                               0.6969696969696970,
+                               0.7076923076923080,
+                               0.7076923076923080,
+                               0.6969696969696970,
+                               0.6969696969696970,
+                               0.6865671641791040,
+                               0.6865671641791040,
+                               0.6865671641791040,
+                               0.6911764705882350,
+                               0.6911764705882350,
+                               0.6911764705882350,
+                               0.6911764705882350,
+                               0.7014925373134330,
+                               0.7058823529411760,
+                               0.7058823529411760,
+                               0.7164179104477610,
+                               0.7164179104477610,
+                               0.7164179104477610,
+                               0.7164179104477610,
+                               0.7164179104477610,
+                               0.7164179104477610,
+                               0.7246376811594200,
+                               0.7246376811594200,
+                               0.7352941176470590,
+                               0.7352941176470590,
+                               0.7352941176470590,
+                               0.7352941176470590,
+                               0.7352941176470590,
+                               0.7352941176470590,
+                               0.7352941176470590,
+                               0.7462686567164180,
+                               0.7462686567164180,
+                               0.7575757575757580,
+                               0.7611940298507460,
+                               0.7611940298507460,
+                               0.7647058823529410,
+                               0.7681159420289850,
+                               0.7681159420289850,
+                               0.7681159420289850,
+                               0.7681159420289850,
+                               0.7681159420289850,
+                               0.7681159420289850,
+                               0.7826086956521740,
+                               0.7941176470588230,
+                               0.8059701492537310,
+                               0.8059701492537310,
+                               0.8059701492537310,
+                               0.8059701492537310,
+                               0.8059701492537310,
+                               0.8059701492537310,
+                               0.8059701492537310,
+                               0.8059701492537310,
+                               0.8059701492537310,
+                               0.8059701492537310,
+                               0.8181818181818180,
+                               0.8307692307692310,
+                               0.8307692307692310,
+                               0.8437500000000000,
+                               0.8437500000000000,
+                               0.8437500000000000,
+                               0.8461538461538460,
+                               0.8461538461538460,
+                               0.8484848484848480,
+                               0.8484848484848480,
+                               0.8484848484848480,
+                               0.8484848484848480,
+                               0.8507462686567160,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8695652173913040,
+                               0.8695652173913040,
+                               0.8695652173913040,
+                               0.8695652173913040,
+                               0.8695652173913040,
+                               0.8695652173913040,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8656716417910450,
+                               0.8636363636363640,
+                               0.8636363636363640,
+                               0.8636363636363640,
+                               0.8636363636363640,
+                               0.8636363636363640,
+                               0.8636363636363640,
+                               0.8656716417910450,
+                               0.8656716417910450,
+                               0.8695652173913040,
+                               0.8695652173913040,
+                               0.8695652173913040,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8636363636363640,
+                               0.8636363636363640,
+                               0.8769230769230770,
+                               0.8769230769230770,
+                               0.8769230769230770,
+                               0.8769230769230770,
+                               0.8769230769230770,
+                               0.8769230769230770,
+                               0.8906250000000000,
+                               0.8906250000000000,
+                               0.8906250000000000,
+                               0.8923076923076920,
+                               0.8923076923076920,
+                               0.8923076923076920,
+                               0.8923076923076920,
+                               0.8939393939393940,
+                               0.8939393939393940,
+                               0.8939393939393940,
+                               0.8939393939393940,
+                               0.8939393939393940,
+                               0.8939393939393940,
+                               0.8939393939393940,
+                               0.8939393939393940,
+                               0.8939393939393940,
+                               0.8939393939393940,
+                               0.8955223880597010,
+                               0.8955223880597010,
+                               0.8955223880597010,
+                               0.8955223880597010,
+                               0.8955223880597010,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9014084507042250,
+                               0.9014084507042250,
+                               0.9014084507042250,
+                               0.9014084507042250,
+                               0.9014084507042250,
+                               0.9014084507042250,
+                               0.9014084507042250,
+                               0.9142857142857140,
+                               0.9142857142857140,
+                               0.9142857142857140,
+                               0.9142857142857140,
+                               0.9142857142857140,
+                               0.9154929577464790,
+                               0.9154929577464790,
+                               0.9154929577464790,
+                               0.9154929577464790,
+                               0.9154929577464790,
+                               0.9154929577464790,
+                               0.9154929577464790,
+                               0.9166666666666670,
+                               0.9166666666666670,
+                               0.9166666666666670,
+                               0.9166666666666670,
+                               0.9166666666666670,
+                               0.9166666666666670,
+                               0.9166666666666670,
+                               0.9166666666666670,
+                               0.9295774647887320,
+                               0.9295774647887320,
+                               0.9295774647887320,
+                               0.9295774647887320,
+                               0.9295774647887320,
+                               0.9295774647887320,
+                               0.9295774647887320,
+                               0.9295774647887320,
+                               0.9295774647887320,
+                               0.9295774647887320,
+                               0.9295774647887320,
+                               0.9295774647887320,
+                               0.9295774647887320,
+                               0.9305555555555560,
+                               0.9305555555555560,
+                               0.9305555555555560,
+                               0.9305555555555560,
+                               0.9305555555555560,
+                               0.9315068493150680,
+                               0.9315068493150680,
+                               0.9315068493150680,
+                               0.9315068493150680,
+                               0.9315068493150680,
+                               0.9315068493150680,
+                               0.9315068493150680,
+                               0.9315068493150680,
+                               0.9315068493150680,
+                               0.9315068493150680,
+                               0.9315068493150680,
+                               0.9315068493150680,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9324324324324320,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9459459459459460,
+                               0.9459459459459460,
+                               0.9459459459459460,
+                               0.9459459459459460,
+                               0.9459459459459460,
+                               0.9459459459459460,
+                               0.9459459459459460,
+                               0.9459459459459460,
+                               0.9459459459459460,
+                               0.9459459459459460,
+                               0.9459459459459460,
+                               0.9459459459459460,
+                               0.9459459459459460,
+                               0.9459459459459460,
+                               0.9459459459459460,
+                               0.9459459459459460,
+                               0.9459459459459460,
+                               0.9459459459459460,
+                               0.9459459459459460,
+                               0.9459459459459460,
+                               0.9459459459459460,
+                               0.9459459459459460,
+                               0.9459459459459460,
+                               0.9459459459459460,
+                               0.9459459459459460,
+                               0.9459459459459460,
+                               0.9459459459459460,
+                               0.9459459459459460,
+                               0.9459459459459460,
+                               0.9459459459459460,
+                               0.9459459459459460,
+                               0.9459459459459460,
+                               0.9459459459459460,
+                               0.9459459459459460,
+                               0.9459459459459460,
+                               0.9459459459459460,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9452054794520550,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9577464788732390,
+                               0.9577464788732390,
+                               0.9577464788732390,
+                               0.9577464788732390,
+                               0.9577464788732390,
+                               0.9577464788732390,
+                               0.9577464788732390,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9571428571428570,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9558823529411760,
+                               0.9545454545454550,
+                               0.9545454545454550,
+                               0.9545454545454550,
+                               0.9545454545454550,
+                               0.9538461538461540,
+                               0.9538461538461540,
+                               0.9531250000000000,
+                               0.9531250000000000,
+                               0.9531250000000000,
+                               0.9531250000000000,
+                               0.9682539682539680,
+                               0.9682539682539680,
+                               0.9682539682539680,
+                               0.9682539682539680,
+                               0.9682539682539680,
+                               0.9682539682539680,
+                               0.9682539682539680,
+                               0.9682539682539680,
+                               0.9682539682539680,
+                               0.9672131147540980,
+                               0.9672131147540980,
+                               0.9672131147540980,
+                               0.9672131147540980,
+                               0.9672131147540980,
+                               0.9672131147540980,
+                               0.9666666666666670,
+                               0.9661016949152540,
+                               0.9661016949152540,
+                               0.9655172413793100,
+                               0.9655172413793100,
+                               0.9655172413793100,
+                               0.9491525423728810,
+                               0.9491525423728810,
+                               0.9491525423728810,
+                               0.9333333333333330,
+                               0.9333333333333330,
+                               0.9322033898305080,
+                               0.9310344827586210,
+                               0.9310344827586210,
+                               0.9310344827586210,
+                               0.9137931034482760,
+                               0.9137931034482760,
+                               0.9137931034482760,
+                               0.8983050847457630,
+                               0.8983050847457630,
+                               0.8965517241379310,
+                               0.8813559322033900,
+                               0.8813559322033900,
+                               0.8793103448275860,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8448275862068960,
+                               0.8448275862068960,
+                               0.8448275862068960,
+                               0.8448275862068960,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.7868852459016390,
+                               0.7868852459016390,
+                               0.7868852459016390,
+                               0.7833333333333330,
+                               0.7833333333333330,
+                               0.7833333333333330,
+                               0.7833333333333330,
+                               0.7704918032786880,
+                               0.7704918032786880,
+                               0.7704918032786880,
+                               0.7704918032786880,
+                               0.7704918032786880,
+                               0.7580645161290320,
+                               0.7540983606557380,
+                               0.7419354838709680,
+                               0.7377049180327870,
+                               0.7377049180327870,
+                               0.7288135593220340,
+                               0.7118644067796610,
+                               0.7118644067796610,
+                               0.7068965517241380,
+                               0.7068965517241380,
+                               0.7017543859649120,
+                               0.6964285714285710,
+                               0.6964285714285710,
+                               0.6842105263157900,
+                               0.6842105263157900,
+                               0.6842105263157900,
+                               0.6842105263157900,
+                               0.6785714285714290,
+                               0.6785714285714290,
+                               0.6785714285714290,
+                               0.6785714285714290,
+                               0.6785714285714290,
+                               0.6666666666666670,
+                               0.6551724137931030,
+                               0.6379310344827590,
+                               0.6271186440677970,
+                               0.6206896551724140,
+                               0.5964912280701750,
+                               0.5964912280701750,
+                               0.5789473684210530,
+                               0.5689655172413790,
+                               0.5689655172413790,
+                               0.5689655172413790,
+                               0.5689655172413790,
+                               0.5689655172413790,
+                               0.5593220338983050,
+                               0.5593220338983050,
+                               0.5593220338983050,
+                               0.5593220338983050,
+                               0.5500000000000000,
+                               0.5423728813559320,
+                               0.5333333333333330,
+                               0.5333333333333330,
+                               0.5333333333333330,
+                               0.5333333333333330,
+                               0.5333333333333330,
+                               0.5333333333333330,
+                               0.5333333333333330,
+                               0.5333333333333330,
+                               0.5423728813559320,
+                               0.5423728813559320,
+                               0.5333333333333330,
+                               0.5166666666666670,
+                               0.5333333333333330,
+                               0.5254237288135590,
+                               0.5254237288135590,
+                               0.5254237288135590,
+                               0.5333333333333330,
+                               0.5245901639344260,
+                               0.5081967213114750,
+                               0.4736842105263160,
+                               0.4655172413793100,
+                               0.4576271186440680,
+                               0.4482758620689660,
+                               0.4406779661016950,
+                               0.4406779661016950,
+                               0.4310344827586210,
+                               0.4310344827586210,
+                               0.4310344827586210,
+                               0.4310344827586210,
+                               0.4137931034482760,
+                               0.4137931034482760,
+                               0.3818181818181820,
+                               0.3818181818181820,
+                               0.3396226415094340,
+                               0.3333333333333330,
+                               0.3272727272727270,
+                               0.3272727272727270,
+                               0.3148148148148150,
+                               0.3148148148148150,
+                               0.3148148148148150,
+                               0.3090909090909090,
+                               0.3090909090909090,
+                               0.3090909090909090,
+                               0.3090909090909090,
+                               0.3090909090909090,
+                               0.3090909090909090,
+                               0.3090909090909090,
+                               0.3090909090909090,
+                               0.3090909090909090,
+                               0.2962962962962960,
+                               0.2962962962962960,
+                               0.2830188679245280,
+                               0.2549019607843140,
+                               0.2600000000000000,
+                               0.2448979591836730,
+                               0.2400000000000000,
+                               0.2400000000000000,
+                               0.2307692307692310,
+                               0.2307692307692310,
+                               0.2307692307692310,
+                               0.2264150943396230,
+                               0.2068965517241380,
+                               0.2068965517241380,
+                               0.2068965517241380,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.1864406779661020,
+                               0.1864406779661020,
+                               0.1774193548387100,
+                               0.1774193548387100,
+                               0.1774193548387100,
+                               0.1639344262295080,
+                               0.1451612903225810,
+                               0.1451612903225810,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1230769230769230,
+                               0.1230769230769230,
+                               0.1230769230769230,
+                               0.1230769230769230,
+                               0.1230769230769230,
+                               0.1212121212121210,
+                               0.1212121212121210,
+                               0.1212121212121210,
+                               0.1176470588235290,
+                               0.1176470588235290,
+                               0.1176470588235290,
+                               0.1176470588235290,
+                               0.1044776119402990,
+                               0.1044776119402990,
+                               0.1044776119402990,
+                               0.1044776119402990,
+                               0.1044776119402990,
+                               0.1044776119402990,
+                               0.1044776119402990,
+                               0.1044776119402990,
+                               0.1044776119402990,
+                               0.1044776119402990,
+                               0.1029411764705880,
+                               0.1044776119402990,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0869565217391304,
+                               0.0869565217391304,
+                               0.0869565217391304,
+                               0.0869565217391304,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0735294117647059,
+                               0.0735294117647059,
+                               0.0735294117647059,
+                               0.0597014925373134,
+                               0.0606060606060606,
+                               0.0615384615384615,
+                               0.0615384615384615,
+                               0.0615384615384615,
+                               0.0606060606060606,
+                               0.0606060606060606,
+                               0.0746268656716418,
+                               0.0735294117647059,
+                               0.0735294117647059,
+                               0.0735294117647059,
+                               0.0735294117647059,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0735294117647059,
+                               0.0735294117647059,
+                               0.0735294117647059,
+                               0.0735294117647059,
+                               0.0735294117647059,
+                               0.0735294117647059,
+                               0.0735294117647059,
+                               0.0735294117647059,
+                               0.0735294117647059,
+                               0.0735294117647059,
+                               0.0735294117647059,
+                               0.0735294117647059,
+                               0.0746268656716418,
+                               0.0735294117647059,
+                               0.0735294117647059,
+                               0.0735294117647059,
+                               0.0735294117647059,
+                               0.0735294117647059,
+                               0.0869565217391304,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1014492753623190,
+                               0.1014492753623190,
+                               0.1014492753623190,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1029411764705880,
+                               0.0909090909090909,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.0937500000000000,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.1014492753623190,
+                               0.1014492753623190,
+                               0.1014492753623190,
+                               0.1029411764705880,
+                               0.1029411764705880,
+                               0.0895522388059701,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0923076923076923,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0923076923076923,
+                               0.0952380952380952,
+                               0.0952380952380952,
+                               0.0967741935483871,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1016949152542370,
+                               0.0967741935483871,
+                               0.0833333333333333,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0952380952380952,
+                               0.0952380952380952,
+                               0.1111111111111110,
+                               0.1093750000000000,
+                               0.1093750000000000,
+                               0.1093750000000000,
+                               0.1093750000000000,
+                               0.1093750000000000,
+                               0.1093750000000000,
+                               0.1093750000000000,
+                               0.1076923076923080,
+                               0.1076923076923080,
+                               0.1076923076923080,
+                               0.1076923076923080,
+                               0.1076923076923080,
+                               0.1093750000000000,
+                               0.1093750000000000,
+                               0.1093750000000000,
+                               0.1076923076923080,
+                               0.1093750000000000,
+                               0.1111111111111110,
+                               0.1093750000000000,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.0967741935483871,
+                               0.0952380952380952,
+                               0.0952380952380952,
+                               0.0952380952380952,
+                               0.0952380952380952,
+                               0.0967741935483871,
+                               0.0952380952380952,
+                               0.0952380952380952,
+                               0.0952380952380952,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0983606557377049,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0806451612903226,
+                               0.0819672131147541,
+                               0.0793650793650794,
+                               0.0781250000000000,
+                               0.0781250000000000,
+                               0.0781250000000000,
+                               0.0793650793650794,
+                               0.0781250000000000,
+                               0.0781250000000000,
+                               0.0781250000000000,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0833333333333333,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0833333333333333,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0793650793650794,
+                               0.0781250000000000,
+                               0.0781250000000000,
+                               0.0781250000000000,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0781250000000000,
+                               0.0781250000000000,
+                               0.0781250000000000,
+                               0.0781250000000000,
+                               0.0781250000000000,
+                               0.0781250000000000,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0781250000000000,
+                               0.0781250000000000,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0806451612903226,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0677966101694915,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0655737704918033,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0952380952380952,
+                               0.0967741935483871,
+                               0.0983606557377049,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1016949152542370,
+                               0.1016949152542370,
+                               0.1186440677966100,
+                               0.1147540983606560,
+                               0.1290322580645160,
+                               0.1290322580645160,
+                               0.1290322580645160,
+                               0.1290322580645160,
+                               0.1269841269841270,
+                               0.1269841269841270,
+                               0.1290322580645160,
+                               0.1290322580645160,
+                               0.1269841269841270,
+                               0.1290322580645160,
+                               0.1290322580645160,
+                               0.1311475409836070,
+                               0.1311475409836070,
+                               0.1290322580645160,
+                               0.1311475409836070,
+                               0.1451612903225810,
+                               0.1333333333333330,
+                               0.1311475409836070,
+                               0.1475409836065570,
+                               0.1475409836065570,
+                               0.1500000000000000,
+                               0.1639344262295080,
+                               0.1639344262295080,
+                               0.1639344262295080,
+                               0.1639344262295080,
+                               0.1639344262295080,
+                               0.1639344262295080,
+                               0.1639344262295080,
+                               0.1639344262295080,
+                               0.1639344262295080,
+                               0.1639344262295080,
+                               0.1639344262295080,
+                               0.1639344262295080,
+                               0.1639344262295080,
+                               0.1774193548387100,
+                               0.1904761904761900,
+                               0.1935483870967740,
+                               0.1967213114754100,
+                               0.1967213114754100,
+                               0.1833333333333330,
+                               0.1864406779661020,
+                               0.1864406779661020,
+                               0.1864406779661020,
+                               0.1864406779661020,
+                               0.1864406779661020,
+                               0.1864406779661020,
+                               0.1864406779661020,
+                               0.1896551724137930,
+                               0.2033898305084750,
+                               0.2000000000000000,
+                               0.1967213114754100,
+                               0.1833333333333330,
+                               0.1833333333333330,
+                               0.1864406779661020,
+                               0.1864406779661020,
+                               0.1864406779661020,
+                               0.1864406779661020,
+                               0.1724137931034480,
+                               0.1864406779661020,
+                               0.1896551724137930,
+                               0.1754385964912280,
+                               0.1754385964912280,
+                               0.1754385964912280,
+                               0.1694915254237290,
+                               0.1833333333333330,
+                               0.1864406779661020,
+                               0.1864406779661020,
+                               0.1864406779661020,
+                               0.1864406779661020,
+                               0.1833333333333330,
+                               0.1833333333333330,
+                               0.1864406779661020,
+                               0.1864406779661020,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.2105263157894740,
+                               0.2068965517241380,
+                               0.2068965517241380,
+                               0.2241379310344830,
+                               0.2241379310344830,
+                               0.2241379310344830,
+                               0.2241379310344830,
+                               0.2241379310344830,
+                               0.2280701754385960,
+                               0.2280701754385960,
+                               0.2321428571428570,
+                               0.2321428571428570,
+                               0.2321428571428570,
+                               0.2280701754385960,
+                               0.2241379310344830,
+                               0.2241379310344830,
+                               0.2241379310344830,
+                               0.2241379310344830,
+                               0.2280701754385960,
+                               0.2000000000000000,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1964285714285710,
+                               0.2241379310344830,
+                               0.2280701754385960,
+                               0.2280701754385960,
+                               0.2321428571428570,
+                               0.2407407407407410,
+                               0.2407407407407410,
+                               0.2407407407407410,
+                               0.2363636363636360,
+                               0.2363636363636360,
+                               0.2363636363636360,
+                               0.2363636363636360,
+                               0.2363636363636360,
+                               0.2363636363636360,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2307692307692310,
+                               0.2307692307692310,
+                               0.2352941176470590,
+                               0.2352941176470590,
+                               0.2400000000000000,
+                               0.2600000000000000,
+                               0.2600000000000000,
+                               0.2600000000000000,
+                               0.2600000000000000,
+                               0.2600000000000000,
+                               0.2800000000000000,
+                               0.2800000000000000,
+                               0.2884615384615380,
+                               0.2884615384615380,
+                               0.2884615384615380,
+                               0.2830188679245280,
+                               0.2830188679245280,
+                               0.2830188679245280,
+                               0.2962962962962960,
+                               0.2962962962962960,
+                               0.2962962962962960,
+                               0.2962962962962960,
+                               0.2982456140350880,
+                               0.2982456140350880,
+                               0.3090909090909090,
+                               0.3090909090909090,
+                               0.3090909090909090,
+                               0.3148148148148150,
+                               0.3396226415094340,
+                               0.3396226415094340,
+                               0.3461538461538460,
+                               0.3461538461538460,
+                               0.3461538461538460,
+                               0.3529411764705880,
+                               0.3529411764705880,
+                               0.3584905660377360,
+                               0.3888888888888890,
+                               0.3888888888888890,
+                               0.3962264150943400,
+                               0.3888888888888890,
+                               0.3962264150943400,
+                               0.3962264150943400,
+                               0.3962264150943400,
+                               0.3962264150943400,
+                               0.4038461538461540,
+                               0.4117647058823530,
+                               0.4117647058823530,
+                               0.4117647058823530,
+                               0.4285714285714290,
+                               0.4285714285714290,
+                               0.4200000000000000,
+                               0.4117647058823530,
+                               0.4230769230769230,
+                               0.4117647058823530,
+                               0.4200000000000000,
+                               0.4200000000000000,
+                               0.4200000000000000,
+                               0.4200000000000000,
+                               0.4313725490196080,
+                               0.4230769230769230,
+                               0.4400000000000000,
+                               0.4400000000000000,
+                               0.4400000000000000,
+                               0.4509803921568630,
+                               0.4615384615384620,
+                               0.4615384615384620,
+                               0.4807692307692310,
+                               0.4807692307692310,
+                               0.4901960784313730,
+                               0.4901960784313730,
+                               0.5098039215686270,
+                               0.5098039215686270,
+                               0.5000000000000000,
+                               0.5192307692307690,
+                               0.5294117647058820,
+                               0.5490196078431370,
+                               0.5490196078431370,
+                               0.5600000000000000,
+                               0.5576923076923080,
+                               0.5686274509803920,
+                               0.5800000000000000,
+                               0.5800000000000000,
+                               0.5882352941176470,
+                               0.6000000000000000,
+                               0.6153846153846150,
+                               0.6153846153846150,
+                               0.6153846153846150,
+                               0.6153846153846150,
+                               0.6153846153846150,
+                               0.6226415094339620,
+                               0.6296296296296300,
+                               0.6296296296296300,
+                               0.6415094339622640,
+                               0.6481481481481480,
+                               0.6415094339622640,
+                               0.6415094339622640,
+                               0.6538461538461540,
+                               0.6538461538461540,
+                               0.6603773584905660,
+                               0.6603773584905660,
+                               0.6666666666666670,
+                               0.6800000000000000,
+                               0.6730769230769230,
+                               0.6666666666666670,
+                               0.6923076923076920,
+                               0.6923076923076920,
+                               0.6792452830188680,
+                               0.6923076923076920,
+                               0.6981132075471700,
+                               0.6981132075471700,
+                               0.6981132075471700,
+                               0.6981132075471700,
+                               0.6981132075471700,
+                               0.7115384615384620,
+                               0.7115384615384620,
+                               0.7254901960784310,
+                               0.7450980392156860,
+                               0.7450980392156860,
+                               0.7450980392156860,
+                               0.7450980392156860,
+                               0.7450980392156860,
+                               0.7450980392156860,
+                               0.7450980392156860,
+                               0.7450980392156860,
+                               0.7450980392156860,
+                               0.7450980392156860,
+                               0.7450980392156860,
+                               0.7450980392156860,
+                               0.7222222222222220,
+                               0.7222222222222220,
+                               0.7358490566037730,
+                               0.7358490566037730,
+                               0.7358490566037730,
+                               0.7222222222222220,
+                               0.7222222222222220,
+                               0.7222222222222220,
+                               0.7222222222222220,
+                               0.7090909090909090,
+                               0.7222222222222220,
+                               0.7222222222222220,
+                               0.7017543859649120,
+                               0.7017543859649120,
+                               0.6779661016949150,
+                               0.6885245901639340,
+                               0.6984126984126980,
+                               0.6984126984126980,
+                               0.6984126984126980,
+                               0.6984126984126980,
+                               0.6984126984126980,
+                               0.6984126984126980,
+                               0.6984126984126980,
+                               0.6984126984126980,
+                               0.6984126984126980,
+                               0.6984126984126980,
+                               0.6984126984126980,
+                               0.6984126984126980,
+                               0.6984126984126980,
+                               0.7096774193548390,
+                               0.7096774193548390,
+                               0.7096774193548390,
+                               0.7142857142857140,
+                               0.7142857142857140,
+                               0.7096774193548390,
+                               0.7096774193548390,
+                               0.6984126984126980,
+                               0.6885245901639340,
+                               0.6885245901639340,
+                               0.6885245901639340,
+                               0.7000000000000000,
+                               0.6774193548387100,
+                               0.6774193548387100,
+                               0.6774193548387100,
+                               0.6774193548387100,
+                               0.6721311475409840,
+                               0.6557377049180330,
+                               0.6557377049180330,
+                               0.6666666666666670,
+                               0.6779661016949150,
+                               0.6779661016949150,
+                               0.6779661016949150,
+                               0.6779661016949150,
+                               0.6779661016949150,
+                               0.7272727272727270,
+                               0.7017543859649120,
+                               0.7017543859649120,
+                               0.7068965517241380,
+                               0.7068965517241380,
+                               0.7192982456140350,
+                               0.7192982456140350,
+                               0.7192982456140350,
+                               0.7192982456140350,
+                               0.7272727272727270,
+                               0.7272727272727270,
+                               0.7272727272727270,
+                               0.7321428571428570,
+                               0.7368421052631580,
+                               0.7368421052631580,
+                               0.7368421052631580,
+                               0.7543859649122810,
+                               0.7678571428571430,
+                               0.7678571428571430,
+                               0.7678571428571430,
+                               0.7678571428571430,
+                               0.7678571428571430,
+                               0.7678571428571430,
+                               0.7719298245614030,
+                               0.7719298245614030,
+                               0.7719298245614030,
+                               0.7719298245614030,
+                               0.7719298245614030,
+                               0.7719298245614030,
+                               0.7719298245614030,
+                               0.7857142857142860,
+                               0.7857142857142860,
+                               0.7857142857142860,
+                               0.7894736842105260,
+                               0.7931034482758620,
+                               0.7931034482758620,
+                               0.8103448275862070,
+                               0.8103448275862070,
+                               0.8103448275862070,
+                               0.8103448275862070,
+                               0.8103448275862070,
+                               0.8103448275862070,
+                               0.7833333333333330,
+                               0.7833333333333330,
+                               0.7833333333333330,
+                               0.7833333333333330,
+                               0.7796610169491530,
+                               0.7796610169491530,
+                               0.7796610169491530,
+                               0.7796610169491530,
+                               0.7796610169491530,
+                               0.7796610169491530,
+                               0.7796610169491530,
+                               0.7796610169491530,
+                               0.7868852459016390,
+                               0.7868852459016390,
+                               0.7868852459016390,
+                               0.7741935483870970,
+                               0.7777777777777780,
+                               0.7777777777777780,
+                               0.7777777777777780,
+                               0.7777777777777780,
+                               0.7777777777777780,
+                               0.7777777777777780,
+                               0.7777777777777780,
+                               0.7777777777777780,
+                               0.7777777777777780,
+                               0.7777777777777780,
+                               0.7777777777777780,
+                               0.7777777777777780,
+                               0.7903225806451610,
+                               0.7903225806451610,
+                               0.7903225806451610,
+                               0.7903225806451610,
+                               0.7903225806451610,
+                               0.8000000000000000,
+                               0.8000000000000000,
+                               0.8000000000000000,
+                               0.8032786885245900,
+                               0.8032786885245900,
+                               0.8032786885245900,
+                               0.8095238095238100,
+                               0.8095238095238100,
+                               0.8095238095238100,
+                               0.8095238095238100,
+                               0.8095238095238100,
+                               0.8095238095238100,
+                               0.8032786885245900,
+                               0.8064516129032260,
+                               0.8064516129032260,
+                               0.8064516129032260,
+                               0.8064516129032260,
+                               0.8064516129032260,
+                               0.8064516129032260,
+                               0.8064516129032260,
+                               0.8196721311475410,
+                               0.8196721311475410,
+                               0.8196721311475410,
+                               0.8196721311475410,
+                               0.8196721311475410,
+                               0.8166666666666670,
+                               0.8196721311475410,
+                               0.8196721311475410,
+                               0.8196721311475410,
+                               0.8196721311475410,
+                               0.8196721311475410,
+                               0.8196721311475410,
+                               0.8196721311475410,
+                               0.8196721311475410,
+                               0.8196721311475410,
+                               0.8196721311475410,
+                               0.8196721311475410,
+                               0.8196721311475410,
+                               0.8196721311475410,
+                               0.8196721311475410,
+                               0.8196721311475410,
+                               0.8196721311475410,
+                               0.8196721311475410,
+                               0.8166666666666670,
+                               0.8196721311475410,
+                               0.8196721311475410,
+                               0.8333333333333330,
+                               0.8333333333333330,
+                               0.8333333333333330,
+                               0.8360655737704920,
+                               0.8360655737704920,
+                               0.8360655737704920,
+                               0.8360655737704920,
+                               0.8360655737704920,
+                               0.8387096774193550,
+                               0.8387096774193550,
+                               0.8387096774193550,
+                               0.8387096774193550,
+                               0.8387096774193550,
+                               0.8387096774193550,
+                               0.8387096774193550,
+                               0.8387096774193550,
+                               0.8387096774193550,
+                               0.8387096774193550,
+                               0.8387096774193550,
+                               0.8387096774193550,
+                               0.8387096774193550,
+                               0.8387096774193550,
+                               0.8387096774193550,
+                               0.8387096774193550,
+                               0.8387096774193550,
+                               0.8387096774193550,
+                               0.8387096774193550,
+                               0.8387096774193550,
+                               0.8387096774193550,
+                               0.8524590163934430,
+                               0.8524590163934430,
+                               0.8524590163934430,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8666666666666670,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8709677419354840,
+                               0.8709677419354840,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8833333333333330,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8870967741935480,
+                               0.8870967741935480,
+                               0.8870967741935480,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8906250000000000,
+                               0.8906250000000000,
+                               0.8923076923076920,
+                               0.8939393939393940,
+                               0.8939393939393940,
+                               0.8939393939393940,
+                               0.8939393939393940,
+                               0.8939393939393940,
+                               0.8939393939393940,
+                               0.8939393939393940,
+                               0.8939393939393940,
+                               0.8939393939393940,
+                               0.8939393939393940,
+                               0.8939393939393940,
+                               0.8939393939393940,
+                               0.8939393939393940,
+                               0.8939393939393940,
+                               0.8939393939393940,
+                               0.8939393939393940,
+                               0.8939393939393940,
+                               0.8939393939393940,
+                               0.8939393939393940,
+                               0.8939393939393940,
+                               0.8939393939393940,
+                               0.8939393939393940,
+                               0.8939393939393940,
+                               0.8955223880597010,
+                               0.8955223880597010,
+                               0.8955223880597010,
+                               0.8955223880597010,
+                               0.8955223880597010,
+                               0.8955223880597010,
+                               0.8955223880597010,
+                               0.8955223880597010,
+                               0.8955223880597010,
+                               0.8955223880597010,
+                               0.8955223880597010,
+                               0.8955223880597010,
+                               0.8955223880597010,
+                               0.8955223880597010,
+                               0.8955223880597010,
+                               0.8955223880597010,
+                               0.8955223880597010,
+                               0.8955223880597010,
+                               0.8955223880597010,
+                               0.8955223880597010,
+                               0.8955223880597010,
+                               0.8955223880597010,
+                               0.8955223880597010,
+                               0.8955223880597010,
+                               0.8955223880597010,
+                               0.8955223880597010,
+                               0.8955223880597010,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9016393442622950,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.8852459016393440,
+                               0.8833333333333330,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8644067796610170,
+                               0.8644067796610170,
+                               0.8644067796610170,
+                               0.8644067796610170,
+                               0.8644067796610170,
+                               0.8644067796610170,
+                               0.8644067796610170,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8596491228070170,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8070175438596490,
+                               0.8070175438596490,
+                               0.8000000000000000,
+                               0.8000000000000000,
+                               0.8000000000000000,
+                               0.8000000000000000,
+                               0.8000000000000000,
+                               0.8000000000000000,
+                               0.8000000000000000,
+                               0.8000000000000000,
+                               0.8000000000000000,
+                               0.7962962962962960,
+                               0.7924528301886790,
+                               0.7884615384615380,
+                               0.7843137254901960,
+                               0.7843137254901960,
+                               0.7692307692307690,
+                               0.7692307692307690,
+                               0.7692307692307690,
+                               0.7547169811320760,
+                               0.7547169811320760,
+                               0.7407407407407410,
+                               0.7407407407407410,
+                               0.7272727272727270,
+                               0.7222222222222220,
+                               0.6842105263157900,
+                               0.6724137931034480,
+                               0.6724137931034480,
+                               0.6724137931034480,
+                               0.6724137931034480,
+                               0.6724137931034480,
+                               0.6724137931034480,
+                               0.6724137931034480,
+                               0.6724137931034480,
+                               0.6724137931034480,
+                               0.6724137931034480,
+                               0.6607142857142860,
+                               0.6545454545454550,
+                               0.6481481481481480,
+                               0.6538461538461540,
+                               0.6538461538461540,
+                               0.6538461538461540,
+                               0.6538461538461540,
+                               0.6603773584905660,
+                               0.6481481481481480,
+                               0.6481481481481480,
+                               0.6481481481481480,
+                               0.6481481481481480,
+                               0.6363636363636360,
+                               0.6363636363636360,
+                               0.6363636363636360,
+                               0.6181818181818180,
+                               0.6181818181818180,
+                               0.6111111111111110,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.5925925925925930,
+                               0.5925925925925930,
+                               0.5925925925925930,
+                               0.5849056603773580,
+                               0.5740740740740740,
+                               0.5740740740740740,
+                               0.5660377358490570,
+                               0.5660377358490570,
+                               0.5555555555555560,
+                               0.5471698113207550,
+                               0.5370370370370370,
+                               0.5370370370370370,
+                               0.5370370370370370,
+                               0.5370370370370370,
+                               0.5370370370370370,
+                               0.5272727272727270,
+                               0.5272727272727270,
+                               0.5000000000000000,
+                               0.5000000000000000,
+                               0.5000000000000000,
+                               0.5000000000000000,
+                               0.4905660377358490,
+                               0.4905660377358490,
+                               0.4905660377358490,
+                               0.4905660377358490,
+                               0.4814814814814810,
+                               0.4905660377358490,
+                               0.4807692307692310,
+                               0.4807692307692310,
+                               0.4807692307692310,
+                               0.4807692307692310,
+                               0.4705882352941180,
+                               0.4615384615384620,
+                               0.4509803921568630,
+                               0.4509803921568630,
+                               0.4509803921568630,
+                               0.4509803921568630,
+                               0.4489795918367350,
+                               0.4489795918367350,
+                               0.4375000000000000,
+                               0.4375000000000000,
+                               0.4375000000000000,
+                               0.4255319148936170,
+                               0.4347826086956520,
+                               0.4347826086956520,
+                               0.4222222222222220,
+                               0.4222222222222220,
+                               0.4130434782608700,
+                               0.4130434782608700,
+                               0.4130434782608700,
+                               0.4000000000000000,
+                               0.3720930232558140,
+                               0.3720930232558140,
+                               0.3636363636363640,
+                               0.3555555555555560,
+                               0.3478260869565220,
+                               0.3404255319148940,
+                               0.3111111111111110,
+                               0.3111111111111110,
+                               0.2954545454545450,
+                               0.2888888888888890,
+                               0.2888888888888890,
+                               0.2888888888888890,
+                               0.2708333333333330,
+                               0.2708333333333330,
+                               0.2553191489361700,
+                               0.2553191489361700,
+                               0.2553191489361700,
+                               0.2553191489361700,
+                               0.2553191489361700,
+                               0.2553191489361700,
+                               0.2553191489361700,
+                               0.2391304347826090,
+                               0.2391304347826090,
+                               0.2444444444444440,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2200000000000000,
+                               0.2040816326530610,
+                               0.1960784313725490,
+                               0.1960784313725490,
+                               0.1960784313725490,
+                               0.1923076923076920,
+                               0.1923076923076920,
+                               0.1923076923076920,
+                               0.1851851851851850,
+                               0.1851851851851850,
+                               0.1851851851851850,
+                               0.1851851851851850,
+                               0.1851851851851850,
+                               0.1818181818181820,
+                               0.1666666666666670,
+                               0.1666666666666670,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1578947368421050,
+                               0.1403508771929820,
+                               0.1403508771929820,
+                               0.1379310344827590,
+                               0.1379310344827590,
+                               0.1355932203389830,
+                               0.1355932203389830,
+                               0.1355932203389830,
+                               0.1355932203389830,
+                               0.1355932203389830,
+                               0.1355932203389830,
+                               0.1379310344827590,
+                               0.1379310344827590,
+                               0.1228070175438600,
+                               0.1228070175438600,
+                               0.1228070175438600,
+                               0.1228070175438600,
+                               0.1228070175438600,
+                               0.1228070175438600,
+                               0.1206896551724140,
+                               0.1206896551724140,
+                               0.1206896551724140,
+                               0.1206896551724140,
+                               0.1052631578947370,
+                               0.1071428571428570,
+                               0.1052631578947370,
+                               0.1052631578947370,
+                               0.1052631578947370,
+                               0.1052631578947370,
+                               0.1052631578947370,
+                               0.1052631578947370,
+                               0.0892857142857143,
+                               0.0892857142857143,
+                               0.0892857142857143,
+                               0.0892857142857143,
+                               0.0892857142857143,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0909090909090909,
+                               0.0727272727272727,
+                               0.0714285714285714,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0714285714285714,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0689655172413793,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0689655172413793,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0714285714285714,
+                               0.0740740740740741,
+                               0.0754716981132075,
+                               0.0754716981132075,
+                               0.0754716981132075,
+                               0.0754716981132075,
+                               0.0784313725490196,
+                               0.0784313725490196,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0784313725490196,
+                               0.0784313725490196,
+                               0.0754716981132075,
+                               0.0754716981132075,
+                               0.0740740740740741,
+                               0.0740740740740741,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0892857142857143,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0892857142857143,
+                               0.0892857142857143,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0892857142857143,
+                               0.0892857142857143,
+                               0.0892857142857143,
+                               0.0892857142857143,
+                               0.0892857142857143,
+                               0.0892857142857143,
+                               0.0892857142857143,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0909090909090909,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0677966101694915,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0689655172413793,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0689655172413793,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0535714285714286,
+                               0.0526315789473684,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0714285714285714,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0740740740740741,
+                               0.0754716981132075,
+                               0.0754716981132075,
+                               0.0740740740740741,
+                               0.0740740740740741,
+                               0.0740740740740741,
+                               0.0740740740740741,
+                               0.0740740740740741,
+                               0.0740740740740741,
+                               0.0740740740740741,
+                               0.0740740740740741,
+                               0.0740740740740741,
+                               0.0740740740740741,
+                               0.0740740740740741,
+                               0.0740740740740741,
+                               0.0754716981132075,
+                               0.0754716981132075,
+                               0.0740740740740741,
+                               0.0740740740740741,
+                               0.0740740740740741,
+                               0.0740740740740741,
+                               0.0754716981132075,
+                               0.0754716981132075,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0784313725490196,
+                               0.0800000000000000,
+                               0.0800000000000000,
+                               0.0816326530612245,
+                               0.1020408163265310,
+                               0.1020408163265310,
+                               0.1020408163265310,
+                               0.1020408163265310,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.1000000000000000,
+                               0.1020408163265310,
+                               0.1041666666666670,
+                               0.1224489795918370,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1372549019607840,
+                               0.1372549019607840,
+                               0.1372549019607840,
+                               0.1372549019607840,
+                               0.1372549019607840,
+                               0.1372549019607840,
+                               0.1538461538461540,
+                               0.1698113207547170,
+                               0.1698113207547170,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1509433962264150,
+                               0.1509433962264150,
+                               0.1509433962264150,
+                               0.1509433962264150,
+                               0.1509433962264150,
+                               0.1346153846153850,
+                               0.1509433962264150,
+                               0.1509433962264150,
+                               0.1481481481481480,
+                               0.1481481481481480,
+                               0.1481481481481480,
+                               0.1481481481481480,
+                               0.1481481481481480,
+                               0.1481481481481480,
+                               0.1481481481481480,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1481481481481480,
+                               0.1481481481481480,
+                               0.1636363636363640,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1754385964912280,
+                               0.1754385964912280,
+                               0.1754385964912280,
+                               0.1754385964912280,
+                               0.1896551724137930,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.2037037037037040,
+                               0.2037037037037040,
+                               0.2037037037037040,
+                               0.2037037037037040,
+                               0.2037037037037040,
+                               0.2037037037037040,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.2037037037037040,
+                               0.2037037037037040,
+                               0.2037037037037040,
+                               0.2037037037037040,
+                               0.2075471698113210,
+                               0.2075471698113210,
+                               0.2075471698113210,
+                               0.2115384615384620,
+                               0.2115384615384620,
+                               0.2115384615384620,
+                               0.2115384615384620,
+                               0.2115384615384620,
+                               0.2264150943396230,
+                               0.2264150943396230,
+                               0.2264150943396230,
+                               0.2264150943396230,
+                               0.2307692307692310,
+                               0.2307692307692310,
+                               0.2352941176470590,
+                               0.2307692307692310,
+                               0.2307692307692310,
+                               0.2307692307692310,
+                               0.2307692307692310,
+                               0.2307692307692310,
+                               0.2307692307692310,
+                               0.2307692307692310,
+                               0.2352941176470590,
+                               0.2352941176470590,
+                               0.2352941176470590,
+                               0.2500000000000000,
+                               0.2549019607843140,
+                               0.2692307692307690,
+                               0.2692307692307690,
+                               0.2692307692307690,
+                               0.2692307692307690,
+                               0.2692307692307690,
+                               0.2692307692307690,
+                               0.2800000000000000,
+                               0.2857142857142860,
+                               0.2857142857142860,
+                               0.2857142857142860,
+                               0.2857142857142860,
+                               0.2857142857142860,
+                               0.2916666666666670,
+                               0.2857142857142860,
+                               0.2857142857142860,
+                               0.2857142857142860,
+                               0.2916666666666670,
+                               0.3000000000000000,
+                               0.3000000000000000,
+                               0.3137254901960780,
+                               0.3137254901960780,
+                               0.3200000000000000,
+                               0.3200000000000000,
+                               0.3061224489795920,
+                               0.3061224489795920,
+                               0.3061224489795920,
+                               0.3125000000000000,
+                               0.3125000000000000,
+                               0.3125000000000000,
+                               0.3061224489795920,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3269230769230770,
+                               0.3269230769230770,
+                               0.3269230769230770,
+                               0.3269230769230770,
+                               0.3541666666666670,
+                               0.3541666666666670,
+                               0.3617021276595740,
+                               0.3750000000000000,
+                               0.3829787234042550,
+                               0.3913043478260870,
+                               0.4000000000000000,
+                               0.4000000000000000,
+                               0.4000000000000000,
+                               0.4000000000000000,
+                               0.3913043478260870,
+                               0.3913043478260870,
+                               0.4042553191489360,
+                               0.4130434782608700,
+                               0.4318181818181820,
+                               0.4444444444444440,
+                               0.4545454545454550,
+                               0.4545454545454550,
+                               0.4761904761904760,
+                               0.4651162790697670,
+                               0.4545454545454550,
+                               0.4545454545454550,
+                               0.4651162790697670,
+                               0.4545454545454550,
+                               0.4444444444444440,
+                               0.4444444444444440,
+                               0.4444444444444440,
+                               0.4444444444444440,
+                               0.4444444444444440,
+                               0.4444444444444440,
+                               0.4545454545454550,
+                               0.4418604651162790,
+                               0.4523809523809520,
+                               0.4523809523809520,
+                               0.4878048780487810,
+                               0.4878048780487810,
+                               0.5000000000000000,
+                               0.5000000000000000,
+                               0.5116279069767440,
+                               0.5116279069767440,
+                               0.5227272727272730,
+                               0.5227272727272730,
+                               0.5348837209302320,
+                               0.5348837209302320,
+                               0.5348837209302320,
+                               0.5348837209302320,
+                               0.5348837209302320,
+                               0.5476190476190480,
+                               0.5348837209302320,
+                               0.5348837209302320,
+                               0.5476190476190480,
+                               0.5476190476190480,
+                               0.5454545454545450,
+                               0.5714285714285710,
+                               0.5909090909090910,
+                               0.5777777777777780,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6170212765957450,
+                               0.6304347826086960,
+                               0.6250000000000000,
+                               0.6250000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.5882352941176470,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6078431372549020,
+                               0.5961538461538460,
+                               0.5961538461538460,
+                               0.5961538461538460,
+                               0.5849056603773580,
+                               0.5849056603773580,
+                               0.5849056603773580,
+                               0.6037735849056600,
+                               0.6153846153846150,
+                               0.6274509803921570,
+                               0.6274509803921570,
+                               0.6274509803921570,
+                               0.6274509803921570,
+                               0.6530612244897960,
+                               0.6530612244897960,
+                               0.6530612244897960,
+                               0.6530612244897960,
+                               0.6530612244897960,
+                               0.6400000000000000,
+                               0.6400000000000000,
+                               0.6400000000000000,
+                               0.6400000000000000,
+                               0.6400000000000000,
+                               0.6400000000000000,
+                               0.6400000000000000,
+                               0.6326530612244900,
+                               0.6400000000000000,
+                               0.6400000000000000,
+                               0.6400000000000000,
+                               0.6400000000000000,
+                               0.6400000000000000,
+                               0.6400000000000000,
+                               0.6400000000000000,
+                               0.6400000000000000,
+                               0.6530612244897960,
+                               0.6530612244897960,
+                               0.6600000000000000,
+                               0.6734693877551020,
+                               0.6734693877551020,
+                               0.6734693877551020,
+                               0.6734693877551020,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6734693877551020,
+                               0.6875000000000000,
+                               0.6875000000000000,
+                               0.6875000000000000,
+                               0.6875000000000000,
+                               0.7021276595744680,
+                               0.7021276595744680,
+                               0.7021276595744680,
+                               0.7083333333333330,
+                               0.7083333333333330,
+                               0.7083333333333330,
+                               0.7021276595744680,
+                               0.7021276595744680,
+                               0.7021276595744680,
+                               0.6875000000000000,
+                               0.6875000000000000,
+                               0.6875000000000000,
+                               0.6875000000000000,
+                               0.6600000000000000,
+                               0.6470588235294120,
+                               0.6538461538461540,
+                               0.6538461538461540,
+                               0.6538461538461540,
+                               0.6603773584905660,
+                               0.6415094339622640,
+                               0.6415094339622640,
+                               0.6415094339622640,
+                               0.6415094339622640,
+                               0.6415094339622640,
+                               0.6415094339622640,
+                               0.6603773584905660,
+                               0.6603773584905660,
+                               0.6730769230769230,
+                               0.6730769230769230,
+                               0.6730769230769230,
+                               0.6730769230769230,
+                               0.6862745098039220,
+                               0.6862745098039220,
+                               0.6862745098039220,
+                               0.6862745098039220,
+                               0.6862745098039220,
+                               0.6862745098039220,
+                               0.6862745098039220,
+                               0.6862745098039220,
+                               0.6862745098039220,
+                               0.6862745098039220,
+                               0.6862745098039220,
+                               0.6862745098039220,
+                               0.7000000000000000,
+                               0.7000000000000000,
+                               0.7000000000000000,
+                               0.7000000000000000,
+                               0.7000000000000000,
+                               0.7000000000000000,
+                               0.7000000000000000,
+                               0.7000000000000000,
+                               0.7000000000000000,
+                               0.7000000000000000,
+                               0.7058823529411760,
+                               0.7058823529411760,
+                               0.7200000000000000,
+                               0.7200000000000000,
+                               0.7200000000000000,
+                               0.7254901960784310,
+                               0.7254901960784310,
+                               0.7254901960784310,
+                               0.7254901960784310,
+                               0.7254901960784310,
+                               0.7307692307692310,
+                               0.7307692307692310,
+                               0.7307692307692310,
+                               0.7307692307692310,
+                               0.7358490566037730,
+                               0.7358490566037730,
+                               0.7358490566037730,
+                               0.7358490566037730,
+                               0.7358490566037730,
+                               0.7222222222222220,
+                               0.7222222222222220,
+                               0.7222222222222220,
+                               0.7222222222222220,
+                               0.7222222222222220,
+                               0.7222222222222220,
+                               0.7222222222222220,
+                               0.7272727272727270,
+                               0.7142857142857140,
+                               0.7272727272727270,
+                               0.7272727272727270,
+                               0.7272727272727270,
+                               0.7272727272727270,
+                               0.7142857142857140,
+                               0.7142857142857140,
+                               0.7142857142857140,
+                               0.7142857142857140,
+                               0.7090909090909090,
+                               0.6964285714285710,
+                               0.6964285714285710,
+                               0.7090909090909090,
+                               0.7090909090909090,
+                               0.7090909090909090,
+                               0.7090909090909090,
+                               0.7222222222222220,
+                               0.7222222222222220,
+                               0.7358490566037730,
+                               0.7358490566037730,
+                               0.7358490566037730,
+                               0.7358490566037730,
+                               0.7307692307692310,
+                               0.7450980392156860,
+                               0.7450980392156860,
+                               0.7600000000000000,
+                               0.7600000000000000,
+                               0.7647058823529410,
+                               0.7647058823529410,
+                               0.7358490566037730,
+                               0.7407407407407410,
+                               0.7407407407407410,
+                               0.7407407407407410,
+                               0.7407407407407410,
+                               0.7547169811320760,
+                               0.7647058823529410,
+                               0.7647058823529410,
+                               0.7647058823529410,
+                               0.7647058823529410,
+                               0.7647058823529410,
+                               0.7647058823529410,
+                               0.7547169811320760,
+                               0.7547169811320760,
+                               0.7592592592592590,
+                               0.7592592592592590,
+                               0.7592592592592590,
+                               0.7592592592592590,
+                               0.7592592592592590,
+                               0.7592592592592590,
+                               0.7592592592592590,
+                               0.7592592592592590,
+                               0.7592592592592590,
+                               0.7592592592592590,
+                               0.7735849056603770,
+                               0.7735849056603770,
+                               0.7735849056603770,
+                               0.7735849056603770,
+                               0.7735849056603770,
+                               0.7735849056603770,
+                               0.7735849056603770,
+                               0.7777777777777780,
+                               0.7818181818181820,
+                               0.7818181818181820,
+                               0.7818181818181820,
+                               0.7818181818181820,
+                               0.7818181818181820,
+                               0.7818181818181820,
+                               0.7818181818181820,
+                               0.7818181818181820,
+                               0.7818181818181820,
+                               0.7894736842105260,
+                               0.7894736842105260,
+                               0.7894736842105260,
+                               0.7894736842105260,
+                               0.7894736842105260,
+                               0.7894736842105260,
+                               0.7894736842105260,
+                               0.7931034482758620,
+                               0.7931034482758620,
+                               0.7931034482758620,
+                               0.7931034482758620,
+                               0.7931034482758620,
+                               0.7931034482758620,
+                               0.7931034482758620,
+                               0.7931034482758620,
+                               0.7931034482758620,
+                               0.7931034482758620,
+                               0.7931034482758620,
+                               0.7931034482758620,
+                               0.7931034482758620,
+                               0.7931034482758620,
+                               0.7931034482758620,
+                               0.7931034482758620,
+                               0.7931034482758620,
+                               0.7931034482758620,
+                               0.7931034482758620,
+                               0.7931034482758620,
+                               0.7931034482758620,
+                               0.7931034482758620,
+                               0.7931034482758620,
+                               0.7931034482758620,
+                               0.8070175438596490,
+                               0.8070175438596490,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8518518518518520,
+                               0.8518518518518520,
+                               0.8679245283018870,
+                               0.8679245283018870,
+                               0.8679245283018870,
+                               0.8679245283018870,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8545454545454550,
+                               0.8545454545454550,
+                               0.8545454545454550,
+                               0.8545454545454550,
+                               0.8545454545454550,
+                               0.8545454545454550,
+                               0.8545454545454550,
+                               0.8545454545454550,
+                               0.8545454545454550,
+                               0.8545454545454550,
+                               0.8545454545454550,
+                               0.8545454545454550,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8679245283018870,
+                               0.8679245283018870,
+                               0.8679245283018870,
+                               0.8679245283018870,
+                               0.8679245283018870,
+                               0.8679245283018870,
+                               0.8679245283018870,
+                               0.8679245283018870,
+                               0.8679245283018870,
+                               0.8679245283018870,
+                               0.8679245283018870,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8909090909090910,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.9038461538461540,
+                               0.9038461538461540,
+                               0.9038461538461540,
+                               0.9038461538461540,
+                               0.9038461538461540,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8679245283018870,
+                               0.8679245283018870,
+                               0.8679245283018870,
+                               0.8679245283018870,
+                               0.8679245283018870,
+                               0.8679245283018870,
+                               0.8679245283018870,
+                               0.8679245283018870,
+                               0.8679245283018870,
+                               0.8679245283018870,
+                               0.8653846153846150,
+                               0.8653846153846150,
+                               0.8653846153846150,
+                               0.8653846153846150,
+                               0.8653846153846150,
+                               0.8653846153846150,
+                               0.8653846153846150,
+                               0.8653846153846150,
+                               0.8653846153846150,
+                               0.8653846153846150,
+                               0.8653846153846150,
+                               0.8653846153846150,
+                               0.8653846153846150,
+                               0.8653846153846150,
+                               0.8653846153846150,
+                               0.8653846153846150,
+                               0.8653846153846150,
+                               0.8653846153846150,
+                               0.8653846153846150,
+                               0.8653846153846150,
+                               0.8653846153846150,
+                               0.8627450980392160,
+                               0.8627450980392160,
+                               0.8627450980392160,
+                               0.8627450980392160,
+                               0.8627450980392160,
+                               0.8627450980392160,
+                               0.8823529411764710,
+                               0.8823529411764710,
+                               0.8823529411764710,
+                               0.8823529411764710,
+                               0.8823529411764710,
+                               0.8823529411764710,
+                               0.8653846153846150,
+                               0.8653846153846150,
+                               0.8653846153846150,
+                               0.8653846153846150,
+                               0.8653846153846150,
+                               0.8653846153846150,
+                               0.8653846153846150,
+                               0.8627450980392160,
+                               0.8627450980392160,
+                               0.8627450980392160,
+                               0.8627450980392160,
+                               0.8627450980392160,
+                               0.8627450980392160,
+                               0.8627450980392160,
+                               0.8627450980392160,
+                               0.8627450980392160,
+                               0.8627450980392160,
+                               0.8627450980392160,
+                               0.8800000000000000,
+                               0.8800000000000000,
+                               0.8775510204081630,
+                               0.8775510204081630,
+                               0.8775510204081630,
+                               0.8775510204081630,
+                               0.8775510204081630,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8775510204081630,
+                               0.8958333333333330,
+                               0.8958333333333330,
+                               0.8958333333333330,
+                               0.8958333333333330,
+                               0.8775510204081630,
+                               0.8775510204081630,
+                               0.8775510204081630,
+                               0.8775510204081630,
+                               0.8775510204081630,
+                               0.8775510204081630,
+                               0.8775510204081630,
+                               0.8775510204081630,
+                               0.8800000000000000,
+                               0.8800000000000000,
+                               0.8800000000000000,
+                               0.8800000000000000,
+                               0.8800000000000000,
+                               0.8800000000000000,
+                               0.8800000000000000,
+                               0.8800000000000000,
+                               0.8800000000000000,
+                               0.8800000000000000,
+                               0.8979591836734690,
+                               0.8979591836734690,
+                               0.8979591836734690,
+                               0.8979591836734690,
+                               0.8979591836734690,
+                               0.8979591836734690,
+                               0.8979591836734690,
+                               0.8979591836734690,
+                               0.8979591836734690,
+                               0.8979591836734690,
+                               0.8979591836734690,
+                               0.8979591836734690,
+                               0.8800000000000000,
+                               0.8627450980392160,
+                               0.8571428571428570,
+                               0.8541666666666670,
+                               0.8541666666666670,
+                               0.8510638297872340,
+                               0.8478260869565220,
+                               0.8478260869565220,
+                               0.8478260869565220,
+                               0.8297872340425530,
+                               0.8125000000000000,
+                               0.7959183673469390,
+                               0.7916666666666670,
+                               0.7916666666666670,
+                               0.7916666666666670,
+                               0.7916666666666670,
+                               0.7916666666666670,
+                               0.7872340425531920,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7659574468085110,
+                               0.7659574468085110,
+                               0.7608695652173910,
+                               0.7608695652173910,
+                               0.7608695652173910,
+                               0.7608695652173910,
+                               0.7446808510638300,
+                               0.7446808510638300,
+                               0.7391304347826090,
+                               0.7391304347826090,
+                               0.7555555555555560,
+                               0.7727272727272730,
+                               0.7906976744186050,
+                               0.7954545454545450,
+                               0.7954545454545450,
+                               0.7954545454545450,
+                               0.7954545454545450,
+                               0.7954545454545450,
+                               0.7777777777777780,
+                               0.7777777777777780,
+                               0.7777777777777780,
+                               0.7777777777777780,
+                               0.7608695652173910,
+                               0.7608695652173910,
+                               0.7777777777777780,
+                               0.7777777777777780,
+                               0.7777777777777780,
+                               0.7777777777777780,
+                               0.7777777777777780,
+                               0.7777777777777780,
+                               0.7777777777777780,
+                               0.7777777777777780,
+                               0.7777777777777780,
+                               0.7777777777777780,
+                               0.7777777777777780,
+                               0.7777777777777780,
+                               0.7608695652173910,
+                               0.7608695652173910,
+                               0.7608695652173910,
+                               0.7608695652173910,
+                               0.7608695652173910,
+                               0.7608695652173910,
+                               0.7446808510638300,
+                               0.7291666666666670,
+                               0.7291666666666670,
+                               0.7291666666666670,
+                               0.7291666666666670,
+                               0.7291666666666670,
+                               0.7446808510638300,
+                               0.7446808510638300,
+                               0.7608695652173910,
+                               0.7608695652173910,
+                               0.7608695652173910,
+                               0.7608695652173910,
+                               0.7608695652173910,
+                               0.7608695652173910,
+                               0.7608695652173910,
+                               0.7446808510638300,
+                               0.7446808510638300,
+                               0.7446808510638300,
+                               0.7555555555555560,
+                               0.7608695652173910,
+                               0.7659574468085110,
+                               0.7659574468085110,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7346938775510200,
+                               0.7291666666666670,
+                               0.7234042553191490,
+                               0.7291666666666670,
+                               0.7142857142857140,
+                               0.7142857142857140,
+                               0.7446808510638300,
+                               0.7446808510638300,
+                               0.7391304347826090,
+                               0.7391304347826090,
+                               0.7391304347826090,
+                               0.7391304347826090,
+                               0.6938775510204080,
+                               0.7021276595744680,
+                               0.7021276595744680,
+                               0.7021276595744680,
+                               0.7021276595744680,
+                               0.6875000000000000,
+                               0.6875000000000000,
+                               0.6875000000000000,
+                               0.6875000000000000,
+                               0.6808510638297870,
+                               0.6808510638297870,
+                               0.6808510638297870,
+                               0.6808510638297870,
+                               0.7111111111111110,
+                               0.7173913043478260,
+                               0.7111111111111110,
+                               0.7272727272727270,
+                               0.7272727272727270,
+                               0.7209302325581400,
+                               0.6888888888888890,
+                               0.6888888888888890,
+                               0.6888888888888890,
+                               0.6888888888888890,
+                               0.6888888888888890,
+                               0.6739130434782610,
+                               0.6739130434782610,
+                               0.6739130434782610,
+                               0.6808510638297870,
+                               0.6956521739130430,
+                               0.6956521739130430,
+                               0.6956521739130430,
+                               0.6808510638297870,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6734693877551020,
+                               0.6666666666666670,
+                               0.6530612244897960,
+                               0.6400000000000000,
+                               0.6400000000000000,
+                               0.6530612244897960,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6734693877551020,
+                               0.6938775510204080,
+                               0.7000000000000000,
+                               0.7000000000000000,
+                               0.7000000000000000,
+                               0.6862745098039220,
+                               0.6862745098039220,
+                               0.7000000000000000,
+                               0.7000000000000000,
+                               0.7000000000000000,
+                               0.7000000000000000,
+                               0.7000000000000000,
+                               0.7083333333333330,
+                               0.7021276595744680,
+                               0.7021276595744680,
+                               0.6875000000000000,
+                               0.6875000000000000,
+                               0.6875000000000000,
+                               0.7021276595744680,
+                               0.7083333333333330,
+                               0.7083333333333330,
+                               0.6938775510204080,
+                               0.6938775510204080,
+                               0.7083333333333330,
+                               0.6938775510204080,
+                               0.7000000000000000,
+                               0.7000000000000000,
+                               0.6862745098039220,
+                               0.6730769230769230,
+                               0.6666666666666670,
+                               0.6730769230769230,
+                               0.6730769230769230,
+                               0.6792452830188680,
+                               0.6792452830188680,
+                               0.6792452830188680,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6792452830188680,
+                               0.6730769230769230,
+                               0.6730769230769230,
+                               0.6792452830188680,
+                               0.6792452830188680,
+                               0.6792452830188680,
+                               0.6792452830188680,
+                               0.6792452830188680,
+                               0.6792452830188680,
+                               0.6792452830188680,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6545454545454550,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6603773584905660,
+                               0.6603773584905660,
+                               0.6603773584905660,
+                               0.6603773584905660,
+                               0.6603773584905660,
+                               0.6538461538461540,
+                               0.6415094339622640,
+                               0.6415094339622640,
+                               0.6415094339622640,
+                               0.6415094339622640,
+                               0.6415094339622640,
+                               0.6481481481481480,
+                               0.6481481481481480,
+                               0.6481481481481480,
+                               0.6603773584905660,
+                               0.6730769230769230,
+                               0.6862745098039220,
+                               0.6862745098039220,
+                               0.6862745098039220,
+                               0.6730769230769230,
+                               0.6730769230769230,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6800000000000000,
+                               0.6938775510204080,
+                               0.6800000000000000,
+                               0.6862745098039220,
+                               0.6862745098039220,
+                               0.6862745098039220,
+                               0.6730769230769230,
+                               0.6730769230769230,
+                               0.6730769230769230,
+                               0.6730769230769230,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6600000000000000,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6600000000000000,
+                               0.6470588235294120,
+                               0.6470588235294120,
+                               0.6470588235294120,
+                               0.6470588235294120,
+                               0.6400000000000000,
+                               0.6400000000000000,
+                               0.6400000000000000,
+                               0.6400000000000000,
+                               0.6530612244897960,
+                               0.6400000000000000,
+                               0.6400000000000000,
+                               0.6400000000000000,
+                               0.6400000000000000,
+                               0.6326530612244900,
+                               0.6200000000000000,
+                               0.6200000000000000,
+                               0.6200000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.5918367346938780,
+                               0.5918367346938780,
+                               0.5918367346938780,
+                               0.5918367346938780,
+                               0.5918367346938780,
+                               0.6041666666666670,
+                               0.6041666666666670,
+                               0.6041666666666670,
+                               0.6041666666666670,
+                               0.6041666666666670,
+                               0.6041666666666670,
+                               0.6041666666666670,
+                               0.6041666666666670,
+                               0.6041666666666670,
+                               0.6041666666666670,
+                               0.6041666666666670,
+                               0.6041666666666670,
+                               0.6041666666666670,
+                               0.5918367346938780,
+                               0.5918367346938780,
+                               0.5918367346938780,
+                               0.5918367346938780,
+                               0.5957446808510640,
+                               0.5957446808510640,
+                               0.5957446808510640,
+                               0.5957446808510640,
+                               0.5957446808510640,
+                               0.5869565217391300,
+                               0.5957446808510640,
+                               0.5957446808510640,
+                               0.5957446808510640,
+                               0.5957446808510640,
+                               0.5957446808510640,
+                               0.5833333333333330,
+                               0.5625000000000000,
+                               0.5625000000000000,
+                               0.5625000000000000,
+                               0.5625000000000000,
+                               0.5625000000000000,
+                               0.5625000000000000,
+                               0.5531914893617020,
+                               0.5531914893617020,
+                               0.5531914893617020,
+                               0.5652173913043480,
+                               0.5652173913043480,
+                               0.5652173913043480,
+                               0.5652173913043480,
+                               0.5652173913043480,
+                               0.5434782608695650,
+                               0.5434782608695650,
+                               0.5434782608695650,
+                               0.5555555555555560,
+                               0.5555555555555560,
+                               0.5555555555555560,
+                               0.5555555555555560,
+                               0.5555555555555560,
+                               0.5555555555555560,
+                               0.5555555555555560,
+                               0.5555555555555560,
+                               0.5652173913043480,
+                               0.5652173913043480,
+                               0.5652173913043480,
+                               0.5744680851063830,
+                               0.5744680851063830,
+                               0.5744680851063830,
+                               0.5744680851063830,
+                               0.5744680851063830,
+                               0.5869565217391300,
+                               0.5869565217391300,
+                               0.5744680851063830,
+                               0.5744680851063830,
+                               0.5744680851063830,
+                               0.5744680851063830,
+                               0.5957446808510640,
+                               0.5957446808510640,
+                               0.5957446808510640,
+                               0.5957446808510640,
+                               0.5957446808510640,
+                               0.5833333333333330,
+                               0.5833333333333330,
+                               0.5714285714285710,
+                               0.5833333333333330,
+                               0.5833333333333330,
+                               0.5833333333333330,
+                               0.5833333333333330,
+                               0.5833333333333330,
+                               0.5833333333333330,
+                               0.5833333333333330,
+                               0.5833333333333330,
+                               0.5833333333333330,
+                               0.5833333333333330,
+                               0.5833333333333330,
+                               0.5833333333333330,
+                               0.5800000000000000,
+                               0.5918367346938780,
+                               0.5918367346938780,
+                               0.5918367346938780,
+                               0.5918367346938780,
+                               0.5918367346938780,
+                               0.6000000000000000,
+                               0.5882352941176470,
+                               0.5961538461538460,
+                               0.5849056603773580,
+                               0.5925925925925930,
+                               0.5925925925925930,
+                               0.5849056603773580,
+                               0.5849056603773580,
+                               0.5849056603773580,
+                               0.5849056603773580,
+                               0.5849056603773580,
+                               0.5961538461538460,
+                               0.6037735849056600,
+                               0.5961538461538460,
+                               0.5961538461538460,
+                               0.5961538461538460,
+                               0.5961538461538460,
+                               0.5961538461538460,
+                               0.6122448979591840,
+                               0.6078431372549020,
+                               0.6078431372549020,
+                               0.6200000000000000,
+                               0.6200000000000000,
+                               0.6200000000000000,
+                               0.6200000000000000,
+                               0.6274509803921570,
+                               0.6274509803921570,
+                               0.6274509803921570,
+                               0.6274509803921570,
+                               0.6153846153846150,
+                               0.6037735849056600,
+                               0.5961538461538460,
+                               0.5961538461538460,
+                               0.5849056603773580,
+                               0.5849056603773580,
+                               0.5849056603773580,
+                               0.5818181818181820,
+                               0.5818181818181820,
+                               0.5818181818181820,
+                               0.5818181818181820,
+                               0.5818181818181820,
+                               0.5925925925925930,
+                               0.6037735849056600,
+                               0.6037735849056600,
+                               0.6037735849056600,
+                               0.5925925925925930,
+                               0.5925925925925930,
+                               0.5925925925925930,
+                               0.6000000000000000,
+                               0.5892857142857140,
+                               0.5892857142857140,
+                               0.5964912280701750,
+                               0.5964912280701750,
+                               0.5964912280701750,
+                               0.5964912280701750,
+                               0.5964912280701750,
+                               0.5964912280701750,
+                               0.5964912280701750,
+                               0.5964912280701750,
+                               0.5892857142857140,
+                               0.5892857142857140,
+                               0.5892857142857140,
+                               0.5892857142857140,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6071428571428570,
+                               0.6181818181818180,
+                               0.6181818181818180,
+                               0.6181818181818180,
+                               0.6181818181818180,
+                               0.6181818181818180,
+                               0.6296296296296300,
+                               0.6181818181818180,
+                               0.6181818181818180,
+                               0.6181818181818180,
+                               0.6111111111111110,
+                               0.6037735849056600,
+                               0.5925925925925930,
+                               0.5925925925925930,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6111111111111110,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6111111111111110,
+                               0.6111111111111110,
+                               0.6111111111111110,
+                               0.6111111111111110,
+                               0.6037735849056600,
+                               0.6037735849056600,
+                               0.6037735849056600,
+                               0.5925925925925930,
+                               0.6000000000000000,
+                               0.6037735849056600,
+                               0.6153846153846150,
+                               0.6153846153846150,
+                               0.6274509803921570,
+                               0.6274509803921570,
+                               0.6346153846153850,
+                               0.6346153846153850,
+                               0.6226415094339620,
+                               0.6226415094339620,
+                               0.6296296296296300,
+                               0.6296296296296300,
+                               0.6296296296296300,
+                               0.6415094339622640,
+                               0.6226415094339620,
+                               0.6226415094339620,
+                               0.6346153846153850,
+                               0.6346153846153850,
+                               0.6346153846153850,
+                               0.6346153846153850,
+                               0.6400000000000000,
+                               0.6400000000000000,
+                               0.6400000000000000,
+                               0.6400000000000000,
+                               0.6400000000000000,
+                               0.6400000000000000,
+                               0.6470588235294120,
+                               0.6470588235294120,
+                               0.6470588235294120,
+                               0.6470588235294120,
+                               0.6470588235294120,
+                               0.6415094339622640,
+                               0.6415094339622640,
+                               0.6415094339622640,
+                               0.6481481481481480,
+                               0.6481481481481480,
+                               0.6481481481481480,
+                               0.6481481481481480,
+                               0.6415094339622640,
+                               0.6415094339622640,
+                               0.6296296296296300,
+                               0.6296296296296300,
+                               0.6296296296296300,
+                               0.6481481481481480,
+                               0.6545454545454550,
+                               0.6545454545454550,
+                               0.6428571428571430,
+                               0.6428571428571430,
+                               0.6428571428571430,
+                               0.6428571428571430,
+                               0.6491228070175440,
+                               0.6491228070175440,
+                               0.6491228070175440,
+                               0.6491228070175440,
+                               0.6607142857142860,
+                               0.6666666666666670,
+                               0.6603773584905660,
+                               0.6538461538461540,
+                               0.6538461538461540,
+                               0.6538461538461540,
+                               0.6470588235294120,
+                               0.6346153846153850,
+                               0.6346153846153850,
+                               0.6346153846153850,
+                               0.6346153846153850,
+                               0.6346153846153850,
+                               0.6470588235294120,
+                               0.6470588235294120,
+                               0.6734693877551020,
+                               0.6734693877551020,
+                               0.6734693877551020,
+                               0.6734693877551020,
+                               0.6734693877551020,
+                               0.6666666666666670,
+                               0.6734693877551020,
+                               0.6734693877551020,
+                               0.6734693877551020,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6530612244897960,
+                               0.6530612244897960,
+                               0.6530612244897960,
+                               0.6530612244897960,
+                               0.6530612244897960,
+                               0.6458333333333330,
+                               0.6458333333333330,
+                               0.6458333333333330,
+                               0.6458333333333330,
+                               0.6458333333333330,
+                               0.6458333333333330,
+                               0.6458333333333330,
+                               0.6458333333333330,
+                               0.6458333333333330,
+                               0.6458333333333330,
+                               0.6458333333333330,
+                               0.6326530612244900,
+                               0.6326530612244900,
+                               0.6326530612244900,
+                               0.6200000000000000,
+                               0.6326530612244900,
+                               0.6326530612244900,
+                               0.6326530612244900,
+                               0.6400000000000000,
+                               0.6400000000000000,
+                               0.6470588235294120,
+                               0.6470588235294120,
+                               0.6470588235294120,
+                               0.6470588235294120,
+                               0.6346153846153850,
+                               0.6346153846153850,
+                               0.6200000000000000,
+                               0.6200000000000000,
+                               0.6200000000000000,
+                               0.6200000000000000,
+                               0.6200000000000000,
+                               0.6326530612244900,
+                               0.6530612244897960,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6530612244897960,
+                               0.6600000000000000,
+                               0.6600000000000000,
+                               0.6470588235294120,
+                               0.6470588235294120,
+                               0.6470588235294120,
+                               0.6470588235294120,
+                               0.6470588235294120,
+                               0.6400000000000000,
+                               0.6400000000000000,
+                               0.6530612244897960,
+                               0.6530612244897960,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6530612244897960,
+                               0.6530612244897960,
+                               0.6530612244897960,
+                               0.6530612244897960,
+                               0.6400000000000000,
+                               0.6274509803921570,
+                               0.6153846153846150,
+                               0.6153846153846150,
+                               0.6153846153846150,
+                               0.6153846153846150,
+                               0.6037735849056600,
+                               0.6037735849056600,
+                               0.5961538461538460,
+                               0.6037735849056600,
+                               0.6037735849056600,
+                               0.6037735849056600,
+                               0.6037735849056600,
+                               0.5961538461538460,
+                               0.5740740740740740,
+                               0.5740740740740740,
+                               0.5740740740740740,
+                               0.5740740740740740,
+                               0.5849056603773580,
+                               0.5849056603773580,
+                               0.5849056603773580,
+                               0.5849056603773580,
+                               0.5849056603773580,
+                               0.5849056603773580,
+                               0.5849056603773580,
+                               0.6000000000000000,
+                               0.6181818181818180,
+                               0.6181818181818180,
+                               0.6111111111111110,
+                               0.6111111111111110,
+                               0.6111111111111110,
+                               0.6111111111111110,
+                               0.6037735849056600,
+                               0.6111111111111110,
+                               0.6111111111111110,
+                               0.6111111111111110,
+                               0.6111111111111110,
+                               0.6111111111111110,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6111111111111110,
+                               0.6296296296296300,
+                               0.6296296296296300,
+                               0.6296296296296300,
+                               0.6296296296296300,
+                               0.6296296296296300,
+                               0.6296296296296300,
+                               0.6296296296296300,
+                               0.6415094339622640,
+                               0.6415094339622640,
+                               0.6415094339622640,
+                               0.6415094339622640,
+                               0.6415094339622640,
+                               0.6415094339622640,
+                               0.6415094339622640,
+                               0.6415094339622640,
+                               0.6415094339622640,
+                               0.6415094339622640,
+                               0.6415094339622640,
+                               0.6226415094339620,
+                               0.6226415094339620,
+                               0.6037735849056600,
+                               0.6037735849056600,
+                               0.6111111111111110,
+                               0.6181818181818180,
+                               0.6071428571428570,
+                               0.5964912280701750,
+                               0.5964912280701750,
+                               0.5964912280701750,
+                               0.5862068965517240,
+                               0.5862068965517240,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.5892857142857140,
+                               0.5892857142857140,
+                               0.5892857142857140,
+                               0.5892857142857140,
+                               0.5892857142857140,
+                               0.5892857142857140,
+                               0.5892857142857140,
+                               0.5892857142857140,
+                               0.5892857142857140,
+                               0.5892857142857140,
+                               0.5789473684210530,
+                               0.5892857142857140,
+                               0.5892857142857140,
+                               0.5892857142857140,
+                               0.5892857142857140,
+                               0.5892857142857140,
+                               0.5892857142857140,
+                               0.5789473684210530,
+                               0.5892857142857140,
+                               0.5892857142857140,
+                               0.5892857142857140,
+                               0.5892857142857140,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6111111111111110,
+                               0.6181818181818180,
+                               0.6181818181818180,
+                               0.6415094339622640,
+                               0.6415094339622640,
+                               0.6538461538461540,
+                               0.6538461538461540,
+                               0.6862745098039220,
+                               0.7000000000000000,
+                               0.6862745098039220,
+                               0.6862745098039220,
+                               0.6862745098039220,
+                               0.6862745098039220,
+                               0.7000000000000000,
+                               0.7000000000000000,
+                               0.7000000000000000,
+                               0.7000000000000000,
+                               0.7000000000000000,
+                               0.7000000000000000,
+                               0.7200000000000000,
+                               0.7346938775510200,
+                               0.6923076923076920,
+                               0.6923076923076920,
+                               0.6923076923076920,
+                               0.6923076923076920,
+                               0.7058823529411760,
+                               0.7058823529411760,
+                               0.7058823529411760,
+                               0.7058823529411760,
+                               0.7058823529411760,
+                               0.7058823529411760,
+                               0.6792452830188680,
+                               0.6792452830188680,
+                               0.6792452830188680,
+                               0.6792452830188680,
+                               0.6792452830188680,
+                               0.6792452830188680,
+                               0.6909090909090910,
+                               0.6909090909090910,
+                               0.7037037037037040,
+                               0.7037037037037040,
+                               0.7037037037037040,
+                               0.7037037037037040,
+                               0.7037037037037040,
+                               0.7037037037037040,
+                               0.7037037037037040,
+                               0.7037037037037040,
+                               0.7037037037037040,
+                               0.7037037037037040,
+                               0.7037037037037040,
+                               0.7090909090909090,
+                               0.7222222222222220,
+                               0.7358490566037730,
+                               0.7222222222222220,
+                               0.7222222222222220,
+                               0.7272727272727270,
+                               0.7142857142857140,
+                               0.7192982456140350,
+                               0.7241379310344830,
+                               0.7241379310344830,
+                               0.7241379310344830,
+                               0.7241379310344830,
+                               0.7241379310344830,
+                               0.7368421052631580,
+                               0.7368421052631580,
+                               0.7368421052631580,
+                               0.7413793103448280,
+                               0.7543859649122810,
+                               0.7543859649122810,
+                               0.7543859649122810,
+                               0.7543859649122810,
+                               0.7678571428571430,
+                               0.7678571428571430,
+                               0.7678571428571430,
+                               0.7678571428571430,
+                               0.7719298245614030,
+                               0.7719298245614030,
+                               0.7758620689655170,
+                               0.7758620689655170,
+                               0.7758620689655170,
+                               0.7758620689655170,
+                               0.7719298245614030,
+                               0.7719298245614030,
+                               0.7719298245614030,
+                               0.7719298245614030,
+                               0.7719298245614030,
+                               0.7719298245614030,
+                               0.7719298245614030,
+                               0.7719298245614030,
+                               0.7857142857142860,
+                               0.7857142857142860,
+                               0.7931034482758620,
+                               0.7931034482758620,
+                               0.7931034482758620,
+                               0.7931034482758620,
+                               0.8070175438596490,
+                               0.8070175438596490,
+                               0.8070175438596490,
+                               0.8070175438596490,
+                               0.8070175438596490,
+                               0.8070175438596490,
+                               0.8070175438596490,
+                               0.8070175438596490,
+                               0.8070175438596490,
+                               0.8070175438596490,
+                               0.8070175438596490,
+                               0.8070175438596490,
+                               0.8070175438596490,
+                               0.8070175438596490,
+                               0.8070175438596490,
+                               0.8070175438596490,
+                               0.8070175438596490,
+                               0.8070175438596490,
+                               0.8070175438596490,
+                               0.8070175438596490,
+                               0.8070175438596490,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8070175438596490,
+                               0.8070175438596490,
+                               0.8070175438596490,
+                               0.8070175438596490,
+                               0.8035714285714290,
+                               0.8035714285714290,
+                               0.8035714285714290,
+                               0.8035714285714290,
+                               0.8035714285714290,
+                               0.8035714285714290,
+                               0.8035714285714290,
+                               0.8035714285714290,
+                               0.8035714285714290,
+                               0.8035714285714290,
+                               0.8035714285714290,
+                               0.8035714285714290,
+                               0.8035714285714290,
+                               0.8035714285714290,
+                               0.8035714285714290,
+                               0.8035714285714290,
+                               0.8035714285714290,
+                               0.8035714285714290,
+                               0.8035714285714290,
+                               0.8035714285714290,
+                               0.8181818181818180,
+                               0.8181818181818180,
+                               0.8181818181818180,
+                               0.8181818181818180,
+                               0.8181818181818180,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8245614035087720,
+                               0.8245614035087720,
+                               0.8245614035087720,
+                               0.8245614035087720,
+                               0.8245614035087720,
+                               0.8245614035087720,
+                               0.8245614035087720,
+                               0.8245614035087720,
+                               0.8245614035087720,
+                               0.8245614035087720,
+                               0.8245614035087720,
+                               0.8245614035087720,
+                               0.8245614035087720,
+                               0.8245614035087720,
+                               0.8103448275862070,
+                               0.8103448275862070,
+                               0.8103448275862070,
+                               0.8103448275862070,
+                               0.8103448275862070,
+                               0.8103448275862070,
+                               0.8245614035087720,
+                               0.8245614035087720,
+                               0.8245614035087720,
+                               0.8245614035087720,
+                               0.8245614035087720,
+                               0.8245614035087720,
+                               0.8245614035087720,
+                               0.8245614035087720,
+                               0.8245614035087720,
+                               0.8245614035087720,
+                               0.8245614035087720,
+                               0.8245614035087720,
+                               0.8275862068965520,
+                               0.8275862068965520,
+                               0.8275862068965520,
+                               0.8275862068965520,
+                               0.8275862068965520,
+                               0.8275862068965520,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8363636363636360,
+                               0.8333333333333330,
+                               0.8333333333333330,
+                               0.8333333333333330,
+                               0.8333333333333330,
+                               0.8301886792452830,
+                               0.8301886792452830,
+                               0.8301886792452830,
+                               0.8301886792452830,
+                               0.8301886792452830,
+                               0.8301886792452830,
+                               0.8301886792452830,
+                               0.8301886792452830,
+                               0.8301886792452830,
+                               0.8301886792452830,
+                               0.8301886792452830,
+                               0.8301886792452830,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8235294117647060,
+                               0.8235294117647060,
+                               0.8235294117647060,
+                               0.8235294117647060,
+                               0.8235294117647060,
+                               0.8235294117647060,
+                               0.8235294117647060,
+                               0.8235294117647060,
+                               0.8235294117647060,
+                               0.8235294117647060,
+                               0.8235294117647060,
+                               0.8235294117647060,
+                               0.8235294117647060,
+                               0.8235294117647060,
+                               0.8235294117647060,
+                               0.8235294117647060,
+                               0.8235294117647060,
+                               0.8235294117647060,
+                               0.8400000000000000,
+                               0.8400000000000000,
+                               0.8400000000000000,
+                               0.8400000000000000,
+                               0.8400000000000000,
+                               0.8400000000000000,
+                               0.8431372549019610,
+                               0.8431372549019610,
+                               0.8431372549019610,
+                               0.8431372549019610,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8775510204081630,
+                               0.8775510204081630,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8775510204081630,
+                               0.8775510204081630,
+                               0.8775510204081630,
+                               0.8775510204081630,
+                               0.8936170212765960,
+                               0.8936170212765960,
+                               0.8936170212765960,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8775510204081630,
+                               0.8775510204081630,
+                               0.8775510204081630,
+                               0.8775510204081630,
+                               0.8775510204081630,
+                               0.8775510204081630,
+                               0.8775510204081630,
+                               0.8775510204081630,
+                               0.8775510204081630,
+                               0.8775510204081630,
+                               0.8775510204081630,
+                               0.8775510204081630,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8260869565217390,
+                               0.8260869565217390,
+                               0.8260869565217390,
+                               0.8260869565217390,
+                               0.8222222222222220,
+                               0.8043478260869560,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7755102040816330,
+                               0.7755102040816330,
+                               0.7755102040816330,
+                               0.7755102040816330,
+                               0.7755102040816330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7551020408163260,
+                               0.7551020408163260,
+                               0.7551020408163260,
+                               0.7551020408163260,
+                               0.7551020408163260,
+                               0.7551020408163260,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7346938775510200,
+                               0.7346938775510200,
+                               0.7291666666666670,
+                               0.7291666666666670,
+                               0.7291666666666670,
+                               0.7291666666666670,
+                               0.7291666666666670,
+                               0.7291666666666670,
+                               0.7291666666666670,
+                               0.7291666666666670,
+                               0.7291666666666670,
+                               0.7234042553191490,
+                               0.7083333333333330,
+                               0.7021276595744680,
+                               0.6875000000000000,
+                               0.6734693877551020,
+                               0.6734693877551020,
+                               0.6666666666666670,
+                               0.6808510638297870,
+                               0.6808510638297870,
+                               0.6739130434782610,
+                               0.6739130434782610,
+                               0.6739130434782610,
+                               0.6739130434782610,
+                               0.6666666666666670,
+                               0.6818181818181820,
+                               0.6818181818181820,
+                               0.6818181818181820,
+                               0.6818181818181820,
+                               0.6666666666666670,
+                               0.6739130434782610,
+                               0.6956521739130430,
+                               0.6956521739130430,
+                               0.7045454545454550,
+                               0.7045454545454550,
+                               0.7045454545454550,
+                               0.7209302325581400,
+                               0.7333333333333330,
+                               0.7333333333333330,
+                               0.7173913043478260,
+                               0.7173913043478260,
+                               0.7111111111111110,
+                               0.7111111111111110,
+                               0.7272727272727270,
+                               0.7441860465116280,
+                               0.7441860465116280,
+                               0.7441860465116280,
+                               0.7500000000000000,
+                               0.7333333333333330,
+                               0.7391304347826090,
+                               0.7391304347826090,
+                               0.7446808510638300,
+                               0.7446808510638300,
+                               0.7291666666666670,
+                               0.7500000000000000,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7551020408163260,
+                               0.7551020408163260,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7551020408163260,
+                               0.7551020408163260,
+                               0.7600000000000000,
+                               0.7600000000000000,
+                               0.7450980392156860,
+                               0.7450980392156860,
+                               0.7600000000000000,
+                               0.7600000000000000,
+                               0.7600000000000000,
+                               0.7600000000000000,
+                               0.7551020408163260,
+                               0.7551020408163260,
+                               0.7551020408163260,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7346938775510200,
+                               0.7346938775510200,
+                               0.7346938775510200,
+                               0.7346938775510200,
+                               0.7346938775510200,
+                               0.7200000000000000,
+                               0.7346938775510200,
+                               0.7346938775510200,
+                               0.7200000000000000,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7551020408163260,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7446808510638300,
+                               0.7391304347826090,
+                               0.7391304347826090,
+                               0.7391304347826090,
+                               0.7391304347826090,
+                               0.7391304347826090,
+                               0.7446808510638300,
+                               0.7291666666666670,
+                               0.7291666666666670,
+                               0.7291666666666670,
+                               0.7291666666666670,
+                               0.7291666666666670,
+                               0.7291666666666670,
+                               0.7291666666666670,
+                               0.7346938775510200,
+                               0.7346938775510200,
+                               0.7346938775510200,
+                               0.7346938775510200,
+                               0.7346938775510200,
+                               0.7200000000000000,
+                               0.7200000000000000,
+                               0.7200000000000000,
+                               0.7200000000000000,
+                               0.7200000000000000,
+                               0.7142857142857140,
+                               0.7083333333333330,
+                               0.7083333333333330,
+                               0.7083333333333330,
+                               0.7083333333333330,
+                               0.7083333333333330,
+                               0.7142857142857140,
+                               0.7083333333333330,
+                               0.7083333333333330,
+                               0.6938775510204080,
+                               0.6938775510204080,
+                               0.7021276595744680,
+                               0.7021276595744680,
+                               0.7173913043478260,
+                               0.7173913043478260,
+                               0.7272727272727270,
+                               0.7272727272727270,
+                               0.7111111111111110,
+                               0.6956521739130430,
+                               0.6956521739130430,
+                               0.6956521739130430,
+                               0.6956521739130430,
+                               0.6956521739130430,
+                               0.6808510638297870,
+                               0.6739130434782610,
+                               0.6739130434782610,
+                               0.6739130434782610,
+                               0.6739130434782610,
+                               0.6739130434782610,
+                               0.6739130434782610,
+                               0.6739130434782610,
+                               0.6739130434782610,
+                               0.6739130434782610,
+                               0.6739130434782610,
+                               0.6739130434782610,
+                               0.6739130434782610,
+                               0.6888888888888890,
+                               0.6818181818181820,
+                               0.6818181818181820,
+                               0.6818181818181820,
+                               0.6818181818181820,
+                               0.6976744186046510,
+                               0.6976744186046510,
+                               0.7209302325581400,
+                               0.7142857142857140,
+                               0.6976744186046510,
+                               0.6976744186046510,
+                               0.6976744186046510,
+                               0.6818181818181820,
+                               0.6666666666666670,
+                               0.6382978723404260,
+                               0.6122448979591840,
+                               0.6122448979591840,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.5882352941176470,
+                               0.5882352941176470,
+                               0.5882352941176470,
+                               0.5882352941176470,
+                               0.6000000000000000,
+                               0.6122448979591840,
+                               0.6250000000000000,
+                               0.6250000000000000,
+                               0.6250000000000000,
+                               0.6250000000000000,
+                               0.6122448979591840,
+                               0.6122448979591840,
+                               0.6200000000000000,
+                               0.6200000000000000,
+                               0.6326530612244900,
+                               0.6326530612244900,
+                               0.6326530612244900,
+                               0.6326530612244900,
+                               0.6326530612244900,
+                               0.6326530612244900,
+                               0.6326530612244900,
+                               0.6458333333333330,
+                               0.6595744680851060,
+                               0.6595744680851060,
+                               0.6595744680851060,
+                               0.6595744680851060,
+                               0.6595744680851060,
+                               0.6595744680851060,
+                               0.6595744680851060,
+                               0.6595744680851060,
+                               0.6595744680851060,
+                               0.6595744680851060,
+                               0.6595744680851060,
+                               0.6521739130434780,
+                               0.6521739130434780,
+                               0.6521739130434780,
+                               0.6595744680851060,
+                               0.6739130434782610,
+                               0.6739130434782610,
+                               0.6739130434782610,
+                               0.6739130434782610,
+                               0.6808510638297870,
+                               0.6808510638297870,
+                               0.6956521739130430,
+                               0.7272727272727270,
+                               0.7272727272727270,
+                               0.7272727272727270,
+                               0.7272727272727270,
+                               0.7272727272727270,
+                               0.7272727272727270,
+                               0.7272727272727270,
+                               0.7272727272727270,
+                               0.7111111111111110,
+                               0.7111111111111110,
+                               0.7173913043478260,
+                               0.7111111111111110,
+                               0.7111111111111110,
+                               0.6956521739130430,
+                               0.6808510638297870,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6590909090909090,
+                               0.6590909090909090,
+                               0.6590909090909090,
+                               0.6590909090909090,
+                               0.6590909090909090,
+                               0.6444444444444440,
+                               0.6444444444444440,
+                               0.6444444444444440,
+                               0.6444444444444440,
+                               0.6444444444444440,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6521739130434780,
+                               0.6521739130434780,
+                               0.6521739130434780,
+                               0.6444444444444440,
+                               0.6521739130434780,
+                               0.6521739130434780,
+                               0.6382978723404260,
+                               0.6382978723404260,
+                               0.6382978723404260,
+                               0.6382978723404260,
+                               0.6521739130434780,
+                               0.6382978723404260,
+                               0.6382978723404260,
+                               0.6521739130434780,
+                               0.6521739130434780,
+                               0.6595744680851060,
+                               0.6595744680851060,
+                               0.6595744680851060,
+                               0.6595744680851060,
+                               0.6595744680851060,
+                               0.6595744680851060,
+                               0.6458333333333330,
+                               0.6458333333333330,
+                               0.6382978723404260,
+                               0.6382978723404260,
+                               0.6382978723404260,
+                               0.6382978723404260,
+                               0.6458333333333330,
+                               0.6400000000000000,
+                               0.6400000000000000,
+                               0.6400000000000000,
+                               0.6274509803921570,
+                               0.6274509803921570,
+                               0.6274509803921570,
+                               0.6200000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6122448979591840,
+                               0.6122448979591840,
+                               0.6122448979591840,
+                               0.6122448979591840,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6122448979591840,
+                               0.6122448979591840,
+                               0.6250000000000000,
+                               0.6250000000000000,
+                               0.6304347826086960,
+                               0.6304347826086960,
+                               0.6304347826086960,
+                               0.6304347826086960,
+                               0.6444444444444440,
+                               0.6444444444444440,
+                               0.6304347826086960,
+                               0.6304347826086960,
+                               0.6304347826086960,
+                               0.6304347826086960,
+                               0.6382978723404260,
+                               0.6304347826086960,
+                               0.6444444444444440,
+                               0.6590909090909090,
+                               0.6444444444444440,
+                               0.6444444444444440,
+                               0.6222222222222220,
+                               0.6136363636363640,
+                               0.6046511627906980,
+                               0.6046511627906980,
+                               0.6046511627906980,
+                               0.6046511627906980,
+                               0.6136363636363640,
+                               0.6136363636363640,
+                               0.6136363636363640,
+                               0.6136363636363640,
+                               0.6136363636363640,
+                               0.6136363636363640,
+                               0.6136363636363640,
+                               0.6136363636363640,
+                               0.6222222222222220,
+                               0.6222222222222220,
+                               0.6222222222222220,
+                               0.6222222222222220,
+                               0.6222222222222220,
+                               0.6222222222222220,
+                               0.6222222222222220,
+                               0.6222222222222220,
+                               0.6222222222222220,
+                               0.6222222222222220,
+                               0.6222222222222220,
+                               0.6222222222222220,
+                               0.6086956521739130,
+                               0.6086956521739130,
+                               0.6086956521739130,
+                               0.6086956521739130,
+                               0.6363636363636360,
+                               0.6222222222222220,
+                               0.6222222222222220,
+                               0.6222222222222220,
+                               0.6222222222222220,
+                               0.6222222222222220,
+                               0.6222222222222220,
+                               0.6363636363636360,
+                               0.6363636363636360,
+                               0.6363636363636360,
+                               0.6363636363636360,
+                               0.6363636363636360,
+                               0.6444444444444440,
+                               0.6444444444444440,
+                               0.6444444444444440,
+                               0.6444444444444440,
+                               0.6590909090909090,
+                               0.6590909090909090,
+                               0.6744186046511630,
+                               0.6744186046511630,
+                               0.6744186046511630,
+                               0.6744186046511630,
+                               0.6585365853658540,
+                               0.6829268292682930,
+                               0.6904761904761900,
+                               0.6744186046511630,
+                               0.6744186046511630,
+                               0.6744186046511630,
+                               0.6904761904761900,
+                               0.6904761904761900,
+                               0.6744186046511630,
+                               0.6744186046511630,
+                               0.6904761904761900,
+                               0.6904761904761900,
+                               0.6904761904761900,
+                               0.6744186046511630,
+                               0.6744186046511630,
+                               0.6744186046511630,
+                               0.6744186046511630,
+                               0.6744186046511630,
+                               0.6904761904761900,
+                               0.6904761904761900,
+                               0.6744186046511630,
+                               0.6744186046511630,
+                               0.6590909090909090,
+                               0.6590909090909090,
+                               0.6444444444444440,
+                               0.6444444444444440,
+                               0.6444444444444440,
+                               0.6444444444444440,
+                               0.6444444444444440,
+                               0.6590909090909090,
+                               0.6590909090909090,
+                               0.6511627906976740,
+                               0.6363636363636360,
+                               0.6363636363636360,
+                               0.6363636363636360,
+                               0.6363636363636360,
+                               0.6363636363636360,
+                               0.6086956521739130,
+                               0.6086956521739130,
+                               0.6086956521739130,
+                               0.6086956521739130,
+                               0.6086956521739130,
+                               0.6086956521739130,
+                               0.6086956521739130,
+                               0.6086956521739130,
+                               0.6086956521739130,
+                               0.6086956521739130,
+                               0.6086956521739130,
+                               0.6086956521739130,
+                               0.6170212765957450,
+                               0.6086956521739130,
+                               0.6086956521739130,
+                               0.6086956521739130,
+                               0.6086956521739130,
+                               0.5957446808510640,
+                               0.5957446808510640,
+                               0.5957446808510640,
+                               0.6086956521739130,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6136363636363640,
+                               0.6363636363636360,
+                               0.6363636363636360,
+                               0.6363636363636360,
+                               0.6363636363636360,
+                               0.6511627906976740,
+                               0.6511627906976740,
+                               0.6511627906976740,
+                               0.6590909090909090,
+                               0.6744186046511630,
+                               0.6744186046511630,
+                               0.6818181818181820,
+                               0.6818181818181820,
+                               0.6888888888888890,
+                               0.6888888888888890,
+                               0.6888888888888890,
+                               0.6739130434782610,
+                               0.6595744680851060,
+                               0.6595744680851060,
+                               0.6739130434782610,
+                               0.6976744186046510,
+                               0.6818181818181820,
+                               0.6888888888888890,
+                               0.6888888888888890,
+                               0.6956521739130430,
+                               0.6956521739130430,
+                               0.6956521739130430,
+                               0.6956521739130430,
+                               0.6956521739130430,
+                               0.6888888888888890,
+                               0.6888888888888890,
+                               0.6888888888888890,
+                               0.6739130434782610,
+                               0.6739130434782610,
+                               0.6888888888888890,
+                               0.6888888888888890,
+                               0.6888888888888890,
+                               0.6888888888888890,
+                               0.6888888888888890,
+                               0.6888888888888890,
+                               0.6739130434782610,
+                               0.6888888888888890,
+                               0.6888888888888890,
+                               0.7045454545454550,
+                               0.7045454545454550,
+                               0.7045454545454550,
+                               0.7045454545454550,
+                               0.6739130434782610,
+                               0.6808510638297870,
+                               0.6808510638297870,
+                               0.6808510638297870,
+                               0.6808510638297870,
+                               0.6808510638297870,
+                               0.6875000000000000,
+                               0.6875000000000000,
+                               0.6875000000000000,
+                               0.6875000000000000,
+                               0.7021276595744680,
+                               0.7173913043478260,
+                               0.7173913043478260,
+                               0.7234042553191490,
+                               0.7021276595744680,
+                               0.7021276595744680,
+                               0.7083333333333330,
+                               0.7234042553191490,
+                               0.7234042553191490,
+                               0.7234042553191490,
+                               0.7234042553191490,
+                               0.7083333333333330,
+                               0.7083333333333330,
+                               0.6938775510204080,
+                               0.6938775510204080,
+                               0.6938775510204080,
+                               0.6938775510204080,
+                               0.7083333333333330,
+                               0.7083333333333330,
+                               0.7083333333333330,
+                               0.7083333333333330,
+                               0.7291666666666670,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7659574468085110,
+                               0.7659574468085110,
+                               0.7826086956521740,
+                               0.7826086956521740,
+                               0.8043478260869560,
+                               0.8043478260869560,
+                               0.8043478260869560,
+                               0.8043478260869560,
+                               0.7826086956521740,
+                               0.7826086956521740,
+                               0.8000000000000000,
+                               0.8000000000000000,
+                               0.7826086956521740,
+                               0.7826086956521740,
+                               0.8043478260869560,
+                               0.8043478260869560,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7708333333333330,
+                               0.7755102040816330,
+                               0.7916666666666670,
+                               0.8085106382978720,
+                               0.8085106382978720,
+                               0.8125000000000000,
+                               0.8085106382978720,
+                               0.8085106382978720,
+                               0.8085106382978720,
+                               0.8085106382978720,
+                               0.8085106382978720,
+                               0.8260869565217390,
+                               0.8297872340425530,
+                               0.8333333333333330,
+                               0.8333333333333330,
+                               0.8333333333333330,
+                               0.8333333333333330,
+                               0.8163265306122450,
+                               0.8125000000000000,
+                               0.8085106382978720,
+                               0.8085106382978720,
+                               0.8260869565217390,
+                               0.8260869565217390,
+                               0.8260869565217390,
+                               0.8260869565217390,
+                               0.8260869565217390,
+                               0.8260869565217390,
+                               0.8260869565217390,
+                               0.8260869565217390,
+                               0.8260869565217390,
+                               0.8260869565217390,
+                               0.8222222222222220,
+                               0.8297872340425530,
+                               0.8297872340425530,
+                               0.8297872340425530,
+                               0.8297872340425530,
+                               0.8297872340425530,
+                               0.8125000000000000,
+                               0.8125000000000000,
+                               0.8125000000000000,
+                               0.8125000000000000,
+                               0.8125000000000000,
+                               0.8125000000000000,
+                               0.8125000000000000,
+                               0.8125000000000000,
+                               0.8163265306122450,
+                               0.8163265306122450,
+                               0.8333333333333330,
+                               0.8333333333333330,
+                               0.8333333333333330,
+                               0.8541666666666670,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8541666666666670,
+                               0.8541666666666670,
+                               0.8541666666666670,
+                               0.8723404255319150,
+                               0.8723404255319150,
+                               0.8723404255319150,
+                               0.8723404255319150,
+                               0.8723404255319150,
+                               0.8723404255319150,
+                               0.8723404255319150,
+                               0.8723404255319150,
+                               0.8723404255319150,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8775510204081630,
+                               0.8775510204081630,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8775510204081630,
+                               0.8775510204081630,
+                               0.8775510204081630,
+                               0.8775510204081630,
+                               0.8775510204081630,
+                               0.8775510204081630,
+                               0.8958333333333330,
+                               0.8958333333333330,
+                               0.8958333333333330,
+                               0.8958333333333330,
+                               0.8958333333333330,
+                               0.8979591836734690,
+                               0.8979591836734690,
+                               0.8979591836734690,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9019607843137260,
+                               0.9019607843137260,
+                               0.9019607843137260,
+                               0.9019607843137260,
+                               0.9019607843137260,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.8979591836734690,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9019607843137260,
+                               0.9019607843137260,
+                               0.9019607843137260,
+                               0.9019607843137260,
+                               0.9019607843137260,
+                               0.9019607843137260,
+                               0.9019607843137260,
+                               0.9019607843137260,
+                               0.9019607843137260,
+                               0.9200000000000000,
+                               0.9200000000000000,
+                               0.9200000000000000,
+                               0.9200000000000000,
+                               0.9200000000000000,
+                               0.9200000000000000,
+                               0.9200000000000000,
+                               0.9200000000000000,
+                               0.9200000000000000,
+                               0.9200000000000000,
+                               0.9200000000000000,
+                               0.9200000000000000,
+                               0.9200000000000000,
+                               0.9200000000000000,
+                               0.9200000000000000,
+                               0.9183673469387750,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9019607843137260,
+                               0.9019607843137260,
+                               0.9038461538461540,
+                               0.9038461538461540,
+                               0.9038461538461540,
+                               0.9038461538461540,
+                               0.9038461538461540,
+                               0.9038461538461540,
+                               0.9056603773584910,
+                               0.9074074074074070,
+                               0.9074074074074070,
+                               0.9074074074074070,
+                               0.9074074074074070,
+                               0.9074074074074070,
+                               0.9074074074074070,
+                               0.9074074074074070,
+                               0.9074074074074070,
+                               0.9074074074074070,
+                               0.9074074074074070,
+                               0.9074074074074070,
+                               0.9074074074074070,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9074074074074070,
+                               0.9074074074074070,
+                               0.9074074074074070,
+                               0.9074074074074070,
+                               0.9074074074074070,
+                               0.9074074074074070,
+                               0.9074074074074070,
+                               0.9074074074074070,
+                               0.9074074074074070,
+                               0.9074074074074070,
+                               0.9074074074074070,
+                               0.9074074074074070,
+                               0.9090909090909090,
+                               0.9259259259259260,
+                               0.9272727272727270,
+                               0.9272727272727270,
+                               0.9272727272727270,
+                               0.9285714285714290,
+                               0.9454545454545450,
+                               0.9454545454545450,
+                               0.9464285714285710,
+                               0.9464285714285710,
+                               0.9636363636363640,
+                               0.9636363636363640,
+                               0.9636363636363640,
+                               0.9636363636363640,
+                               0.9636363636363640,
+                               0.9636363636363640,
+                               0.9636363636363640,
+                               0.9636363636363640,
+                               0.9636363636363640,
+                               0.9636363636363640,
+                               0.9636363636363640,
+                               0.9636363636363640,
+                               0.9636363636363640,
+                               0.9636363636363640,
+                               0.9636363636363640,
+                               0.9636363636363640,
+                               0.9636363636363640,
+                               0.9636363636363640,
+                               0.9636363636363640,
+                               0.9636363636363640,
+                               0.9636363636363640,
+                               0.9636363636363640,
+                               0.9636363636363640,
+                               0.9636363636363640,
+                               0.9636363636363640,
+                               0.9636363636363640,
+                               0.9636363636363640,
+                               0.9636363636363640,
+                               0.9642857142857140,
+                               0.9642857142857140,
+                               0.9642857142857140,
+                               0.9642857142857140,
+                               0.9642857142857140,
+                               0.9642857142857140,
+                               0.9642857142857140,
+                               0.9642857142857140,
+                               0.9642857142857140,
+                               0.9649122807017540,
+                               0.9649122807017540,
+                               0.9649122807017540,
+                               0.9649122807017540,
+                               0.9649122807017540,
+                               0.9649122807017540,
+                               0.9649122807017540,
+                               0.9649122807017540,
+                               0.9655172413793100,
+                               0.9655172413793100,
+                               0.9655172413793100,
+                               0.9655172413793100,
+                               0.9824561403508770,
+                               0.9824561403508770,
+                               0.9824561403508770
+                       }
+               },
+               { PLACE_CATEG_ID_WORK,
+                       {
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0181818181818182,
+                               0.0181818181818182,
+                               0.0178571428571429,
+                               0.0178571428571429,
+                               0.0178571428571429,
+                               0.0178571428571429,
+                               0.0185185185185185,
+                               0.0185185185185185,
+                               0.0185185185185185,
+                               0.0185185185185185,
+                               0.0185185185185185,
+                               0.0185185185185185,
+                               0.0181818181818182,
+                               0.0181818181818182,
+                               0.0178571428571429,
+                               0.0178571428571429,
+                               0.0178571428571429,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0377358490566038,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0576923076923077,
+                               0.0576923076923077,
+                               0.0576923076923077,
+                               0.0576923076923077,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.1153846153846150,
+                               0.1153846153846150,
+                               0.1153846153846150,
+                               0.1153846153846150,
+                               0.1153846153846150,
+                               0.1153846153846150,
+                               0.1153846153846150,
+                               0.1153846153846150,
+                               0.1153846153846150,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1666666666666670,
+                               0.1666666666666670,
+                               0.1666666666666670,
+                               0.1666666666666670,
+                               0.1666666666666670,
+                               0.1698113207547170,
+                               0.1851851851851850,
+                               0.1851851851851850,
+                               0.1851851851851850,
+                               0.1886792452830190,
+                               0.1886792452830190,
+                               0.1886792452830190,
+                               0.2075471698113210,
+                               0.2075471698113210,
+                               0.2075471698113210,
+                               0.2075471698113210,
+                               0.2075471698113210,
+                               0.2075471698113210,
+                               0.2075471698113210,
+                               0.2075471698113210,
+                               0.2075471698113210,
+                               0.2075471698113210,
+                               0.2075471698113210,
+                               0.2115384615384620,
+                               0.2264150943396230,
+                               0.2264150943396230,
+                               0.2264150943396230,
+                               0.2264150943396230,
+                               0.2264150943396230,
+                               0.2545454545454540,
+                               0.2545454545454540,
+                               0.2545454545454540,
+                               0.2545454545454540,
+                               0.2545454545454540,
+                               0.2545454545454540,
+                               0.2641509433962260,
+                               0.2641509433962260,
+                               0.2641509433962260,
+                               0.2692307692307690,
+                               0.2800000000000000,
+                               0.2800000000000000,
+                               0.2916666666666670,
+                               0.2978723404255320,
+                               0.2978723404255320,
+                               0.2978723404255320,
+                               0.2978723404255320,
+                               0.2916666666666670,
+                               0.3200000000000000,
+                               0.3333333333333330,
+                               0.3461538461538460,
+                               0.3461538461538460,
+                               0.3461538461538460,
+                               0.3461538461538460,
+                               0.3529411764705880,
+                               0.3600000000000000,
+                               0.3600000000000000,
+                               0.3600000000000000,
+                               0.3725490196078430,
+                               0.3725490196078430,
+                               0.3725490196078430,
+                               0.3725490196078430,
+                               0.3725490196078430,
+                               0.3846153846153850,
+                               0.3846153846153850,
+                               0.4000000000000000,
+                               0.4117647058823530,
+                               0.4375000000000000,
+                               0.4375000000000000,
+                               0.4375000000000000,
+                               0.4375000000000000,
+                               0.4375000000000000,
+                               0.4489795918367350,
+                               0.4680851063829790,
+                               0.4680851063829790,
+                               0.4680851063829790,
+                               0.4680851063829790,
+                               0.5111111111111110,
+                               0.5217391304347830,
+                               0.5217391304347830,
+                               0.5217391304347830,
+                               0.5217391304347830,
+                               0.5217391304347830,
+                               0.5217391304347830,
+                               0.5319148936170210,
+                               0.5434782608695650,
+                               0.5434782608695650,
+                               0.5652173913043480,
+                               0.5652173913043480,
+                               0.5652173913043480,
+                               0.5652173913043480,
+                               0.5777777777777780,
+                               0.5777777777777780,
+                               0.5777777777777780,
+                               0.6086956521739130,
+                               0.6086956521739130,
+                               0.6086956521739130,
+                               0.6086956521739130,
+                               0.6086956521739130,
+                               0.6363636363636360,
+                               0.6363636363636360,
+                               0.6363636363636360,
+                               0.6363636363636360,
+                               0.6444444444444440,
+                               0.6444444444444440,
+                               0.6744186046511630,
+                               0.6818181818181820,
+                               0.6818181818181820,
+                               0.6818181818181820,
+                               0.6888888888888890,
+                               0.6888888888888890,
+                               0.6888888888888890,
+                               0.7045454545454550,
+                               0.7045454545454550,
+                               0.7045454545454550,
+                               0.7346938775510200,
+                               0.7346938775510200,
+                               0.7400000000000000,
+                               0.7450980392156860,
+                               0.7450980392156860,
+                               0.7450980392156860,
+                               0.7547169811320760,
+                               0.7547169811320760,
+                               0.7692307692307690,
+                               0.7692307692307690,
+                               0.7735849056603770,
+                               0.7735849056603770,
+                               0.7735849056603770,
+                               0.7735849056603770,
+                               0.7857142857142860,
+                               0.7857142857142860,
+                               0.7857142857142860,
+                               0.7857142857142860,
+                               0.8148148148148150,
+                               0.8148148148148150,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8275862068965520,
+                               0.8275862068965520,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8524590163934430,
+                               0.8524590163934430,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8947368421052630,
+                               0.8947368421052630,
+                               0.8947368421052630,
+                               0.8947368421052630,
+                               0.8947368421052630,
+                               0.8947368421052630,
+                               0.8965517241379310,
+                               0.8965517241379310,
+                               0.8983050847457630,
+                               0.8983050847457630,
+                               0.8983050847457630,
+                               0.8983050847457630,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8709677419354840,
+                               0.8709677419354840,
+                               0.8709677419354840,
+                               0.8709677419354840,
+                               0.8709677419354840,
+                               0.8709677419354840,
+                               0.8709677419354840,
+                               0.8709677419354840,
+                               0.8709677419354840,
+                               0.8709677419354840,
+                               0.8709677419354840,
+                               0.8709677419354840,
+                               0.8709677419354840,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8833333333333330,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8852459016393440,
+                               0.8870967741935480,
+                               0.8870967741935480,
+                               0.8870967741935480,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9016393442622950,
+                               0.9016393442622950,
+                               0.9016393442622950,
+                               0.9016393442622950,
+                               0.9016393442622950,
+                               0.8983050847457630,
+                               0.8983050847457630,
+                               0.8983050847457630,
+                               0.8983050847457630,
+                               0.8983050847457630,
+                               0.8983050847457630,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8666666666666670,
+                               0.8644067796610170,
+                               0.8666666666666670,
+                               0.8644067796610170,
+                               0.8644067796610170,
+                               0.8644067796610170,
+                               0.8644067796610170,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8333333333333330,
+                               0.8333333333333330,
+                               0.8333333333333330,
+                               0.8333333333333330,
+                               0.8360655737704920,
+                               0.8333333333333330,
+                               0.8333333333333330,
+                               0.8333333333333330,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8500000000000000,
+                               0.8500000000000000,
+                               0.8360655737704920,
+                               0.8360655737704920,
+                               0.8360655737704920,
+                               0.8360655737704920,
+                               0.8644067796610170,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8644067796610170,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8524590163934430,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8644067796610170,
+                               0.8644067796610170,
+                               0.8644067796610170,
+                               0.8644067796610170,
+                               0.8644067796610170,
+                               0.8644067796610170,
+                               0.8644067796610170,
+                               0.8644067796610170,
+                               0.8644067796610170,
+                               0.8500000000000000,
+                               0.8500000000000000,
+                               0.8500000000000000,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8771929824561400,
+                               0.8771929824561400,
+                               0.8771929824561400,
+                               0.8771929824561400,
+                               0.8771929824561400,
+                               0.8771929824561400,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8771929824561400,
+                               0.8771929824561400,
+                               0.8771929824561400,
+                               0.8833333333333330,
+                               0.8833333333333330,
+                               0.8833333333333330,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8833333333333330,
+                               0.8833333333333330,
+                               0.8813559322033900,
+                               0.8813559322033900,
+                               0.8813559322033900,
+                               0.8813559322033900,
+                               0.8833333333333330,
+                               0.8833333333333330,
+                               0.8833333333333330,
+                               0.8833333333333330,
+                               0.8833333333333330,
+                               0.8833333333333330,
+                               0.8833333333333330,
+                               0.8833333333333330,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8709677419354840,
+                               0.8709677419354840,
+                               0.8709677419354840,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8688524590163930,
+                               0.8833333333333330,
+                               0.8833333333333330,
+                               0.8833333333333330,
+                               0.8833333333333330,
+                               0.8833333333333330,
+                               0.8833333333333330,
+                               0.8813559322033900,
+                               0.8813559322033900,
+                               0.8813559322033900,
+                               0.8813559322033900,
+                               0.8813559322033900,
+                               0.8813559322033900,
+                               0.8793103448275860,
+                               0.8771929824561400,
+                               0.8771929824561400,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8448275862068960,
+                               0.8448275862068960,
+                               0.8448275862068960,
+                               0.8448275862068960,
+                               0.8596491228070170,
+                               0.8596491228070170,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8275862068965520,
+                               0.8275862068965520,
+                               0.8275862068965520,
+                               0.8245614035087720,
+                               0.8245614035087720,
+                               0.8245614035087720,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8214285714285710,
+                               0.8181818181818180,
+                               0.8181818181818180,
+                               0.8148148148148150,
+                               0.8148148148148150,
+                               0.8000000000000000,
+                               0.7962962962962960,
+                               0.7818181818181820,
+                               0.7777777777777780,
+                               0.7735849056603770,
+                               0.7692307692307690,
+                               0.7692307692307690,
+                               0.7692307692307690,
+                               0.7735849056603770,
+                               0.7735849056603770,
+                               0.7692307692307690,
+                               0.7547169811320760,
+                               0.7547169811320760,
+                               0.7547169811320760,
+                               0.7592592592592590,
+                               0.7454545454545450,
+                               0.7192982456140350,
+                               0.7192982456140350,
+                               0.7192982456140350,
+                               0.7192982456140350,
+                               0.7142857142857140,
+                               0.7142857142857140,
+                               0.7142857142857140,
+                               0.7142857142857140,
+                               0.7142857142857140,
+                               0.7142857142857140,
+                               0.7192982456140350,
+                               0.7068965517241380,
+                               0.7068965517241380,
+                               0.7017543859649120,
+                               0.7142857142857140,
+                               0.7142857142857140,
+                               0.7272727272727270,
+                               0.7222222222222220,
+                               0.7222222222222220,
+                               0.7090909090909090,
+                               0.7090909090909090,
+                               0.7090909090909090,
+                               0.7142857142857140,
+                               0.7142857142857140,
+                               0.7142857142857140,
+                               0.7017543859649120,
+                               0.7017543859649120,
+                               0.7017543859649120,
+                               0.6964285714285710,
+                               0.6964285714285710,
+                               0.6964285714285710,
+                               0.6964285714285710,
+                               0.6964285714285710,
+                               0.6964285714285710,
+                               0.6964285714285710,
+                               0.6964285714285710,
+                               0.7222222222222220,
+                               0.7222222222222220,
+                               0.7090909090909090,
+                               0.6964285714285710,
+                               0.7090909090909090,
+                               0.7090909090909090,
+                               0.6964285714285710,
+                               0.7090909090909090,
+                               0.7090909090909090,
+                               0.7090909090909090,
+                               0.7090909090909090,
+                               0.7090909090909090,
+                               0.7142857142857140,
+                               0.7142857142857140,
+                               0.7142857142857140,
+                               0.7142857142857140,
+                               0.7017543859649120,
+                               0.6785714285714290,
+                               0.6607142857142860,
+                               0.6491228070175440,
+                               0.6491228070175440,
+                               0.6428571428571430,
+                               0.6428571428571430,
+                               0.6428571428571430,
+                               0.6363636363636360,
+                               0.6363636363636360,
+                               0.6363636363636360,
+                               0.6363636363636360,
+                               0.6250000000000000,
+                               0.6250000000000000,
+                               0.6181818181818180,
+                               0.6181818181818180,
+                               0.6181818181818180,
+                               0.6181818181818180,
+                               0.6181818181818180,
+                               0.6111111111111110,
+                               0.6181818181818180,
+                               0.6181818181818180,
+                               0.6296296296296300,
+                               0.6296296296296300,
+                               0.6296296296296300,
+                               0.6111111111111110,
+                               0.6111111111111110,
+                               0.6226415094339620,
+                               0.6153846153846150,
+                               0.6153846153846150,
+                               0.6274509803921570,
+                               0.6037735849056600,
+                               0.5961538461538460,
+                               0.6078431372549020,
+                               0.6078431372549020,
+                               0.6078431372549020,
+                               0.5961538461538460,
+                               0.5882352941176470,
+                               0.5769230769230770,
+                               0.5769230769230770,
+                               0.5600000000000000,
+                               0.5510204081632650,
+                               0.5510204081632650,
+                               0.5510204081632650,
+                               0.5510204081632650,
+                               0.5400000000000000,
+                               0.5102040816326530,
+                               0.5102040816326530,
+                               0.5102040816326530,
+                               0.5102040816326530,
+                               0.5102040816326530,
+                               0.5000000000000000,
+                               0.4680851063829790,
+                               0.4680851063829790,
+                               0.4680851063829790,
+                               0.4680851063829790,
+                               0.4680851063829790,
+                               0.4680851063829790,
+                               0.4565217391304350,
+                               0.4347826086956520,
+                               0.4347826086956520,
+                               0.4347826086956520,
+                               0.3695652173913040,
+                               0.3695652173913040,
+                               0.3617021276595740,
+                               0.3617021276595740,
+                               0.3617021276595740,
+                               0.3469387755102040,
+                               0.3111111111111110,
+                               0.3181818181818180,
+                               0.3181818181818180,
+                               0.3181818181818180,
+                               0.3181818181818180,
+                               0.3255813953488370,
+                               0.3255813953488370,
+                               0.3255813953488370,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3170731707317070,
+                               0.3170731707317070,
+                               0.2790697674418600,
+                               0.2790697674418600,
+                               0.2727272727272730,
+                               0.2558139534883720,
+                               0.2558139534883720,
+                               0.2558139534883720,
+                               0.2500000000000000,
+                               0.2500000000000000,
+                               0.2391304347826090,
+                               0.2391304347826090,
+                               0.2444444444444440,
+                               0.2444444444444440,
+                               0.1818181818181820,
+                               0.1818181818181820,
+                               0.1702127659574470,
+                               0.1666666666666670,
+                               0.1632653061224490,
+                               0.1632653061224490,
+                               0.1600000000000000,
+                               0.1428571428571430,
+                               0.1400000000000000,
+                               0.1372549019607840,
+                               0.1372549019607840,
+                               0.1372549019607840,
+                               0.1538461538461540,
+                               0.1698113207547170,
+                               0.1509433962264150,
+                               0.1509433962264150,
+                               0.1372549019607840,
+                               0.1346153846153850,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1272727272727270,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1090909090909090,
+                               0.1071428571428570,
+                               0.0892857142857143,
+                               0.0892857142857143,
+                               0.0892857142857143,
+                               0.0892857142857143,
+                               0.0892857142857143,
+                               0.0892857142857143,
+                               0.0892857142857143,
+                               0.0892857142857143,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.1090909090909090,
+                               0.0925925925925926,
+                               0.1063829787234040,
+                               0.1063829787234040,
+                               0.1063829787234040,
+                               0.1063829787234040,
+                               0.0869565217391304,
+                               0.0888888888888889,
+                               0.0888888888888889,
+                               0.0888888888888889,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0888888888888889,
+                               0.0888888888888889,
+                               0.0888888888888889,
+                               0.0888888888888889,
+                               0.0869565217391304,
+                               0.0869565217391304,
+                               0.0869565217391304,
+                               0.0869565217391304,
+                               0.0869565217391304,
+                               0.0869565217391304,
+                               0.0851063829787234,
+                               0.0851063829787234,
+                               0.0851063829787234,
+                               0.1041666666666670,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.0816326530612245,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.0943396226415094,
+                               0.0943396226415094,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.0961538461538462,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.1000000000000000,
+                               0.1041666666666670,
+                               0.1041666666666670,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0961538461538462,
+                               0.0943396226415094,
+                               0.0943396226415094,
+                               0.0943396226415094,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.0943396226415094,
+                               0.0943396226415094,
+                               0.0925925925925926,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0925925925925926,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0925925925925926,
+                               0.0740740740740741,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0517241379310345,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0526315789473684,
+                               0.0517241379310345,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0517241379310345,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0500000000000000,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0327868852459016,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0312500000000000,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0338983050847458,
+                               0.0357142857142857,
+                               0.0357142857142857,
+                               0.0357142857142857,
+                               0.0357142857142857,
+                               0.0357142857142857,
+                               0.0357142857142857,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0689655172413793,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0714285714285714,
+                               0.0545454545454545,
+                               0.0535714285714286,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0701754385964912,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.1090909090909090,
+                               0.1111111111111110,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1481481481481480,
+                               0.1481481481481480,
+                               0.1481481481481480,
+                               0.1481481481481480,
+                               0.1509433962264150,
+                               0.1509433962264150,
+                               0.1509433962264150,
+                               0.1509433962264150,
+                               0.1509433962264150,
+                               0.1509433962264150,
+                               0.1818181818181820,
+                               0.1851851851851850,
+                               0.1851851851851850,
+                               0.1851851851851850,
+                               0.1851851851851850,
+                               0.1851851851851850,
+                               0.2000000000000000,
+                               0.2037037037037040,
+                               0.2363636363636360,
+                               0.2363636363636360,
+                               0.2407407407407410,
+                               0.2407407407407410,
+                               0.2452830188679250,
+                               0.2452830188679250,
+                               0.2452830188679250,
+                               0.2500000000000000,
+                               0.2549019607843140,
+                               0.2549019607843140,
+                               0.2549019607843140,
+                               0.2549019607843140,
+                               0.2745098039215690,
+                               0.2800000000000000,
+                               0.2800000000000000,
+                               0.2800000000000000,
+                               0.2800000000000000,
+                               0.2800000000000000,
+                               0.2941176470588230,
+                               0.2941176470588230,
+                               0.3000000000000000,
+                               0.3000000000000000,
+                               0.3000000000000000,
+                               0.3137254901960780,
+                               0.3269230769230770,
+                               0.3396226415094340,
+                               0.3396226415094340,
+                               0.3461538461538460,
+                               0.3653846153846150,
+                               0.3846153846153850,
+                               0.3846153846153850,
+                               0.3846153846153850,
+                               0.3962264150943400,
+                               0.3962264150943400,
+                               0.3962264150943400,
+                               0.3962264150943400,
+                               0.3962264150943400,
+                               0.3962264150943400,
+                               0.4117647058823530,
+                               0.4117647058823530,
+                               0.4117647058823530,
+                               0.4117647058823530,
+                               0.4200000000000000,
+                               0.4313725490196080,
+                               0.4313725490196080,
+                               0.4313725490196080,
+                               0.4313725490196080,
+                               0.4313725490196080,
+                               0.4313725490196080,
+                               0.4313725490196080,
+                               0.4200000000000000,
+                               0.4200000000000000,
+                               0.4200000000000000,
+                               0.4200000000000000,
+                               0.4200000000000000,
+                               0.4200000000000000,
+                               0.4313725490196080,
+                               0.4313725490196080,
+                               0.4509803921568630,
+                               0.4509803921568630,
+                               0.4509803921568630,
+                               0.4615384615384620,
+                               0.4814814814814810,
+                               0.4814814814814810,
+                               0.4814814814814810,
+                               0.4814814814814810,
+                               0.5098039215686270,
+                               0.5200000000000000,
+                               0.5306122448979590,
+                               0.5306122448979590,
+                               0.5306122448979590,
+                               0.5306122448979590,
+                               0.5625000000000000,
+                               0.5625000000000000,
+                               0.5957446808510640,
+                               0.5957446808510640,
+                               0.5957446808510640,
+                               0.5957446808510640,
+                               0.5957446808510640,
+                               0.6041666666666670,
+                               0.6041666666666670,
+                               0.6122448979591840,
+                               0.6122448979591840,
+                               0.6326530612244900,
+                               0.6400000000000000,
+                               0.6470588235294120,
+                               0.6470588235294120,
+                               0.6600000000000000,
+                               0.6600000000000000,
+                               0.6600000000000000,
+                               0.7021276595744680,
+                               0.7021276595744680,
+                               0.7173913043478260,
+                               0.7333333333333330,
+                               0.7333333333333330,
+                               0.7333333333333330,
+                               0.7333333333333330,
+                               0.7333333333333330,
+                               0.7727272727272730,
+                               0.7826086956521740,
+                               0.7872340425531920,
+                               0.7916666666666670,
+                               0.8163265306122450,
+                               0.8163265306122450,
+                               0.8200000000000000,
+                               0.8235294117647060,
+                               0.8235294117647060,
+                               0.8235294117647060,
+                               0.8235294117647060,
+                               0.8235294117647060,
+                               0.8148148148148150,
+                               0.8148148148148150,
+                               0.8148148148148150,
+                               0.8148148148148150,
+                               0.8245614035087720,
+                               0.8245614035087720,
+                               0.8275862068965520,
+                               0.8275862068965520,
+                               0.8275862068965520,
+                               0.8275862068965520,
+                               0.8500000000000000,
+                               0.8500000000000000,
+                               0.8500000000000000,
+                               0.8500000000000000,
+                               0.8500000000000000,
+                               0.8500000000000000,
+                               0.8524590163934430,
+                               0.8524590163934430,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8709677419354840,
+                               0.8709677419354840,
+                               0.8593750000000000,
+                               0.8730158730158730,
+                               0.8730158730158730,
+                               0.8730158730158730,
+                               0.8593750000000000,
+                               0.8593750000000000,
+                               0.8593750000000000,
+                               0.8615384615384620,
+                               0.8615384615384620,
+                               0.8615384615384620,
+                               0.8615384615384620,
+                               0.8615384615384620,
+                               0.8615384615384620,
+                               0.8615384615384620,
+                               0.8615384615384620,
+                               0.8615384615384620,
+                               0.8615384615384620,
+                               0.8615384615384620,
+                               0.8615384615384620,
+                               0.8769230769230770,
+                               0.8769230769230770,
+                               0.8906250000000000,
+                               0.8906250000000000,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9193548387096770,
+                               0.9193548387096770,
+                               0.9193548387096770,
+                               0.9180327868852460,
+                               0.9180327868852460,
+                               0.9180327868852460,
+                               0.9180327868852460,
+                               0.9180327868852460,
+                               0.9180327868852460,
+                               0.9180327868852460,
+                               0.9180327868852460,
+                               0.9166666666666670,
+                               0.9166666666666670,
+                               0.9166666666666670,
+                               0.9152542372881350,
+                               0.9152542372881350,
+                               0.9152542372881350,
+                               0.9166666666666670,
+                               0.9180327868852460,
+                               0.9180327868852460,
+                               0.9180327868852460,
+                               0.9180327868852460,
+                               0.9333333333333330,
+                               0.9333333333333330,
+                               0.9333333333333330,
+                               0.9333333333333330,
+                               0.9333333333333330,
+                               0.9333333333333330,
+                               0.9333333333333330,
+                               0.9333333333333330,
+                               0.9491525423728810,
+                               0.9491525423728810,
+                               0.9491525423728810,
+                               0.9333333333333330,
+                               0.9333333333333330,
+                               0.9322033898305080,
+                               0.9322033898305080,
+                               0.9322033898305080,
+                               0.9322033898305080,
+                               0.9310344827586210,
+                               0.9310344827586210,
+                               0.9310344827586210,
+                               0.9310344827586210,
+                               0.9310344827586210,
+                               0.9310344827586210,
+                               0.9310344827586210,
+                               0.9310344827586210,
+                               0.9152542372881350,
+                               0.9152542372881350,
+                               0.9152542372881350,
+                               0.9152542372881350,
+                               0.9152542372881350,
+                               0.9152542372881350,
+                               0.9152542372881350,
+                               0.9152542372881350,
+                               0.9152542372881350,
+                               0.9152542372881350,
+                               0.9152542372881350,
+                               0.9152542372881350,
+                               0.9152542372881350,
+                               0.9180327868852460,
+                               0.9180327868852460,
+                               0.9166666666666670,
+                               0.9016393442622950,
+                               0.9016393442622950,
+                               0.9016393442622950,
+                               0.9032258064516130,
+                               0.9047619047619050,
+                               0.9062500000000000,
+                               0.9062500000000000,
+                               0.9062500000000000,
+                               0.9062500000000000,
+                               0.9062500000000000,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9076923076923080,
+                               0.9230769230769230,
+                               0.9230769230769230,
+                               0.9230769230769230,
+                               0.9218750000000000,
+                               0.9206349206349210,
+                               0.9218750000000000,
+                               0.9218750000000000,
+                               0.9218750000000000,
+                               0.9218750000000000,
+                               0.9218750000000000,
+                               0.9206349206349210,
+                               0.9206349206349210,
+                               0.9206349206349210,
+                               0.9206349206349210,
+                               0.9206349206349210,
+                               0.9206349206349210,
+                               0.9344262295081970,
+                               0.9344262295081970,
+                               0.9344262295081970,
+                               0.9344262295081970,
+                               0.9344262295081970,
+                               0.9365079365079360,
+                               0.9516129032258060,
+                               0.9516129032258060,
+                               0.9516129032258060,
+                               0.9516129032258060,
+                               0.9508196721311470,
+                               0.9508196721311470,
+                               0.9354838709677420,
+                               0.9354838709677420,
+                               0.9354838709677420,
+                               0.9333333333333330,
+                               0.9310344827586210,
+                               0.9298245614035090,
+                               0.9122807017543860,
+                               0.9122807017543860,
+                               0.9122807017543860,
+                               0.9122807017543860,
+                               0.9107142857142860,
+                               0.9090909090909090,
+                               0.9259259259259260,
+                               0.9259259259259260,
+                               0.9259259259259260,
+                               0.9259259259259260,
+                               0.9272727272727270,
+                               0.9259259259259260,
+                               0.9298245614035090,
+                               0.9298245614035090,
+                               0.9298245614035090,
+                               0.9310344827586210,
+                               0.9310344827586210,
+                               0.9333333333333330,
+                               0.9491525423728810,
+                               0.9491525423728810,
+                               0.9500000000000000,
+                               0.9500000000000000,
+                               0.9500000000000000,
+                               0.9500000000000000,
+                               0.9344262295081970,
+                               0.9344262295081970,
+                               0.9344262295081970,
+                               0.9344262295081970,
+                               0.9344262295081970,
+                               0.9344262295081970,
+                               0.9333333333333330,
+                               0.9333333333333330,
+                               0.9333333333333330,
+                               0.9322033898305080,
+                               0.9322033898305080,
+                               0.9322033898305080,
+                               0.9482758620689660,
+                               0.9482758620689660,
+                               0.9473684210526320,
+                               0.9482758620689660,
+                               0.9482758620689660,
+                               0.9473684210526320,
+                               0.9655172413793100,
+                               0.9655172413793100,
+                               0.9491525423728810,
+                               0.9491525423728810,
+                               0.9482758620689660,
+                               0.9491525423728810,
+                               0.9491525423728810,
+                               0.9491525423728810,
+                               0.9491525423728810,
+                               0.9491525423728810,
+                               0.9508196721311470,
+                               0.9500000000000000,
+                               0.9500000000000000,
+                               0.9500000000000000,
+                               0.9500000000000000,
+                               0.9500000000000000,
+                               0.9491525423728810,
+                               0.9491525423728810,
+                               0.9500000000000000,
+                               0.9500000000000000,
+                               0.9500000000000000,
+                               0.9500000000000000,
+                               0.9500000000000000,
+                               0.9508196721311470,
+                               0.9500000000000000,
+                               0.9500000000000000,
+                               0.9661016949152540,
+                               0.9655172413793100,
+                               0.9655172413793100,
+                               0.9655172413793100,
+                               0.9655172413793100,
+                               0.9655172413793100,
+                               0.9661016949152540,
+                               0.9661016949152540,
+                               0.9661016949152540,
+                               0.9661016949152540,
+                               0.9661016949152540,
+                               0.9661016949152540,
+                               0.9661016949152540,
+                               0.9500000000000000,
+                               0.9500000000000000,
+                               0.9500000000000000,
+                               0.9516129032258060,
+                               0.9516129032258060,
+                               0.9516129032258060,
+                               0.9516129032258060,
+                               0.9516129032258060,
+                               0.9516129032258060,
+                               0.9516129032258060,
+                               0.9516129032258060,
+                               0.9516129032258060,
+                               0.9516129032258060,
+                               0.9531250000000000,
+                               0.9531250000000000,
+                               0.9523809523809520,
+                               0.9523809523809520,
+                               0.9523809523809520,
+                               0.9523809523809520,
+                               0.9523809523809520,
+                               0.9523809523809520,
+                               0.9531250000000000,
+                               0.9531250000000000,
+                               0.9531250000000000,
+                               0.9682539682539680,
+                               0.9682539682539680,
+                               0.9682539682539680,
+                               0.9682539682539680,
+                               0.9682539682539680,
+                               0.9682539682539680,
+                               0.9682539682539680,
+                               0.9687500000000000,
+                               0.9687500000000000,
+                               0.9687500000000000,
+                               0.9687500000000000,
+                               0.9687500000000000,
+                               0.9682539682539680,
+                               0.9682539682539680,
+                               0.9682539682539680,
+                               0.9677419354838710,
+                               0.9677419354838710,
+                               0.9677419354838710,
+                               0.9677419354838710,
+                               0.9677419354838710,
+                               0.9677419354838710,
+                               0.9682539682539680,
+                               0.9682539682539680,
+                               0.9682539682539680,
+                               0.9682539682539680,
+                               0.9682539682539680,
+                               0.9682539682539680,
+                               0.9682539682539680,
+                               0.9682539682539680,
+                               0.9682539682539680,
+                               0.9682539682539680,
+                               0.9682539682539680,
+                               0.9682539682539680,
+                               0.9531250000000000,
+                               0.9531250000000000,
+                               0.9531250000000000,
+                               0.9538461538461540,
+                               0.9538461538461540,
+                               0.9538461538461540,
+                               0.9538461538461540,
+                               0.9538461538461540,
+                               0.9538461538461540,
+                               0.9538461538461540,
+                               0.9538461538461540,
+                               0.9538461538461540,
+                               0.9538461538461540,
+                               0.9538461538461540,
+                               0.9393939393939390,
+                               0.9393939393939390,
+                               0.9393939393939390,
+                               0.9393939393939390,
+                               0.9538461538461540,
+                               0.9538461538461540,
+                               0.9538461538461540,
+                               0.9538461538461540,
+                               0.9538461538461540,
+                               0.9523809523809520,
+                               0.9523809523809520,
+                               0.9523809523809520,
+                               0.9523809523809520,
+                               0.9523809523809520,
+                               0.9516129032258060,
+                               0.9523809523809520,
+                               0.9523809523809520,
+                               0.9523809523809520,
+                               0.9523809523809520,
+                               0.9516129032258060,
+                               0.9365079365079360,
+                               0.9206349206349210,
+                               0.9206349206349210,
+                               0.9206349206349210,
+                               0.9206349206349210,
+                               0.9193548387096770,
+                               0.9193548387096770,
+                               0.9193548387096770,
+                               0.9193548387096770,
+                               0.9193548387096770,
+                               0.9180327868852460,
+                               0.9180327868852460,
+                               0.9180327868852460,
+                               0.9180327868852460,
+                               0.9180327868852460,
+                               0.9180327868852460,
+                               0.9180327868852460,
+                               0.9180327868852460,
+                               0.9180327868852460,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.9032258064516130,
+                               0.8870967741935480,
+                               0.8593750000000000,
+                               0.8571428571428570,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8524590163934430,
+                               0.8524590163934430,
+                               0.8524590163934430,
+                               0.8524590163934430,
+                               0.8524590163934430,
+                               0.8500000000000000,
+                               0.8360655737704920,
+                               0.8360655737704920,
+                               0.8225806451612900,
+                               0.8225806451612900,
+                               0.8225806451612900,
+                               0.8225806451612900,
+                               0.8360655737704920,
+                               0.8333333333333330,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8333333333333330,
+                               0.8333333333333330,
+                               0.8064516129032260,
+                               0.7936507936507940,
+                               0.7812500000000000,
+                               0.7692307692307690,
+                               0.7692307692307690,
+                               0.7692307692307690,
+                               0.7692307692307690,
+                               0.7656250000000000,
+                               0.7692307692307690,
+                               0.7692307692307690,
+                               0.7692307692307690,
+                               0.7692307692307690,
+                               0.7656250000000000,
+                               0.7656250000000000,
+                               0.7619047619047620,
+                               0.7619047619047620,
+                               0.7619047619047620,
+                               0.7619047619047620,
+                               0.7619047619047620,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7343750000000000,
+                               0.7343750000000000,
+                               0.7343750000000000,
+                               0.7343750000000000,
+                               0.7343750000000000,
+                               0.7343750000000000,
+                               0.7343750000000000,
+                               0.7230769230769230,
+                               0.7187500000000000,
+                               0.7187500000000000,
+                               0.7187500000000000,
+                               0.7230769230769230,
+                               0.7230769230769230,
+                               0.7230769230769230,
+                               0.7142857142857140,
+                               0.7258064516129030,
+                               0.7213114754098360,
+                               0.7213114754098360,
+                               0.7213114754098360,
+                               0.7288135593220340,
+                               0.7321428571428570,
+                               0.7321428571428570,
+                               0.7321428571428570,
+                               0.7192982456140350,
+                               0.7272727272727270,
+                               0.7142857142857140,
+                               0.7142857142857140,
+                               0.7090909090909090,
+                               0.7222222222222220,
+                               0.7222222222222220,
+                               0.7222222222222220,
+                               0.7307692307692310,
+                               0.7037037037037040,
+                               0.7037037037037040,
+                               0.6909090909090910,
+                               0.6909090909090910,
+                               0.6785714285714290,
+                               0.6785714285714290,
+                               0.6785714285714290,
+                               0.6551724137931030,
+                               0.6551724137931030,
+                               0.6491228070175440,
+                               0.6428571428571430,
+                               0.6545454545454550,
+                               0.6250000000000000,
+                               0.6250000000000000,
+                               0.6250000000000000,
+                               0.6250000000000000,
+                               0.6481481481481480,
+                               0.6296296296296300,
+                               0.6274509803921570,
+                               0.6274509803921570,
+                               0.6153846153846150,
+                               0.6000000000000000,
+                               0.5918367346938780,
+                               0.5918367346938780,
+                               0.5800000000000000,
+                               0.5800000000000000,
+                               0.5800000000000000,
+                               0.5800000000000000,
+                               0.5686274509803920,
+                               0.5686274509803920,
+                               0.5714285714285710,
+                               0.5714285714285710,
+                               0.5714285714285710,
+                               0.5625000000000000,
+                               0.5625000000000000,
+                               0.5600000000000000,
+                               0.5510204081632650,
+                               0.5510204081632650,
+                               0.5510204081632650,
+                               0.5510204081632650,
+                               0.5192307692307690,
+                               0.5000000000000000,
+                               0.4821428571428570,
+                               0.4821428571428570,
+                               0.4821428571428570,
+                               0.4727272727272730,
+                               0.4727272727272730,
+                               0.4727272727272730,
+                               0.4561403508771930,
+                               0.4642857142857140,
+                               0.4642857142857140,
+                               0.4642857142857140,
+                               0.4642857142857140,
+                               0.4642857142857140,
+                               0.4464285714285710,
+                               0.4545454545454550,
+                               0.4629629629629630,
+                               0.4629629629629630,
+                               0.4629629629629630,
+                               0.4509803921568630,
+                               0.4230769230769230,
+                               0.4117647058823530,
+                               0.4117647058823530,
+                               0.4038461538461540,
+                               0.4117647058823530,
+                               0.4117647058823530,
+                               0.4117647058823530,
+                               0.4038461538461540,
+                               0.4038461538461540,
+                               0.3962264150943400,
+                               0.3888888888888890,
+                               0.3888888888888890,
+                               0.3888888888888890,
+                               0.4000000000000000,
+                               0.4000000000000000,
+                               0.4000000000000000,
+                               0.4000000000000000,
+                               0.4000000000000000,
+                               0.4038461538461540,
+                               0.4038461538461540,
+                               0.4038461538461540,
+                               0.3962264150943400,
+                               0.3888888888888890,
+                               0.3888888888888890,
+                               0.3636363636363640,
+                               0.3636363636363640,
+                               0.3269230769230770,
+                               0.3148148148148150,
+                               0.3148148148148150,
+                               0.3148148148148150,
+                               0.2884615384615380,
+                               0.2884615384615380,
+                               0.2653061224489800,
+                               0.2653061224489800,
+                               0.2653061224489800,
+                               0.2653061224489800,
+                               0.2653061224489800,
+                               0.2553191489361700,
+                               0.2391304347826090,
+                               0.2391304347826090,
+                               0.2444444444444440,
+                               0.2391304347826090,
+                               0.2340425531914890,
+                               0.2500000000000000,
+                               0.2340425531914890,
+                               0.2340425531914890,
+                               0.2340425531914890,
+                               0.2340425531914890,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2244897959183670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2083333333333330,
+                               0.2040816326530610,
+                               0.1875000000000000,
+                               0.1702127659574470,
+                               0.1666666666666670,
+                               0.1666666666666670,
+                               0.1666666666666670,
+                               0.1875000000000000,
+                               0.1875000000000000,
+                               0.2040816326530610,
+                               0.2040816326530610,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.1960784313725490,
+                               0.1960784313725490,
+                               0.1923076923076920,
+                               0.1923076923076920,
+                               0.1886792452830190,
+                               0.1698113207547170,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.0943396226415094,
+                               0.0925925925925926,
+                               0.0943396226415094,
+                               0.1071428571428570,
+                               0.1071428571428570,
+                               0.1071428571428570,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0892857142857143,
+                               0.0892857142857143,
+                               0.0892857142857143,
+                               0.0892857142857143,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0847457627118644,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0819672131147541,
+                               0.0806451612903226,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0666666666666667,
+                               0.0677966101694915,
+                               0.0714285714285714,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0535714285714286,
+                               0.0535714285714286,
+                               0.0535714285714286,
+                               0.0535714285714286,
+                               0.0535714285714286,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0535714285714286,
+                               0.0535714285714286,
+                               0.0535714285714286,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0508474576271187,
+                               0.0500000000000000,
+                               0.0491803278688525,
+                               0.0500000000000000,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0476190476190476,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0468750000000000,
+                               0.0468750000000000,
+                               0.0468750000000000,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0468750000000000,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0149253731343284,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0153846153846154,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0333333333333333,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0500000000000000,
+                               0.0508474576271187,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0983606557377049,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1016949152542370,
+                               0.1016949152542370,
+                               0.1016949152542370,
+                               0.1016949152542370,
+                               0.1034482758620690,
+                               0.1034482758620690,
+                               0.1034482758620690,
+                               0.1034482758620690,
+                               0.1034482758620690,
+                               0.1186440677966100,
+                               0.1166666666666670,
+                               0.1311475409836070,
+                               0.1333333333333330,
+                               0.1333333333333330,
+                               0.1333333333333330,
+                               0.1333333333333330,
+                               0.1355932203389830,
+                               0.1639344262295080,
+                               0.1639344262295080,
+                               0.1639344262295080,
+                               0.1639344262295080,
+                               0.1666666666666670,
+                               0.1724137931034480,
+                               0.1724137931034480,
+                               0.1724137931034480,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1818181818181820,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.2181818181818180,
+                               0.2222222222222220,
+                               0.2264150943396230,
+                               0.2264150943396230,
+                               0.2264150943396230,
+                               0.2307692307692310,
+                               0.2352941176470590,
+                               0.2448979591836730,
+                               0.2600000000000000,
+                               0.2600000000000000,
+                               0.2549019607843140,
+                               0.2600000000000000,
+                               0.2745098039215690,
+                               0.2884615384615380,
+                               0.2884615384615380,
+                               0.2884615384615380,
+                               0.2884615384615380,
+                               0.2884615384615380,
+                               0.2941176470588230,
+                               0.2941176470588230,
+                               0.2941176470588230,
+                               0.3076923076923080,
+                               0.3137254901960780,
+                               0.3076923076923080,
+                               0.3076923076923080,
+                               0.3076923076923080,
+                               0.3076923076923080,
+                               0.3076923076923080,
+                               0.3076923076923080,
+                               0.3076923076923080,
+                               0.3207547169811320,
+                               0.3454545454545450,
+                               0.3454545454545450,
+                               0.3454545454545450,
+                               0.3454545454545450,
+                               0.3454545454545450,
+                               0.3454545454545450,
+                               0.3636363636363640,
+                               0.3636363636363640,
+                               0.3636363636363640,
+                               0.3750000000000000,
+                               0.3750000000000000,
+                               0.3859649122807020,
+                               0.3965517241379310,
+                               0.4181818181818180,
+                               0.4181818181818180,
+                               0.4363636363636360,
+                               0.4363636363636360,
+                               0.4464285714285710,
+                               0.4464285714285710,
+                               0.4727272727272730,
+                               0.4821428571428570,
+                               0.4821428571428570,
+                               0.4912280701754390,
+                               0.5172413793103450,
+                               0.5172413793103450,
+                               0.5263157894736840,
+                               0.5263157894736840,
+                               0.5263157894736840,
+                               0.5263157894736840,
+                               0.5263157894736840,
+                               0.5263157894736840,
+                               0.5660377358490570,
+                               0.5660377358490570,
+                               0.5660377358490570,
+                               0.5660377358490570,
+                               0.5660377358490570,
+                               0.5740740740740740,
+                               0.5818181818181820,
+                               0.5818181818181820,
+                               0.5925925925925930,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6111111111111110,
+                               0.6470588235294120,
+                               0.6666666666666670,
+                               0.6800000000000000,
+                               0.6938775510204080,
+                               0.6938775510204080,
+                               0.7083333333333330,
+                               0.7083333333333330,
+                               0.7083333333333330,
+                               0.7083333333333330,
+                               0.7200000000000000,
+                               0.7200000000000000,
+                               0.7400000000000000,
+                               0.7450980392156860,
+                               0.7450980392156860,
+                               0.7450980392156860,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7358490566037730,
+                               0.7358490566037730,
+                               0.7358490566037730,
+                               0.7358490566037730,
+                               0.7547169811320760,
+                               0.7547169811320760,
+                               0.7547169811320760,
+                               0.7547169811320760,
+                               0.7592592592592590,
+                               0.7592592592592590,
+                               0.7719298245614030,
+                               0.7719298245614030,
+                               0.7719298245614030,
+                               0.7758620689655170,
+                               0.7758620689655170,
+                               0.7758620689655170,
+                               0.7796610169491530,
+                               0.7796610169491530,
+                               0.8032786885245900,
+                               0.8032786885245900,
+                               0.8032786885245900,
+                               0.8064516129032260,
+                               0.8281250000000000,
+                               0.8281250000000000,
+                               0.8307692307692310,
+                               0.8307692307692310,
+                               0.8281250000000000,
+                               0.8281250000000000,
+                               0.8307692307692310,
+                               0.8307692307692310,
+                               0.8333333333333330,
+                               0.8333333333333330,
+                               0.8333333333333330,
+                               0.8358208955223880,
+                               0.8358208955223880,
+                               0.8358208955223880,
+                               0.8382352941176470,
+                               0.8405797101449270,
+                               0.8405797101449270,
+                               0.8382352941176470,
+                               0.8382352941176470,
+                               0.8382352941176470,
+                               0.8382352941176470,
+                               0.8382352941176470,
+                               0.8428571428571430,
+                               0.8450704225352110,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8550724637681160,
+                               0.8550724637681160,
+                               0.8550724637681160,
+                               0.8676470588235290,
+                               0.8805970149253730,
+                               0.8805970149253730,
+                               0.8805970149253730,
+                               0.8805970149253730,
+                               0.8805970149253730,
+                               0.8805970149253730,
+                               0.8805970149253730,
+                               0.8787878787878790,
+                               0.8787878787878790,
+                               0.8787878787878790,
+                               0.8787878787878790,
+                               0.8787878787878790,
+                               0.8805970149253730,
+                               0.8805970149253730,
+                               0.8805970149253730,
+                               0.8805970149253730,
+                               0.8805970149253730,
+                               0.8805970149253730,
+                               0.8823529411764710,
+                               0.8823529411764710,
+                               0.8823529411764710,
+                               0.8823529411764710,
+                               0.8823529411764710,
+                               0.8823529411764710,
+                               0.8840579710144930,
+                               0.8840579710144930,
+                               0.8840579710144930,
+                               0.8840579710144930,
+                               0.8840579710144930,
+                               0.8840579710144930,
+                               0.8840579710144930,
+                               0.8840579710144930,
+                               0.8840579710144930,
+                               0.8970588235294120,
+                               0.8970588235294120,
+                               0.8970588235294120,
+                               0.8970588235294120,
+                               0.8970588235294120,
+                               0.8970588235294120,
+                               0.8970588235294120,
+                               0.8970588235294120,
+                               0.8970588235294120,
+                               0.8970588235294120,
+                               0.8985507246376810,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.9142857142857140,
+                               0.9142857142857140,
+                               0.9142857142857140,
+                               0.9130434782608700,
+                               0.9130434782608700,
+                               0.9130434782608700,
+                               0.9130434782608700,
+                               0.9130434782608700,
+                               0.9130434782608700,
+                               0.9130434782608700,
+                               0.9130434782608700,
+                               0.9130434782608700,
+                               0.9130434782608700,
+                               0.9130434782608700,
+                               0.9130434782608700,
+                               0.9142857142857140,
+                               0.9142857142857140,
+                               0.9142857142857140,
+                               0.9142857142857140,
+                               0.9142857142857140,
+                               0.9142857142857140,
+                               0.9142857142857140,
+                               0.9142857142857140,
+                               0.9142857142857140,
+                               0.9142857142857140,
+                               0.9142857142857140,
+                               0.9142857142857140,
+                               0.9142857142857140,
+                               0.9142857142857140,
+                               0.9142857142857140,
+                               0.9142857142857140,
+                               0.9130434782608700,
+                               0.9130434782608700,
+                               0.9130434782608700,
+                               0.9130434782608700,
+                               0.9130434782608700,
+                               0.9130434782608700,
+                               0.9130434782608700,
+                               0.9130434782608700,
+                               0.9130434782608700,
+                               0.9130434782608700,
+                               0.9130434782608700,
+                               0.9130434782608700,
+                               0.9130434782608700,
+                               0.9130434782608700,
+                               0.9130434782608700,
+                               0.9130434782608700,
+                               0.9117647058823530,
+                               0.9130434782608700,
+                               0.9117647058823530,
+                               0.9104477611940300,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9090909090909090,
+                               0.9062500000000000,
+                               0.9076923076923080,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.9047619047619050,
+                               0.8769230769230770,
+                               0.8750000000000000,
+                               0.8730158730158730,
+                               0.8730158730158730,
+                               0.8730158730158730,
+                               0.8730158730158730,
+                               0.8730158730158730,
+                               0.8730158730158730,
+                               0.8593750000000000,
+                               0.8593750000000000,
+                               0.8615384615384620,
+                               0.8615384615384620,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8548387096774190,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8412698412698410,
+                               0.8412698412698410,
+                               0.8412698412698410,
+                               0.8412698412698410,
+                               0.8281250000000000,
+                               0.8281250000000000,
+                               0.8281250000000000,
+                               0.8281250000000000,
+                               0.8281250000000000,
+                               0.8281250000000000,
+                               0.8387096774193550,
+                               0.8387096774193550,
+                               0.8524590163934430,
+                               0.8524590163934430,
+                               0.8524590163934430,
+                               0.8524590163934430,
+                               0.8666666666666670,
+                               0.8709677419354840,
+                               0.8593750000000000,
+                               0.8593750000000000,
+                               0.8593750000000000,
+                               0.8593750000000000,
+                               0.8656716417910450,
+                               0.8656716417910450,
+                               0.8656716417910450,
+                               0.8656716417910450,
+                               0.8656716417910450,
+                               0.8636363636363640,
+                               0.8695652173913040,
+                               0.8695652173913040,
+                               0.8714285714285710,
+                               0.8714285714285710,
+                               0.8714285714285710,
+                               0.8714285714285710,
+                               0.8714285714285710,
+                               0.8714285714285710,
+                               0.8714285714285710,
+                               0.8714285714285710,
+                               0.8732394366197180,
+                               0.8732394366197180,
+                               0.8857142857142860,
+                               0.8840579710144930,
+                               0.8970588235294120,
+                               0.8970588235294120,
+                               0.8955223880597010,
+                               0.8939393939393940,
+                               0.8955223880597010,
+                               0.8970588235294120,
+                               0.8985507246376810,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.8985507246376810,
+                               0.8985507246376810,
+                               0.8985507246376810,
+                               0.8970588235294120,
+                               0.8970588235294120,
+                               0.8970588235294120,
+                               0.8970588235294120,
+                               0.8970588235294120,
+                               0.8970588235294120,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.8970588235294120,
+                               0.8970588235294120,
+                               0.8955223880597010,
+                               0.8970588235294120,
+                               0.8970588235294120,
+                               0.8970588235294120,
+                               0.8985507246376810,
+                               0.8985507246376810,
+                               0.9000000000000000,
+                               0.9142857142857140,
+                               0.9142857142857140,
+                               0.9154929577464790,
+                               0.9166666666666670,
+                               0.9166666666666670,
+                               0.9166666666666670,
+                               0.9178082191780820,
+                               0.9178082191780820,
+                               0.9178082191780820,
+                               0.9178082191780820,
+                               0.9178082191780820,
+                               0.9178082191780820,
+                               0.9178082191780820,
+                               0.9178082191780820,
+                               0.9178082191780820,
+                               0.9178082191780820,
+                               0.9178082191780820,
+                               0.9178082191780820,
+                               0.9166666666666670,
+                               0.9166666666666670,
+                               0.9166666666666670,
+                               0.9166666666666670,
+                               0.9166666666666670,
+                               0.9166666666666670,
+                               0.9295774647887320,
+                               0.9295774647887320,
+                               0.9295774647887320,
+                               0.9295774647887320,
+                               0.9295774647887320,
+                               0.9295774647887320,
+                               0.9295774647887320,
+                               0.9305555555555560,
+                               0.9305555555555560,
+                               0.9436619718309860,
+                               0.9436619718309860,
+                               0.9436619718309860,
+                               0.9436619718309860,
+                               0.9436619718309860,
+                               0.9436619718309860,
+                               0.9436619718309860,
+                               0.9436619718309860,
+                               0.9436619718309860,
+                               0.9444444444444440,
+                               0.9444444444444440,
+                               0.9436619718309860,
+                               0.9428571428571430,
+                               0.9428571428571430,
+                               0.9428571428571430,
+                               0.9428571428571430,
+                               0.9428571428571430,
+                               0.9428571428571430,
+                               0.9428571428571430,
+                               0.9428571428571430,
+                               0.9428571428571430,
+                               0.9428571428571430,
+                               0.9428571428571430,
+                               0.9428571428571430,
+                               0.9295774647887320,
+                               0.9285714285714290,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9275362318840580,
+                               0.9142857142857140,
+                               0.9142857142857140,
+                               0.9142857142857140,
+                               0.9142857142857140,
+                               0.9154929577464790,
+                               0.9154929577464790,
+                               0.9154929577464790,
+                               0.9154929577464790,
+                               0.9154929577464790,
+                               0.9154929577464790,
+                               0.9154929577464790,
+                               0.9285714285714290,
+                               0.9275362318840580,
+                               0.9264705882352940,
+                               0.9264705882352940,
+                               0.9264705882352940,
+                               0.9253731343283580,
+                               0.9253731343283580,
+                               0.9253731343283580,
+                               0.9253731343283580,
+                               0.9253731343283580,
+                               0.9253731343283580,
+                               0.9253731343283580,
+                               0.9253731343283580,
+                               0.9253731343283580,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9104477611940300,
+                               0.9117647058823530,
+                               0.9117647058823530,
+                               0.9130434782608700,
+                               0.9117647058823530,
+                               0.9130434782608700,
+                               0.9000000000000000,
+                               0.9000000000000000,
+                               0.8873239436619720,
+                               0.8873239436619720,
+                               0.8857142857142860,
+                               0.8840579710144930,
+                               0.8823529411764710,
+                               0.8823529411764710,
+                               0.8823529411764710,
+                               0.8823529411764710,
+                               0.8823529411764710,
+                               0.8823529411764710,
+                               0.8823529411764710,
+                               0.8805970149253730,
+                               0.8805970149253730,
+                               0.8805970149253730,
+                               0.8805970149253730,
+                               0.8656716417910450,
+                               0.8656716417910450,
+                               0.8656716417910450,
+                               0.8656716417910450,
+                               0.8656716417910450,
+                               0.8656716417910450,
+                               0.8529411764705880,
+                               0.8529411764705880,
+                               0.8529411764705880,
+                               0.8529411764705880,
+                               0.8529411764705880,
+                               0.8529411764705880,
+                               0.8529411764705880,
+                               0.8382352941176470,
+                               0.8260869565217390,
+                               0.8260869565217390,
+                               0.8260869565217390,
+                               0.8235294117647060,
+                               0.8235294117647060,
+                               0.8260869565217390,
+                               0.8382352941176470,
+                               0.8382352941176470,
+                               0.8382352941176470,
+                               0.8382352941176470,
+                               0.8358208955223880,
+                               0.8484848484848480,
+                               0.8358208955223880,
+                               0.8358208955223880,
+                               0.8333333333333330,
+                               0.8208955223880600,
+                               0.8208955223880600,
+                               0.8208955223880600,
+                               0.8208955223880600,
+                               0.8208955223880600,
+                               0.8208955223880600,
+                               0.8208955223880600,
+                               0.8088235294117650,
+                               0.8059701492537310,
+                               0.8030303030303030,
+                               0.8030303030303030,
+                               0.8030303030303030,
+                               0.8030303030303030,
+                               0.8030303030303030,
+                               0.8000000000000000,
+                               0.8000000000000000,
+                               0.7878787878787880,
+                               0.7878787878787880,
+                               0.7761194029850750,
+                               0.7761194029850750,
+                               0.7727272727272730,
+                               0.7656250000000000,
+                               0.7777777777777780,
+                               0.7777777777777780,
+                               0.7777777777777780,
+                               0.7777777777777780,
+                               0.7777777777777780,
+                               0.7903225806451610,
+                               0.8032786885245900,
+                               0.8032786885245900,
+                               0.8032786885245900,
+                               0.8032786885245900,
+                               0.8000000000000000,
+                               0.7868852459016390,
+                               0.7868852459016390,
+                               0.7868852459016390,
+                               0.7833333333333330,
+                               0.7833333333333330,
+                               0.7540983606557380,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7377049180327870,
+                               0.7258064516129030,
+                               0.7258064516129030,
+                               0.7258064516129030,
+                               0.7258064516129030,
+                               0.7258064516129030,
+                               0.7213114754098360,
+                               0.7213114754098360,
+                               0.7166666666666670,
+                               0.7166666666666670,
+                               0.7166666666666670,
+                               0.7166666666666670,
+                               0.7166666666666670,
+                               0.7166666666666670,
+                               0.7166666666666670,
+                               0.7166666666666670,
+                               0.7166666666666670,
+                               0.7166666666666670,
+                               0.7118644067796610,
+                               0.7017543859649120,
+                               0.7090909090909090,
+                               0.6842105263157900,
+                               0.6842105263157900,
+                               0.6724137931034480,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6607142857142860,
+                               0.6545454545454550,
+                               0.6428571428571430,
+                               0.6428571428571430,
+                               0.6428571428571430,
+                               0.6545454545454550,
+                               0.6481481481481480,
+                               0.6603773584905660,
+                               0.6538461538461540,
+                               0.6538461538461540,
+                               0.6538461538461540,
+                               0.6415094339622640,
+                               0.6415094339622640,
+                               0.6415094339622640,
+                               0.5833333333333330,
+                               0.5833333333333330,
+                               0.5833333333333330,
+                               0.5625000000000000,
+                               0.5625000000000000,
+                               0.5625000000000000,
+                               0.5510204081632650,
+                               0.5416666666666670,
+                               0.5416666666666670,
+                               0.5306122448979590,
+                               0.5000000000000000,
+                               0.4814814814814810,
+                               0.4385964912280700,
+                               0.4482758620689660,
+                               0.4310344827586210,
+                               0.4237288135593220,
+                               0.4166666666666670,
+                               0.4166666666666670,
+                               0.3833333333333330,
+                               0.3898305084745760,
+                               0.3898305084745760,
+                               0.3898305084745760,
+                               0.3793103448275860,
+                               0.3793103448275860,
+                               0.3728813559322030,
+                               0.3728813559322030,
+                               0.3728813559322030,
+                               0.3666666666666670,
+                               0.3606557377049180,
+                               0.3606557377049180,
+                               0.3548387096774190,
+                               0.3548387096774190,
+                               0.3437500000000000,
+                               0.3437500000000000,
+                               0.3437500000000000,
+                               0.3437500000000000,
+                               0.3281250000000000,
+                               0.3230769230769230,
+                               0.3230769230769230,
+                               0.3333333333333330,
+                               0.3225806451612900,
+                               0.3278688524590160,
+                               0.2931034482758620,
+                               0.2931034482758620,
+                               0.2881355932203390,
+                               0.2881355932203390,
+                               0.2881355932203390,
+                               0.2711864406779660,
+                               0.2786885245901640,
+                               0.2741935483870970,
+                               0.2542372881355930,
+                               0.2542372881355930,
+                               0.2542372881355930,
+                               0.2500000000000000,
+                               0.2459016393442620,
+                               0.2459016393442620,
+                               0.2459016393442620,
+                               0.2459016393442620,
+                               0.2333333333333330,
+                               0.2333333333333330,
+                               0.2333333333333330,
+                               0.2333333333333330,
+                               0.2295081967213110,
+                               0.2295081967213110,
+                               0.2295081967213110,
+                               0.2333333333333330,
+                               0.2203389830508470,
+                               0.2203389830508470,
+                               0.2166666666666670,
+                               0.2166666666666670,
+                               0.2131147540983610,
+                               0.2096774193548390,
+                               0.2307692307692310,
+                               0.2187500000000000,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2131147540983610,
+                               0.2000000000000000,
+                               0.2131147540983610,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.1967213114754100,
+                               0.1935483870967740,
+                               0.1935483870967740,
+                               0.1935483870967740,
+                               0.1935483870967740,
+                               0.1935483870967740,
+                               0.1935483870967740,
+                               0.1935483870967740,
+                               0.1935483870967740,
+                               0.1935483870967740,
+                               0.1875000000000000,
+                               0.1846153846153850,
+                               0.1818181818181820,
+                               0.1818181818181820,
+                               0.1818181818181820,
+                               0.1818181818181820,
+                               0.1846153846153850,
+                               0.1846153846153850,
+                               0.1846153846153850,
+                               0.1818181818181820,
+                               0.1764705882352940,
+                               0.1764705882352940,
+                               0.1791044776119400,
+                               0.1764705882352940,
+                               0.1764705882352940,
+                               0.1764705882352940,
+                               0.1818181818181820,
+                               0.1818181818181820,
+                               0.1846153846153850,
+                               0.1846153846153850,
+                               0.1846153846153850,
+                               0.1846153846153850,
+                               0.1935483870967740,
+                               0.1935483870967740,
+                               0.1935483870967740,
+                               0.1967213114754100,
+                               0.1967213114754100,
+                               0.1967213114754100,
+                               0.2033898305084750,
+                               0.2033898305084750,
+                               0.2033898305084750,
+                               0.2068965517241380,
+                               0.2068965517241380,
+                               0.2068965517241380,
+                               0.2142857142857140,
+                               0.2142857142857140,
+                               0.2105263157894740,
+                               0.2142857142857140,
+                               0.2142857142857140,
+                               0.2181818181818180,
+                               0.2181818181818180,
+                               0.2181818181818180,
+                               0.2181818181818180,
+                               0.2181818181818180,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2075471698113210,
+                               0.2037037037037040,
+                               0.2075471698113210,
+                               0.1886792452830190,
+                               0.1818181818181820,
+                               0.1666666666666670,
+                               0.1818181818181820,
+                               0.1818181818181820,
+                               0.1818181818181820,
+                               0.1818181818181820,
+                               0.1754385964912280,
+                               0.1785714285714290,
+                               0.1636363636363640,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1551724137931030,
+                               0.1551724137931030,
+                               0.1525423728813560,
+                               0.1525423728813560,
+                               0.1500000000000000,
+                               0.1500000000000000,
+                               0.1500000000000000,
+                               0.1500000000000000,
+                               0.1333333333333330,
+                               0.1333333333333330,
+                               0.1355932203389830,
+                               0.1355932203389830,
+                               0.1379310344827590,
+                               0.1379310344827590,
+                               0.1403508771929820,
+                               0.1403508771929820,
+                               0.1403508771929820,
+                               0.1355932203389830,
+                               0.1355932203389830,
+                               0.1355932203389830,
+                               0.1186440677966100,
+                               0.1186440677966100,
+                               0.1186440677966100,
+                               0.1186440677966100,
+                               0.1166666666666670,
+                               0.1147540983606560,
+                               0.1147540983606560,
+                               0.1147540983606560,
+                               0.1147540983606560,
+                               0.1129032258064520,
+                               0.1129032258064520,
+                               0.1129032258064520,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.1076923076923080,
+                               0.1076923076923080,
+                               0.1060606060606060,
+                               0.1060606060606060,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0895522388059701,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0869565217391304,
+                               0.0869565217391304,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0882352941176471,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0909090909090909,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0882352941176471,
+                               0.0869565217391304,
+                               0.0869565217391304,
+                               0.0869565217391304,
+                               0.0869565217391304,
+                               0.0869565217391304,
+                               0.0869565217391304,
+                               0.0869565217391304,
+                               0.0735294117647059,
+                               0.0597014925373134,
+                               0.0597014925373134,
+                               0.0597014925373134,
+                               0.0597014925373134,
+                               0.0597014925373134,
+                               0.0597014925373134,
+                               0.0597014925373134,
+                               0.0597014925373134,
+                               0.0597014925373134,
+                               0.0597014925373134,
+                               0.0606060606060606,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0303030303030303,
+                               0.0303030303030303,
+                               0.0303030303030303,
+                               0.0303030303030303,
+                               0.0298507462686567,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0298507462686567,
+                               0.0303030303030303,
+                               0.0303030303030303,
+                               0.0303030303030303,
+                               0.0303030303030303,
+                               0.0303030303030303,
+                               0.0303030303030303,
+                               0.0298507462686567,
+                               0.0298507462686567,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0303030303030303,
+                               0.0303030303030303,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0140845070422535,
+                               0.0140845070422535,
+                               0.0140845070422535,
+                               0.0140845070422535,
+                               0.0140845070422535,
+                               0.0140845070422535,
+                               0.0140845070422535,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0140845070422535,
+                               0.0140845070422535,
+                               0.0140845070422535,
+                               0.0140845070422535,
+                               0.0140845070422535,
+                               0.0140845070422535,
+                               0.0140845070422535,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0140845070422535,
+                               0.0140845070422535,
+                               0.0140845070422535,
+                               0.0140845070422535,
+                               0.0140845070422535,
+                               0.0140845070422535,
+                               0.0140845070422535,
+                               0.0140845070422535,
+                               0.0140845070422535,
+                               0.0140845070422535,
+                               0.0140845070422535,
+                               0.0140845070422535,
+                               0.0140845070422535,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0135135135135135,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0338983050847458,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0689655172413793,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0862068965517241,
+                               0.1034482758620690,
+                               0.1034482758620690,
+                               0.1034482758620690,
+                               0.1186440677966100,
+                               0.1186440677966100,
+                               0.1206896551724140,
+                               0.1206896551724140,
+                               0.1206896551724140,
+                               0.1206896551724140,
+                               0.1228070175438600,
+                               0.1228070175438600,
+                               0.1228070175438600,
+                               0.1228070175438600,
+                               0.1228070175438600,
+                               0.1228070175438600,
+                               0.1228070175438600,
+                               0.1228070175438600,
+                               0.1803278688524590,
+                               0.1803278688524590,
+                               0.1803278688524590,
+                               0.1833333333333330,
+                               0.1833333333333330,
+                               0.1833333333333330,
+                               0.1833333333333330,
+                               0.1967213114754100,
+                               0.1967213114754100,
+                               0.1967213114754100,
+                               0.1967213114754100,
+                               0.1967213114754100,
+                               0.2096774193548390,
+                               0.2131147540983610,
+                               0.2258064516129030,
+                               0.2295081967213110,
+                               0.2295081967213110,
+                               0.2372881355932200,
+                               0.2542372881355930,
+                               0.2542372881355930,
+                               0.2586206896551720,
+                               0.2586206896551720,
+                               0.2631578947368420,
+                               0.2678571428571430,
+                               0.2678571428571430,
+                               0.2807017543859650,
+                               0.2807017543859650,
+                               0.2807017543859650,
+                               0.2807017543859650,
+                               0.2857142857142860,
+                               0.2857142857142860,
+                               0.2857142857142860,
+                               0.2857142857142860,
+                               0.2857142857142860,
+                               0.2982456140350880,
+                               0.3103448275862070,
+                               0.3275862068965520,
+                               0.3389830508474580,
+                               0.3448275862068970,
+                               0.3684210526315790,
+                               0.3684210526315790,
+                               0.3859649122807020,
+                               0.3965517241379310,
+                               0.3965517241379310,
+                               0.3965517241379310,
+                               0.3965517241379310,
+                               0.3965517241379310,
+                               0.3898305084745760,
+                               0.3898305084745760,
+                               0.3898305084745760,
+                               0.3898305084745760,
+                               0.4000000000000000,
+                               0.4067796610169490,
+                               0.4166666666666670,
+                               0.4166666666666670,
+                               0.4166666666666670,
+                               0.4166666666666670,
+                               0.4166666666666670,
+                               0.4166666666666670,
+                               0.4166666666666670,
+                               0.4166666666666670,
+                               0.4067796610169490,
+                               0.4067796610169490,
+                               0.4166666666666670,
+                               0.4333333333333330,
+                               0.4333333333333330,
+                               0.4406779661016950,
+                               0.4406779661016950,
+                               0.4406779661016950,
+                               0.4333333333333330,
+                               0.4262295081967210,
+                               0.4426229508196720,
+                               0.4736842105263160,
+                               0.4827586206896550,
+                               0.4915254237288140,
+                               0.5000000000000000,
+                               0.5084745762711860,
+                               0.5084745762711860,
+                               0.5172413793103450,
+                               0.5172413793103450,
+                               0.5172413793103450,
+                               0.5172413793103450,
+                               0.5344827586206900,
+                               0.5344827586206900,
+                               0.5636363636363640,
+                               0.5636363636363640,
+                               0.6037735849056600,
+                               0.6111111111111110,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6111111111111110,
+                               0.6111111111111110,
+                               0.6111111111111110,
+                               0.6181818181818180,
+                               0.6181818181818180,
+                               0.6181818181818180,
+                               0.6181818181818180,
+                               0.6181818181818180,
+                               0.6181818181818180,
+                               0.6181818181818180,
+                               0.6181818181818180,
+                               0.6181818181818180,
+                               0.6296296296296300,
+                               0.6296296296296300,
+                               0.6415094339622640,
+                               0.6666666666666670,
+                               0.6800000000000000,
+                               0.6938775510204080,
+                               0.7000000000000000,
+                               0.7000000000000000,
+                               0.7115384615384620,
+                               0.7115384615384620,
+                               0.7115384615384620,
+                               0.7169811320754720,
+                               0.7413793103448280,
+                               0.7413793103448280,
+                               0.7413793103448280,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7627118644067800,
+                               0.7627118644067800,
+                               0.7741935483870970,
+                               0.7741935483870970,
+                               0.7741935483870970,
+                               0.7868852459016390,
+                               0.7903225806451610,
+                               0.7903225806451610,
+                               0.7936507936507940,
+                               0.7936507936507940,
+                               0.7936507936507940,
+                               0.7936507936507940,
+                               0.8125000000000000,
+                               0.8125000000000000,
+                               0.8125000000000000,
+                               0.8125000000000000,
+                               0.8125000000000000,
+                               0.8125000000000000,
+                               0.8153846153846150,
+                               0.8153846153846150,
+                               0.8153846153846150,
+                               0.8153846153846150,
+                               0.8153846153846150,
+                               0.8181818181818180,
+                               0.8181818181818180,
+                               0.8181818181818180,
+                               0.8235294117647060,
+                               0.8235294117647060,
+                               0.8235294117647060,
+                               0.8235294117647060,
+                               0.8358208955223880,
+                               0.8358208955223880,
+                               0.8358208955223880,
+                               0.8358208955223880,
+                               0.8358208955223880,
+                               0.8358208955223880,
+                               0.8358208955223880,
+                               0.8358208955223880,
+                               0.8358208955223880,
+                               0.8358208955223880,
+                               0.8382352941176470,
+                               0.8358208955223880,
+                               0.8507462686567160,
+                               0.8507462686567160,
+                               0.8507462686567160,
+                               0.8507462686567160,
+                               0.8507462686567160,
+                               0.8529411764705880,
+                               0.8529411764705880,
+                               0.8529411764705880,
+                               0.8529411764705880,
+                               0.8529411764705880,
+                               0.8529411764705880,
+                               0.8529411764705880,
+                               0.8550724637681160,
+                               0.8550724637681160,
+                               0.8550724637681160,
+                               0.8550724637681160,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8805970149253730,
+                               0.8805970149253730,
+                               0.8805970149253730,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8805970149253730,
+                               0.8939393939393940,
+                               0.8923076923076920,
+                               0.8923076923076920,
+                               0.8923076923076920,
+                               0.8787878787878790,
+                               0.8787878787878790,
+                               0.8656716417910450,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8550724637681160,
+                               0.8550724637681160,
+                               0.8550724637681160,
+                               0.8550724637681160,
+                               0.8550724637681160,
+                               0.8529411764705880,
+                               0.8529411764705880,
+                               0.8529411764705880,
+                               0.8529411764705880,
+                               0.8529411764705880,
+                               0.8529411764705880,
+                               0.8529411764705880,
+                               0.8529411764705880,
+                               0.8529411764705880,
+                               0.8529411764705880,
+                               0.8529411764705880,
+                               0.8529411764705880,
+                               0.8656716417910450,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8676470588235290,
+                               0.8550724637681160,
+                               0.8428571428571430,
+                               0.8428571428571430,
+                               0.8428571428571430,
+                               0.8428571428571430,
+                               0.8428571428571430,
+                               0.8428571428571430,
+                               0.8428571428571430,
+                               0.8428571428571430,
+                               0.8405797101449270,
+                               0.8405797101449270,
+                               0.8405797101449270,
+                               0.8285714285714290,
+                               0.8285714285714290,
+                               0.8285714285714290,
+                               0.8285714285714290,
+                               0.8285714285714290,
+                               0.8285714285714290,
+                               0.8235294117647060,
+                               0.8484848484848480,
+                               0.8461538461538460,
+                               0.8461538461538460,
+                               0.8461538461538460,
+                               0.8437500000000000,
+                               0.8181818181818180,
+                               0.8181818181818180,
+                               0.8181818181818180,
+                               0.8208955223880600,
+                               0.8208955223880600,
+                               0.8088235294117650,
+                               0.8088235294117650,
+                               0.8088235294117650,
+                               0.8088235294117650,
+                               0.8088235294117650,
+                               0.8088235294117650,
+                               0.8088235294117650,
+                               0.8088235294117650,
+                               0.7971014492753620,
+                               0.7826086956521740,
+                               0.7826086956521740,
+                               0.7794117647058820,
+                               0.7794117647058820,
+                               0.7910447761194030,
+                               0.8030303030303030,
+                               0.8030303030303030,
+                               0.8000000000000000,
+                               0.7878787878787880,
+                               0.7878787878787880,
+                               0.8000000000000000,
+                               0.7936507936507940,
+                               0.7777777777777780,
+                               0.7580645161290320,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7457627118644070,
+                               0.7096774193548390,
+                               0.7166666666666670,
+                               0.7213114754098360,
+                               0.7213114754098360,
+                               0.7213114754098360,
+                               0.7213114754098360,
+                               0.7213114754098360,
+                               0.7096774193548390,
+                               0.7096774193548390,
+                               0.7096774193548390,
+                               0.7096774193548390,
+                               0.7142857142857140,
+                               0.7142857142857140,
+                               0.6984126984126980,
+                               0.7031250000000000,
+                               0.7031250000000000,
+                               0.7031250000000000,
+                               0.7031250000000000,
+                               0.7031250000000000,
+                               0.7031250000000000,
+                               0.7031250000000000,
+                               0.7076923076923080,
+                               0.7076923076923080,
+                               0.7076923076923080,
+                               0.7076923076923080,
+                               0.7076923076923080,
+                               0.7031250000000000,
+                               0.7031250000000000,
+                               0.7031250000000000,
+                               0.6923076923076920,
+                               0.7031250000000000,
+                               0.6984126984126980,
+                               0.7031250000000000,
+                               0.6984126984126980,
+                               0.6984126984126980,
+                               0.7096774193548390,
+                               0.6984126984126980,
+                               0.6984126984126980,
+                               0.6984126984126980,
+                               0.6984126984126980,
+                               0.6935483870967740,
+                               0.6825396825396830,
+                               0.6825396825396830,
+                               0.6984126984126980,
+                               0.7096774193548390,
+                               0.7096774193548390,
+                               0.7096774193548390,
+                               0.7096774193548390,
+                               0.7213114754098360,
+                               0.7540983606557380,
+                               0.7540983606557380,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7758620689655170,
+                               0.7931034482758620,
+                               0.8000000000000000,
+                               0.8000000000000000,
+                               0.8064516129032260,
+                               0.8196721311475410,
+                               0.8253968253968250,
+                               0.8281250000000000,
+                               0.8281250000000000,
+                               0.8281250000000000,
+                               0.8412698412698410,
+                               0.8437500000000000,
+                               0.8437500000000000,
+                               0.8437500000000000,
+                               0.8412698412698410,
+                               0.8412698412698410,
+                               0.8412698412698410,
+                               0.8412698412698410,
+                               0.8412698412698410,
+                               0.8412698412698410,
+                               0.8412698412698410,
+                               0.8412698412698410,
+                               0.8524590163934430,
+                               0.8524590163934430,
+                               0.8500000000000000,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8500000000000000,
+                               0.8524590163934430,
+                               0.8524590163934430,
+                               0.8524590163934430,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8548387096774190,
+                               0.8412698412698410,
+                               0.8437500000000000,
+                               0.8437500000000000,
+                               0.8437500000000000,
+                               0.8307692307692310,
+                               0.8307692307692310,
+                               0.8307692307692310,
+                               0.8281250000000000,
+                               0.8281250000000000,
+                               0.8281250000000000,
+                               0.8281250000000000,
+                               0.8281250000000000,
+                               0.8281250000000000,
+                               0.8307692307692310,
+                               0.8307692307692310,
+                               0.8307692307692310,
+                               0.8307692307692310,
+                               0.8307692307692310,
+                               0.8307692307692310,
+                               0.8307692307692310,
+                               0.8181818181818180,
+                               0.8181818181818180,
+                               0.8153846153846150,
+                               0.8153846153846150,
+                               0.8281250000000000,
+                               0.8281250000000000,
+                               0.8225806451612900,
+                               0.8225806451612900,
+                               0.8095238095238100,
+                               0.8095238095238100,
+                               0.8225806451612900,
+                               0.8360655737704920,
+                               0.8360655737704920,
+                               0.8360655737704920,
+                               0.8360655737704920,
+                               0.8360655737704920,
+                               0.8360655737704920,
+                               0.8360655737704920,
+                               0.8360655737704920,
+                               0.8360655737704920,
+                               0.8360655737704920,
+                               0.8360655737704920,
+                               0.8360655737704920,
+                               0.8360655737704920,
+                               0.8500000000000000,
+                               0.8500000000000000,
+                               0.8500000000000000,
+                               0.8500000000000000,
+                               0.8500000000000000,
+                               0.8500000000000000,
+                               0.8500000000000000,
+                               0.8500000000000000,
+                               0.8500000000000000,
+                               0.8474576271186440,
+                               0.8500000000000000,
+                               0.8500000000000000,
+                               0.8333333333333330,
+                               0.8333333333333330,
+                               0.8500000000000000,
+                               0.8524590163934430,
+                               0.8387096774193550,
+                               0.8387096774193550,
+                               0.8387096774193550,
+                               0.8387096774193550,
+                               0.8412698412698410,
+                               0.8412698412698410,
+                               0.8412698412698410,
+                               0.8412698412698410,
+                               0.8387096774193550,
+                               0.8225806451612900,
+                               0.8225806451612900,
+                               0.8225806451612900,
+                               0.8225806451612900,
+                               0.8225806451612900,
+                               0.8253968253968250,
+                               0.8253968253968250,
+                               0.8253968253968250,
+                               0.8253968253968250,
+                               0.8253968253968250,
+                               0.8253968253968250,
+                               0.8253968253968250,
+                               0.8095238095238100,
+                               0.8225806451612900,
+                               0.8196721311475410,
+                               0.8166666666666670,
+                               0.8166666666666670,
+                               0.8166666666666670,
+                               0.8166666666666670,
+                               0.8166666666666670,
+                               0.8135593220338980,
+                               0.8135593220338980,
+                               0.7966101694915250,
+                               0.7868852459016390,
+                               0.7741935483870970,
+                               0.7741935483870970,
+                               0.7741935483870970,
+                               0.7741935483870970,
+                               0.7777777777777780,
+                               0.7777777777777780,
+                               0.7741935483870970,
+                               0.7741935483870970,
+                               0.7777777777777780,
+                               0.7741935483870970,
+                               0.7741935483870970,
+                               0.7868852459016390,
+                               0.7868852459016390,
+                               0.7741935483870970,
+                               0.7704918032786880,
+                               0.7580645161290320,
+                               0.7666666666666670,
+                               0.7540983606557380,
+                               0.7540983606557380,
+                               0.7540983606557380,
+                               0.7500000000000000,
+                               0.7377049180327870,
+                               0.7377049180327870,
+                               0.7377049180327870,
+                               0.7377049180327870,
+                               0.7377049180327870,
+                               0.7377049180327870,
+                               0.7377049180327870,
+                               0.7377049180327870,
+                               0.7377049180327870,
+                               0.7377049180327870,
+                               0.7377049180327870,
+                               0.7377049180327870,
+                               0.7377049180327870,
+                               0.7258064516129030,
+                               0.7142857142857140,
+                               0.7096774193548390,
+                               0.7049180327868850,
+                               0.7049180327868850,
+                               0.7166666666666670,
+                               0.7118644067796610,
+                               0.7118644067796610,
+                               0.7118644067796610,
+                               0.7118644067796610,
+                               0.7118644067796610,
+                               0.7118644067796610,
+                               0.7118644067796610,
+                               0.7241379310344830,
+                               0.7118644067796610,
+                               0.7000000000000000,
+                               0.6885245901639340,
+                               0.7000000000000000,
+                               0.7000000000000000,
+                               0.6949152542372880,
+                               0.6949152542372880,
+                               0.6949152542372880,
+                               0.6949152542372880,
+                               0.7068965517241380,
+                               0.6949152542372880,
+                               0.6896551724137930,
+                               0.7017543859649120,
+                               0.7017543859649120,
+                               0.7017543859649120,
+                               0.6779661016949150,
+                               0.6666666666666670,
+                               0.6610169491525420,
+                               0.6610169491525420,
+                               0.6610169491525420,
+                               0.6610169491525420,
+                               0.6500000000000000,
+                               0.6500000000000000,
+                               0.6440677966101690,
+                               0.6440677966101690,
+                               0.6428571428571430,
+                               0.6428571428571430,
+                               0.6428571428571430,
+                               0.6428571428571430,
+                               0.6315789473684210,
+                               0.6206896551724140,
+                               0.6206896551724140,
+                               0.6034482758620690,
+                               0.6034482758620690,
+                               0.6034482758620690,
+                               0.6034482758620690,
+                               0.6034482758620690,
+                               0.6140350877192980,
+                               0.6140350877192980,
+                               0.6071428571428570,
+                               0.6071428571428570,
+                               0.6071428571428570,
+                               0.5964912280701750,
+                               0.5862068965517240,
+                               0.5862068965517240,
+                               0.5862068965517240,
+                               0.5862068965517240,
+                               0.5964912280701750,
+                               0.6181818181818180,
+                               0.5964912280701750,
+                               0.5964912280701750,
+                               0.5964912280701750,
+                               0.5892857142857140,
+                               0.5689655172413790,
+                               0.5614035087719300,
+                               0.5614035087719300,
+                               0.5535714285714290,
+                               0.5555555555555560,
+                               0.5555555555555560,
+                               0.5555555555555560,
+                               0.5636363636363640,
+                               0.5636363636363640,
+                               0.5636363636363640,
+                               0.5636363636363640,
+                               0.5636363636363640,
+                               0.5636363636363640,
+                               0.5740740740740740,
+                               0.5740740740740740,
+                               0.5740740740740740,
+                               0.5740740740740740,
+                               0.5740740740740740,
+                               0.5576923076923080,
+                               0.5576923076923080,
+                               0.5490196078431370,
+                               0.5490196078431370,
+                               0.5600000000000000,
+                               0.5400000000000000,
+                               0.5400000000000000,
+                               0.5400000000000000,
+                               0.5400000000000000,
+                               0.5400000000000000,
+                               0.5400000000000000,
+                               0.5400000000000000,
+                               0.5192307692307690,
+                               0.5192307692307690,
+                               0.5192307692307690,
+                               0.4905660377358490,
+                               0.4905660377358490,
+                               0.4905660377358490,
+                               0.4814814814814810,
+                               0.4814814814814810,
+                               0.4814814814814810,
+                               0.4814814814814810,
+                               0.4561403508771930,
+                               0.4561403508771930,
+                               0.4363636363636360,
+                               0.4363636363636360,
+                               0.4363636363636360,
+                               0.4259259259259260,
+                               0.3962264150943400,
+                               0.3962264150943400,
+                               0.3846153846153850,
+                               0.3846153846153850,
+                               0.3846153846153850,
+                               0.3921568627450980,
+                               0.3921568627450980,
+                               0.3773584905660380,
+                               0.3333333333333330,
+                               0.3148148148148150,
+                               0.3018867924528300,
+                               0.2962962962962960,
+                               0.3018867924528300,
+                               0.3018867924528300,
+                               0.3018867924528300,
+                               0.3018867924528300,
+                               0.3076923076923080,
+                               0.3137254901960780,
+                               0.3137254901960780,
+                               0.3137254901960780,
+                               0.2857142857142860,
+                               0.2857142857142860,
+                               0.2800000000000000,
+                               0.2745098039215690,
+                               0.2692307692307690,
+                               0.2745098039215690,
+                               0.2600000000000000,
+                               0.2600000000000000,
+                               0.2600000000000000,
+                               0.2600000000000000,
+                               0.2549019607843140,
+                               0.2500000000000000,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.1960784313725490,
+                               0.1923076923076920,
+                               0.1923076923076920,
+                               0.1923076923076920,
+                               0.1923076923076920,
+                               0.1764705882352940,
+                               0.1764705882352940,
+                               0.1764705882352940,
+                               0.1764705882352940,
+                               0.1923076923076920,
+                               0.1923076923076920,
+                               0.1960784313725490,
+                               0.1960784313725490,
+                               0.1960784313725490,
+                               0.2000000000000000,
+                               0.1923076923076920,
+                               0.1960784313725490,
+                               0.1800000000000000,
+                               0.1800000000000000,
+                               0.1764705882352940,
+                               0.1800000000000000,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1698113207547170,
+                               0.1851851851851850,
+                               0.1851851851851850,
+                               0.1886792452830190,
+                               0.1851851851851850,
+                               0.1886792452830190,
+                               0.1886792452830190,
+                               0.1923076923076920,
+                               0.1923076923076920,
+                               0.1886792452830190,
+                               0.1886792452830190,
+                               0.1764705882352940,
+                               0.1600000000000000,
+                               0.1538461538461540,
+                               0.1481481481481480,
+                               0.1538461538461540,
+                               0.1538461538461540,
+                               0.1509433962264150,
+                               0.1346153846153850,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1153846153846150,
+                               0.1153846153846150,
+                               0.1176470588235290,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0943396226415094,
+                               0.0943396226415094,
+                               0.0943396226415094,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0909090909090909,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0847457627118644,
+                               0.0819672131147541,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0793650793650794,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0833333333333333,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0833333333333333,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0727272727272727,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0714285714285714,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0701754385964912,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0483870967741936,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0327868852459016,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0333333333333333,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0333333333333333,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0166666666666667,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0166666666666667,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0153846153846154,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0322580645161290,
+                               0.0327868852459016,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0491803278688525,
+                               0.0500000000000000,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0701754385964912,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.1071428571428570,
+                               0.1071428571428570,
+                               0.1071428571428570,
+                               0.1071428571428570,
+                               0.1071428571428570,
+                               0.1071428571428570,
+                               0.1071428571428570,
+                               0.1052631578947370,
+                               0.1052631578947370,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1111111111111110,
+                               0.1132075471698110,
+                               0.1153846153846150,
+                               0.1176470588235290,
+                               0.1176470588235290,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1509433962264150,
+                               0.1509433962264150,
+                               0.1666666666666670,
+                               0.1666666666666670,
+                               0.1818181818181820,
+                               0.1851851851851850,
+                               0.2280701754385960,
+                               0.2413793103448280,
+                               0.2413793103448280,
+                               0.2413793103448280,
+                               0.2413793103448280,
+                               0.2413793103448280,
+                               0.2413793103448280,
+                               0.2413793103448280,
+                               0.2413793103448280,
+                               0.2413793103448280,
+                               0.2413793103448280,
+                               0.2500000000000000,
+                               0.2545454545454540,
+                               0.2592592592592590,
+                               0.2500000000000000,
+                               0.2500000000000000,
+                               0.2500000000000000,
+                               0.2500000000000000,
+                               0.2452830188679250,
+                               0.2592592592592590,
+                               0.2592592592592590,
+                               0.2592592592592590,
+                               0.2592592592592590,
+                               0.2727272727272730,
+                               0.2727272727272730,
+                               0.2727272727272730,
+                               0.2909090909090910,
+                               0.2909090909090910,
+                               0.2962962962962960,
+                               0.3090909090909090,
+                               0.3090909090909090,
+                               0.3090909090909090,
+                               0.3090909090909090,
+                               0.3148148148148150,
+                               0.3148148148148150,
+                               0.3148148148148150,
+                               0.3207547169811320,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3396226415094340,
+                               0.3396226415094340,
+                               0.3518518518518520,
+                               0.3584905660377360,
+                               0.3703703703703700,
+                               0.3703703703703700,
+                               0.3703703703703700,
+                               0.3703703703703700,
+                               0.3703703703703700,
+                               0.3818181818181820,
+                               0.3818181818181820,
+                               0.4074074074074070,
+                               0.4074074074074070,
+                               0.4074074074074070,
+                               0.4074074074074070,
+                               0.4150943396226420,
+                               0.4150943396226420,
+                               0.4150943396226420,
+                               0.4150943396226420,
+                               0.4259259259259260,
+                               0.4150943396226420,
+                               0.4230769230769230,
+                               0.4230769230769230,
+                               0.4230769230769230,
+                               0.4230769230769230,
+                               0.4313725490196080,
+                               0.4423076923076920,
+                               0.4509803921568630,
+                               0.4509803921568630,
+                               0.4509803921568630,
+                               0.4509803921568630,
+                               0.4693877551020410,
+                               0.4693877551020410,
+                               0.4791666666666670,
+                               0.4791666666666670,
+                               0.4791666666666670,
+                               0.4893617021276600,
+                               0.5000000000000000,
+                               0.5000000000000000,
+                               0.5111111111111110,
+                               0.5111111111111110,
+                               0.5217391304347830,
+                               0.5217391304347830,
+                               0.5217391304347830,
+                               0.5333333333333330,
+                               0.5581395348837210,
+                               0.5581395348837210,
+                               0.5681818181818180,
+                               0.5777777777777780,
+                               0.5652173913043480,
+                               0.5531914893617020,
+                               0.5777777777777780,
+                               0.5777777777777780,
+                               0.5909090909090910,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.6250000000000000,
+                               0.6250000000000000,
+                               0.6382978723404260,
+                               0.6382978723404260,
+                               0.6382978723404260,
+                               0.6382978723404260,
+                               0.6382978723404260,
+                               0.6382978723404260,
+                               0.6382978723404260,
+                               0.6521739130434780,
+                               0.6739130434782610,
+                               0.6888888888888890,
+                               0.7083333333333330,
+                               0.7083333333333330,
+                               0.7083333333333330,
+                               0.7083333333333330,
+                               0.7200000000000000,
+                               0.7346938775510200,
+                               0.7450980392156860,
+                               0.7450980392156860,
+                               0.7450980392156860,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7592592592592590,
+                               0.7592592592592590,
+                               0.7592592592592590,
+                               0.7592592592592590,
+                               0.7592592592592590,
+                               0.7454545454545450,
+                               0.7592592592592590,
+                               0.7592592592592590,
+                               0.7678571428571430,
+                               0.7678571428571430,
+                               0.7678571428571430,
+                               0.7543859649122810,
+                               0.7719298245614030,
+                               0.7719298245614030,
+                               0.7758620689655170,
+                               0.7758620689655170,
+                               0.7796610169491530,
+                               0.7796610169491530,
+                               0.7796610169491530,
+                               0.7796610169491530,
+                               0.7796610169491530,
+                               0.7796610169491530,
+                               0.7758620689655170,
+                               0.7758620689655170,
+                               0.7894736842105260,
+                               0.7894736842105260,
+                               0.7894736842105260,
+                               0.7894736842105260,
+                               0.7894736842105260,
+                               0.7894736842105260,
+                               0.7931034482758620,
+                               0.7931034482758620,
+                               0.7931034482758620,
+                               0.7931034482758620,
+                               0.8070175438596490,
+                               0.8214285714285710,
+                               0.8245614035087720,
+                               0.8245614035087720,
+                               0.8245614035087720,
+                               0.8245614035087720,
+                               0.8245614035087720,
+                               0.8245614035087720,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8392857142857140,
+                               0.8545454545454550,
+                               0.8545454545454550,
+                               0.8545454545454550,
+                               0.8545454545454550,
+                               0.8545454545454550,
+                               0.8545454545454550,
+                               0.8545454545454550,
+                               0.8545454545454550,
+                               0.8518518518518520,
+                               0.8518518518518520,
+                               0.8518518518518520,
+                               0.8363636363636360,
+                               0.8545454545454550,
+                               0.8571428571428570,
+                               0.8596491228070170,
+                               0.8596491228070170,
+                               0.8596491228070170,
+                               0.8596491228070170,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8596491228070170,
+                               0.8596491228070170,
+                               0.8596491228070170,
+                               0.8596491228070170,
+                               0.8596491228070170,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8545454545454550,
+                               0.8545454545454550,
+                               0.8545454545454550,
+                               0.8571428571428570,
+                               0.8596491228070170,
+                               0.8596491228070170,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8644067796610170,
+                               0.8644067796610170,
+                               0.8644067796610170,
+                               0.8793103448275860,
+                               0.8771929824561400,
+                               0.8771929824561400,
+                               0.8793103448275860,
+                               0.8793103448275860,
+                               0.8793103448275860,
+                               0.8793103448275860,
+                               0.8813559322033900,
+                               0.8813559322033900,
+                               0.8813559322033900,
+                               0.8813559322033900,
+                               0.8813559322033900,
+                               0.8813559322033900,
+                               0.8813559322033900,
+                               0.8813559322033900,
+                               0.8813559322033900,
+                               0.8813559322033900,
+                               0.8813559322033900,
+                               0.8771929824561400,
+                               0.8771929824561400,
+                               0.8771929824561400,
+                               0.8771929824561400,
+                               0.8771929824561400,
+                               0.8771929824561400,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8448275862068960,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8392857142857140,
+                               0.8333333333333330,
+                               0.8301886792452830,
+                               0.8301886792452830,
+                               0.8301886792452830,
+                               0.8301886792452830,
+                               0.8235294117647060,
+                               0.8235294117647060,
+                               0.8269230769230770,
+                               0.8269230769230770,
+                               0.8431372549019610,
+                               0.8431372549019610,
+                               0.8490566037735850,
+                               0.8490566037735850,
+                               0.8518518518518520,
+                               0.8518518518518520,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8571428571428570,
+                               0.8545454545454550,
+                               0.8545454545454550,
+                               0.8596491228070170,
+                               0.8596491228070170,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8596491228070170,
+                               0.8596491228070170,
+                               0.8596491228070170,
+                               0.8596491228070170,
+                               0.8596491228070170,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8545454545454550,
+                               0.8545454545454550,
+                               0.8518518518518520,
+                               0.8518518518518520,
+                               0.8545454545454550,
+                               0.8596491228070170,
+                               0.8596491228070170,
+                               0.8596491228070170,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8644067796610170,
+                               0.8644067796610170,
+                               0.8644067796610170,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8666666666666670,
+                               0.8813559322033900,
+                               0.8793103448275860,
+                               0.8793103448275860,
+                               0.8771929824561400,
+                               0.8771929824561400,
+                               0.8771929824561400,
+                               0.8771929824561400,
+                               0.8771929824561400,
+                               0.8771929824561400,
+                               0.8793103448275860,
+                               0.8771929824561400,
+                               0.8771929824561400,
+                               0.8620689655172410,
+                               0.8644067796610170,
+                               0.8644067796610170,
+                               0.8644067796610170,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8771929824561400,
+                               0.8771929824561400,
+                               0.8771929824561400,
+                               0.8771929824561400,
+                               0.8771929824561400,
+                               0.8750000000000000,
+                               0.8771929824561400,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8750000000000000,
+                               0.8771929824561400,
+                               0.8771929824561400,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8620689655172410,
+                               0.8474576271186440,
+                               0.8474576271186440,
+                               0.8448275862068960,
+                               0.8448275862068960,
+                               0.8448275862068960,
+                               0.8448275862068960,
+                               0.8448275862068960,
+                               0.8448275862068960,
+                               0.8448275862068960,
+                               0.8448275862068960,
+                               0.8448275862068960,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8421052631578950,
+                               0.8448275862068960,
+                               0.8448275862068960,
+                               0.8571428571428570,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8727272727272730,
+                               0.8703703703703700,
+                               0.8867924528301890,
+                               0.8867924528301890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8888888888888890,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8703703703703700,
+                               0.8679245283018870,
+                               0.8679245283018870,
+                               0.8703703703703700,
+                               0.8518518518518520,
+                               0.8518518518518520,
+                               0.8518518518518520,
+                               0.8679245283018870,
+                               0.8679245283018870,
+                               0.8653846153846150,
+                               0.8653846153846150,
+                               0.8627450980392160,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8571428571428570,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8600000000000000,
+                               0.8627450980392160,
+                               0.8627450980392160,
+                               0.8627450980392160,
+                               0.8627450980392160,
+                               0.8600000000000000,
+                               0.8775510204081630,
+                               0.8750000000000000,
+                               0.8571428571428570,
+                               0.8400000000000000,
+                               0.8400000000000000,
+                               0.8400000000000000,
+                               0.8235294117647060,
+                               0.8235294117647060,
+                               0.8235294117647060,
+                               0.8235294117647060,
+                               0.8235294117647060,
+                               0.8235294117647060,
+                               0.8076923076923080,
+                               0.7924528301886790,
+                               0.7924528301886790,
+                               0.7818181818181820,
+                               0.7818181818181820,
+                               0.7818181818181820,
+                               0.7818181818181820,
+                               0.7818181818181820,
+                               0.7818181818181820,
+                               0.7818181818181820,
+                               0.7818181818181820,
+                               0.7857142857142860,
+                               0.7857142857142860,
+                               0.7857142857142860,
+                               0.7924528301886790,
+                               0.7924528301886790,
+                               0.7924528301886790,
+                               0.7924528301886790,
+                               0.7924528301886790,
+                               0.8076923076923080,
+                               0.7924528301886790,
+                               0.7924528301886790,
+                               0.7962962962962960,
+                               0.7962962962962960,
+                               0.7962962962962960,
+                               0.7962962962962960,
+                               0.7962962962962960,
+                               0.7962962962962960,
+                               0.7962962962962960,
+                               0.8113207547169810,
+                               0.7924528301886790,
+                               0.7924528301886790,
+                               0.7777777777777780,
+                               0.7777777777777780,
+                               0.7636363636363640,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7500000000000000,
+                               0.7368421052631580,
+                               0.7368421052631580,
+                               0.7368421052631580,
+                               0.7368421052631580,
+                               0.7241379310344830,
+                               0.7192982456140350,
+                               0.7192982456140350,
+                               0.7192982456140350,
+                               0.7192982456140350,
+                               0.7192982456140350,
+                               0.7192982456140350,
+                               0.7142857142857140,
+                               0.7142857142857140,
+                               0.7142857142857140,
+                               0.7142857142857140,
+                               0.7090909090909090,
+                               0.7090909090909090,
+                               0.7090909090909090,
+                               0.7037037037037040,
+                               0.7037037037037040,
+                               0.7037037037037040,
+                               0.7037037037037040,
+                               0.7037037037037040,
+                               0.6851851851851850,
+                               0.6909090909090910,
+                               0.6909090909090910,
+                               0.6909090909090910,
+                               0.6909090909090910,
+                               0.7037037037037040,
+                               0.7037037037037040,
+                               0.7037037037037040,
+                               0.7037037037037040,
+                               0.6981132075471700,
+                               0.6981132075471700,
+                               0.6981132075471700,
+                               0.6923076923076920,
+                               0.6923076923076920,
+                               0.6923076923076920,
+                               0.6923076923076920,
+                               0.6923076923076920,
+                               0.6792452830188680,
+                               0.6792452830188680,
+                               0.6792452830188680,
+                               0.6792452830188680,
+                               0.6730769230769230,
+                               0.6730769230769230,
+                               0.6666666666666670,
+                               0.6538461538461540,
+                               0.6538461538461540,
+                               0.6538461538461540,
+                               0.6538461538461540,
+                               0.6538461538461540,
+                               0.6538461538461540,
+                               0.6538461538461540,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6666666666666670,
+                               0.6538461538461540,
+                               0.6470588235294120,
+                               0.6346153846153850,
+                               0.6346153846153850,
+                               0.6346153846153850,
+                               0.6346153846153850,
+                               0.6346153846153850,
+                               0.6346153846153850,
+                               0.6400000000000000,
+                               0.6326530612244900,
+                               0.6326530612244900,
+                               0.6326530612244900,
+                               0.6326530612244900,
+                               0.6326530612244900,
+                               0.6250000000000000,
+                               0.6326530612244900,
+                               0.6326530612244900,
+                               0.6326530612244900,
+                               0.6250000000000000,
+                               0.6000000000000000,
+                               0.6000000000000000,
+                               0.5882352941176470,
+                               0.5882352941176470,
+                               0.5800000000000000,
+                               0.5600000000000000,
+                               0.5714285714285710,
+                               0.5714285714285710,
+                               0.5714285714285710,
+                               0.5625000000000000,
+                               0.5625000000000000,
+                               0.5625000000000000,
+                               0.5510204081632650,
+                               0.5294117647058820,
+                               0.5294117647058820,
+                               0.5384615384615380,
+                               0.5384615384615380,
+                               0.5384615384615380,
+                               0.5384615384615380,
+                               0.5000000000000000,
+                               0.5000000000000000,
+                               0.4893617021276600,
+                               0.4791666666666670,
+                               0.4680851063829790,
+                               0.4782608695652170,
+                               0.4666666666666670,
+                               0.4666666666666670,
+                               0.4666666666666670,
+                               0.4666666666666670,
+                               0.4565217391304350,
+                               0.4565217391304350,
+                               0.4255319148936170,
+                               0.4130434782608700,
+                               0.3863636363636360,
+                               0.3777777777777780,
+                               0.3636363636363640,
+                               0.3636363636363640,
+                               0.3333333333333330,
+                               0.3488372093023260,
+                               0.3636363636363640,
+                               0.3636363636363640,
+                               0.3488372093023260,
+                               0.3409090909090910,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3181818181818180,
+                               0.3255813953488370,
+                               0.3095238095238100,
+                               0.3095238095238100,
+                               0.2926829268292680,
+                               0.2926829268292680,
+                               0.2857142857142860,
+                               0.2857142857142860,
+                               0.2790697674418600,
+                               0.2790697674418600,
+                               0.2727272727272730,
+                               0.2727272727272730,
+                               0.2790697674418600,
+                               0.2790697674418600,
+                               0.2790697674418600,
+                               0.2790697674418600,
+                               0.2790697674418600,
+                               0.2619047619047620,
+                               0.2558139534883720,
+                               0.2558139534883720,
+                               0.2380952380952380,
+                               0.2380952380952380,
+                               0.2272727272727270,
+                               0.2142857142857140,
+                               0.2045454545454550,
+                               0.2000000000000000,
+                               0.1777777777777780,
+                               0.1777777777777780,
+                               0.1702127659574470,
+                               0.1521739130434780,
+                               0.1458333333333330,
+                               0.1458333333333330,
+                               0.1600000000000000,
+                               0.1600000000000000,
+                               0.1600000000000000,
+                               0.1600000000000000,
+                               0.1568627450980390,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1372549019607840,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1132075471698110,
+                               0.1153846153846150,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.1020408163265310,
+                               0.1020408163265310,
+                               0.1020408163265310,
+                               0.1020408163265310,
+                               0.1020408163265310,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1020408163265310,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1020408163265310,
+                               0.1020408163265310,
+                               0.1000000000000000,
+                               0.1020408163265310,
+                               0.1020408163265310,
+                               0.1020408163265310,
+                               0.1020408163265310,
+                               0.1041666666666670,
+                               0.1041666666666670,
+                               0.1020408163265310,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0851063829787234,
+                               0.0851063829787234,
+                               0.0851063829787234,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0851063829787234,
+                               0.0851063829787234,
+                               0.0851063829787234,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0800000000000000,
+                               0.0784313725490196,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0754716981132075,
+                               0.0754716981132075,
+                               0.0754716981132075,
+                               0.0754716981132075,
+                               0.0754716981132075,
+                               0.0754716981132075,
+                               0.0754716981132075,
+                               0.0754716981132075,
+                               0.0754716981132075,
+                               0.0576923076923077,
+                               0.0576923076923077,
+                               0.0576923076923077,
+                               0.0576923076923077,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0600000000000000,
+                               0.0600000000000000,
+                               0.0600000000000000,
+                               0.0600000000000000,
+                               0.0600000000000000,
+                               0.0600000000000000,
+                               0.0600000000000000,
+                               0.0600000000000000,
+                               0.0600000000000000,
+                               0.0600000000000000,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0600000000000000,
+                               0.0600000000000000,
+                               0.0600000000000000,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0576923076923077,
+                               0.0576923076923077,
+                               0.0576923076923077,
+                               0.0576923076923077,
+                               0.0566037735849057,
+                               0.0566037735849057,
+                               0.0566037735849057,
+                               0.0566037735849057,
+                               0.0566037735849057,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0545454545454545,
+                               0.0535714285714286,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0357142857142857,
+                               0.0357142857142857,
+                               0.0357142857142857,
+                               0.0357142857142857,
+                               0.0363636363636364,
+                               0.0357142857142857,
+                               0.0357142857142857,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0377358490566038,
+                               0.0377358490566038,
+                               0.0377358490566038,
+                               0.0377358490566038,
+                               0.0384615384615385,
+                               0.0392156862745098,
+                               0.0392156862745098,
+                               0.0400000000000000,
+                               0.0400000000000000,
+                               0.0392156862745098,
+                               0.0392156862745098,
+                               0.0377358490566038,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0377358490566038,
+                               0.0392156862745098,
+                               0.0392156862745098,
+                               0.0392156862745098,
+                               0.0392156862745098,
+                               0.0392156862745098,
+                               0.0392156862745098,
+                               0.0377358490566038,
+                               0.0377358490566038,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0185185185185185,
+                               0.0181818181818182,
+                               0.0181818181818182,
+                               0.0181818181818182,
+                               0.0181818181818182,
+                               0.0181818181818182,
+                               0.0181818181818182,
+                               0.0181818181818182,
+                               0.0181818181818182,
+                               0.0181818181818182,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000
+                       }
+               },
+               { PLACE_CATEG_ID_OTHER,
+                       {
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0178571428571429,
+                               0.0178571428571429,
+                               0.0178571428571429,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0178571428571429,
+                               0.0178571428571429,
+                               0.0178571428571429,
+                               0.0178571428571429,
+                               0.0178571428571429,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0181818181818182,
+                               0.0181818181818182,
+                               0.0178571428571429,
+                               0.0178571428571429,
+                               0.0178571428571429,
+                               0.0178571428571429,
+                               0.0185185185185185,
+                               0.0185185185185185,
+                               0.0185185185185185,
+                               0.0185185185185185,
+                               0.0185185185185185,
+                               0.0185185185185185,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0535714285714286,
+                               0.0535714285714286,
+                               0.0535714285714286,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0377358490566038,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0384615384615385,
+                               0.0384615384615385,
+                               0.0384615384615385,
+                               0.0384615384615385,
+                               0.0196078431372549,
+                               0.0196078431372549,
+                               0.0192307692307692,
+                               0.0192307692307692,
+                               0.0192307692307692,
+                               0.0196078431372549,
+                               0.0196078431372549,
+                               0.0196078431372549,
+                               0.0192307692307692,
+                               0.0192307692307692,
+                               0.0192307692307692,
+                               0.0192307692307692,
+                               0.0192307692307692,
+                               0.0192307692307692,
+                               0.0192307692307692,
+                               0.0192307692307692,
+                               0.0192307692307692,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0192307692307692,
+                               0.0192307692307692,
+                               0.0192307692307692,
+                               0.0192307692307692,
+                               0.0192307692307692,
+                               0.0192307692307692,
+                               0.0192307692307692,
+                               0.0185185185185185,
+                               0.0185185185185185,
+                               0.0185185185185185,
+                               0.0185185185185185,
+                               0.0185185185185185,
+                               0.0188679245283019,
+                               0.0185185185185185,
+                               0.0185185185185185,
+                               0.0185185185185185,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0192307692307692,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0181818181818182,
+                               0.0181818181818182,
+                               0.0181818181818182,
+                               0.0181818181818182,
+                               0.0181818181818182,
+                               0.0181818181818182,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0192307692307692,
+                               0.0200000000000000,
+                               0.0200000000000000,
+                               0.0208333333333333,
+                               0.0212765957446808,
+                               0.0212765957446808,
+                               0.0212765957446808,
+                               0.0212765957446808,
+                               0.0416666666666667,
+                               0.0400000000000000,
+                               0.0392156862745098,
+                               0.0384615384615385,
+                               0.0384615384615385,
+                               0.0384615384615385,
+                               0.0384615384615385,
+                               0.0392156862745098,
+                               0.0400000000000000,
+                               0.0400000000000000,
+                               0.0400000000000000,
+                               0.0392156862745098,
+                               0.0392156862745098,
+                               0.0392156862745098,
+                               0.0392156862745098,
+                               0.0392156862745098,
+                               0.0384615384615385,
+                               0.0384615384615385,
+                               0.0400000000000000,
+                               0.0392156862745098,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0408163265306122,
+                               0.0425531914893617,
+                               0.0425531914893617,
+                               0.0425531914893617,
+                               0.0425531914893617,
+                               0.0444444444444444,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0425531914893617,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0444444444444444,
+                               0.0444444444444444,
+                               0.0444444444444444,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0454545454545455,
+                               0.0454545454545455,
+                               0.0454545454545455,
+                               0.0454545454545455,
+                               0.0444444444444444,
+                               0.0444444444444444,
+                               0.0465116279069768,
+                               0.0454545454545455,
+                               0.0454545454545455,
+                               0.0454545454545455,
+                               0.0444444444444444,
+                               0.0444444444444444,
+                               0.0444444444444444,
+                               0.0454545454545455,
+                               0.0454545454545455,
+                               0.0454545454545455,
+                               0.0408163265306122,
+                               0.0408163265306122,
+                               0.0400000000000000,
+                               0.0392156862745098,
+                               0.0392156862745098,
+                               0.0392156862745098,
+                               0.0377358490566038,
+                               0.0377358490566038,
+                               0.0384615384615385,
+                               0.0384615384615385,
+                               0.0377358490566038,
+                               0.0377358490566038,
+                               0.0377358490566038,
+                               0.0377358490566038,
+                               0.0357142857142857,
+                               0.0357142857142857,
+                               0.0357142857142857,
+                               0.0357142857142857,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0357142857142857,
+                               0.0357142857142857,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0500000000000000,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0666666666666667,
+                               0.0677966101694915,
+                               0.0666666666666667,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0819672131147541,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0508474576271187,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0508474576271187,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0655737704918033,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0517241379310345,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0535714285714286,
+                               0.0535714285714286,
+                               0.0535714285714286,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0740740740740741,
+                               0.0740740740740741,
+                               0.0909090909090909,
+                               0.0925925925925926,
+                               0.1090909090909090,
+                               0.1111111111111110,
+                               0.1132075471698110,
+                               0.1153846153846150,
+                               0.1153846153846150,
+                               0.1153846153846150,
+                               0.0943396226415094,
+                               0.0943396226415094,
+                               0.0961538461538462,
+                               0.0943396226415094,
+                               0.0943396226415094,
+                               0.0943396226415094,
+                               0.0925925925925926,
+                               0.0909090909090909,
+                               0.1228070175438600,
+                               0.1228070175438600,
+                               0.1228070175438600,
+                               0.1228070175438600,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1228070175438600,
+                               0.1206896551724140,
+                               0.1206896551724140,
+                               0.1228070175438600,
+                               0.1071428571428570,
+                               0.1071428571428570,
+                               0.0909090909090909,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0892857142857143,
+                               0.0892857142857143,
+                               0.0892857142857143,
+                               0.1052631578947370,
+                               0.1052631578947370,
+                               0.1052631578947370,
+                               0.1071428571428570,
+                               0.1071428571428570,
+                               0.1071428571428570,
+                               0.1071428571428570,
+                               0.1071428571428570,
+                               0.1071428571428570,
+                               0.1071428571428570,
+                               0.1250000000000000,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.1090909090909090,
+                               0.1071428571428570,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1071428571428570,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0892857142857143,
+                               0.0892857142857143,
+                               0.0892857142857143,
+                               0.0892857142857143,
+                               0.0877192982456140,
+                               0.1071428571428570,
+                               0.1071428571428570,
+                               0.1228070175438600,
+                               0.1228070175438600,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1071428571428570,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1296296296296300,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1132075471698110,
+                               0.1153846153846150,
+                               0.1153846153846150,
+                               0.0980392156862745,
+                               0.1132075471698110,
+                               0.1153846153846150,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.1153846153846150,
+                               0.1176470588235290,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1400000000000000,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1600000000000000,
+                               0.1836734693877550,
+                               0.1836734693877550,
+                               0.1836734693877550,
+                               0.1632653061224490,
+                               0.1632653061224490,
+                               0.1800000000000000,
+                               0.1914893617021280,
+                               0.1914893617021280,
+                               0.1914893617021280,
+                               0.1914893617021280,
+                               0.1914893617021280,
+                               0.1914893617021280,
+                               0.1956521739130430,
+                               0.1956521739130430,
+                               0.1956521739130430,
+                               0.1956521739130430,
+                               0.2173913043478260,
+                               0.2173913043478260,
+                               0.2127659574468080,
+                               0.2127659574468080,
+                               0.2127659574468080,
+                               0.2040816326530610,
+                               0.2000000000000000,
+                               0.1818181818181820,
+                               0.1818181818181820,
+                               0.1818181818181820,
+                               0.1818181818181820,
+                               0.1627906976744190,
+                               0.1627906976744190,
+                               0.1627906976744190,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1463414634146340,
+                               0.1463414634146340,
+                               0.1860465116279070,
+                               0.1860465116279070,
+                               0.2045454545454550,
+                               0.2093023255813950,
+                               0.2093023255813950,
+                               0.2093023255813950,
+                               0.2272727272727270,
+                               0.2272727272727270,
+                               0.2608695652173910,
+                               0.2608695652173910,
+                               0.2444444444444440,
+                               0.2444444444444440,
+                               0.2954545454545450,
+                               0.2954545454545450,
+                               0.3404255319148940,
+                               0.3333333333333330,
+                               0.3265306122448980,
+                               0.3265306122448980,
+                               0.3200000000000000,
+                               0.3265306122448980,
+                               0.3400000000000000,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3269230769230770,
+                               0.3207547169811320,
+                               0.3396226415094340,
+                               0.3396226415094340,
+                               0.3333333333333330,
+                               0.3269230769230770,
+                               0.3207547169811320,
+                               0.3207547169811320,
+                               0.3207547169811320,
+                               0.3148148148148150,
+                               0.3148148148148150,
+                               0.3148148148148150,
+                               0.3090909090909090,
+                               0.3214285714285710,
+                               0.3214285714285710,
+                               0.3214285714285710,
+                               0.3272727272727270,
+                               0.3214285714285710,
+                               0.3214285714285710,
+                               0.3214285714285710,
+                               0.3214285714285710,
+                               0.3214285714285710,
+                               0.3214285714285710,
+                               0.3214285714285710,
+                               0.3214285714285710,
+                               0.3214285714285710,
+                               0.3148148148148150,
+                               0.3148148148148150,
+                               0.3148148148148150,
+                               0.3148148148148150,
+                               0.3090909090909090,
+                               0.3148148148148150,
+                               0.2127659574468080,
+                               0.2127659574468080,
+                               0.2127659574468080,
+                               0.2127659574468080,
+                               0.2173913043478260,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.1818181818181820,
+                               0.1818181818181820,
+                               0.1777777777777780,
+                               0.1777777777777780,
+                               0.1777777777777780,
+                               0.1777777777777780,
+                               0.1521739130434780,
+                               0.1521739130434780,
+                               0.1521739130434780,
+                               0.1304347826086960,
+                               0.1304347826086960,
+                               0.1304347826086960,
+                               0.1276595744680850,
+                               0.1276595744680850,
+                               0.1276595744680850,
+                               0.1250000000000000,
+                               0.1600000000000000,
+                               0.1600000000000000,
+                               0.1632653061224490,
+                               0.1666666666666670,
+                               0.1666666666666670,
+                               0.1666666666666670,
+                               0.1800000000000000,
+                               0.1800000000000000,
+                               0.1800000000000000,
+                               0.1960784313725490,
+                               0.1960784313725490,
+                               0.1923076923076920,
+                               0.1923076923076920,
+                               0.1923076923076920,
+                               0.1886792452830190,
+                               0.1886792452830190,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1568627450980390,
+                               0.1568627450980390,
+                               0.1568627450980390,
+                               0.1568627450980390,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1372549019607840,
+                               0.1372549019607840,
+                               0.1538461538461540,
+                               0.1538461538461540,
+                               0.1200000000000000,
+                               0.1200000000000000,
+                               0.1346153846153850,
+                               0.1372549019607840,
+                               0.1372549019607840,
+                               0.1200000000000000,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0800000000000000,
+                               0.0800000000000000,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0784313725490196,
+                               0.0961538461538462,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1153846153846150,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.0943396226415094,
+                               0.0943396226415094,
+                               0.0925925925925926,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0925925925925926,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0740740740740741,
+                               0.0740740740740741,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0689655172413793,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0701754385964912,
+                               0.0689655172413793,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0689655172413793,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0500000000000000,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0655737704918033,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0625000000000000,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0625000000000000,
+                               0.0625000000000000,
+                               0.0625000000000000,
+                               0.0625000000000000,
+                               0.0625000000000000,
+                               0.0625000000000000,
+                               0.0625000000000000,
+                               0.0625000000000000,
+                               0.0625000000000000,
+                               0.0625000000000000,
+                               0.0625000000000000,
+                               0.0625000000000000,
+                               0.0625000000000000,
+                               0.0625000000000000,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0172413793103448,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0178571428571429,
+                               0.0181818181818182,
+                               0.0357142857142857,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0350877192982456,
+                               0.0178571428571429,
+                               0.0178571428571429,
+                               0.0178571428571429,
+                               0.0178571428571429,
+                               0.0181818181818182,
+                               0.0181818181818182,
+                               0.0181818181818182,
+                               0.0181818181818182,
+                               0.0181818181818182,
+                               0.0181818181818182,
+                               0.0181818181818182,
+                               0.0185185185185185,
+                               0.0185185185185185,
+                               0.0185185185185185,
+                               0.0185185185185185,
+                               0.0185185185185185,
+                               0.0185185185185185,
+                               0.0181818181818182,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0185185185185185,
+                               0.0185185185185185,
+                               0.0185185185185185,
+                               0.0185185185185185,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0181818181818182,
+                               0.0185185185185185,
+                               0.0185185185185185,
+                               0.0185185185185185,
+                               0.0185185185185185,
+                               0.0185185185185185,
+                               0.0181818181818182,
+                               0.0185185185185185,
+                               0.0181818181818182,
+                               0.0181818181818182,
+                               0.0185185185185185,
+                               0.0185185185185185,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0192307692307692,
+                               0.0196078431372549,
+                               0.0196078431372549,
+                               0.0196078431372549,
+                               0.0196078431372549,
+                               0.0196078431372549,
+                               0.0200000000000000,
+                               0.0200000000000000,
+                               0.0200000000000000,
+                               0.0400000000000000,
+                               0.0400000000000000,
+                               0.0392156862745098,
+                               0.0392156862745098,
+                               0.0400000000000000,
+                               0.0400000000000000,
+                               0.0400000000000000,
+                               0.0392156862745098,
+                               0.0384615384615385,
+                               0.0566037735849057,
+                               0.0566037735849057,
+                               0.0576923076923077,
+                               0.0576923076923077,
+                               0.0576923076923077,
+                               0.0576923076923077,
+                               0.0576923076923077,
+                               0.0566037735849057,
+                               0.0566037735849057,
+                               0.0566037735849057,
+                               0.0566037735849057,
+                               0.0566037735849057,
+                               0.0566037735849057,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0600000000000000,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0600000000000000,
+                               0.0600000000000000,
+                               0.0600000000000000,
+                               0.0600000000000000,
+                               0.0600000000000000,
+                               0.0600000000000000,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0392156862745098,
+                               0.0392156862745098,
+                               0.0392156862745098,
+                               0.0384615384615385,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0392156862745098,
+                               0.0200000000000000,
+                               0.0408163265306122,
+                               0.0408163265306122,
+                               0.0408163265306122,
+                               0.0408163265306122,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0425531914893617,
+                               0.0425531914893617,
+                               0.0425531914893617,
+                               0.0425531914893617,
+                               0.0425531914893617,
+                               0.0416666666666667,
+                               0.0625000000000000,
+                               0.0612244897959184,
+                               0.0612244897959184,
+                               0.0612244897959184,
+                               0.0600000000000000,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0600000000000000,
+                               0.0600000000000000,
+                               0.0600000000000000,
+                               0.0638297872340425,
+                               0.0638297872340425,
+                               0.0434782608695652,
+                               0.0444444444444444,
+                               0.0444444444444444,
+                               0.0444444444444444,
+                               0.0444444444444444,
+                               0.0444444444444444,
+                               0.0227272727272727,
+                               0.0217391304347826,
+                               0.0212765957446808,
+                               0.0208333333333333,
+                               0.0204081632653061,
+                               0.0204081632653061,
+                               0.0200000000000000,
+                               0.0196078431372549,
+                               0.0196078431372549,
+                               0.0196078431372549,
+                               0.0196078431372549,
+                               0.0196078431372549,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0312500000000000,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0468750000000000,
+                               0.0468750000000000,
+                               0.0468750000000000,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0166666666666667,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0333333333333333,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0483870967741936,
+                               0.0476190476190476,
+                               0.0468750000000000,
+                               0.0468750000000000,
+                               0.0468750000000000,
+                               0.0468750000000000,
+                               0.0468750000000000,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0312500000000000,
+                               0.0317460317460317,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0158730158730159,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0333333333333333,
+                               0.0344827586206897,
+                               0.0350877192982456,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0535714285714286,
+                               0.0545454545454545,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0363636363636364,
+                               0.0370370370370370,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0333333333333333,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0175438596491228,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0175438596491228,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0172413793103448,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0163934426229508,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0163934426229508,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0303030303030303,
+                               0.0303030303030303,
+                               0.0303030303030303,
+                               0.0303030303030303,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0161290322580645,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0161290322580645,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0322580645161290,
+                               0.0483870967741936,
+                               0.0468750000000000,
+                               0.0476190476190476,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0500000000000000,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0327868852459016,
+                               0.0333333333333333,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0645161290322581,
+                               0.0793650793650794,
+                               0.0781250000000000,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0781250000000000,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0781250000000000,
+                               0.0781250000000000,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0937500000000000,
+                               0.0937500000000000,
+                               0.0937500000000000,
+                               0.0937500000000000,
+                               0.0937500000000000,
+                               0.0937500000000000,
+                               0.0937500000000000,
+                               0.0937500000000000,
+                               0.0937500000000000,
+                               0.0937500000000000,
+                               0.0937500000000000,
+                               0.0937500000000000,
+                               0.0923076923076923,
+                               0.0937500000000000,
+                               0.0937500000000000,
+                               0.0937500000000000,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.0952380952380952,
+                               0.0967741935483871,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0847457627118644,
+                               0.0892857142857143,
+                               0.0892857142857143,
+                               0.0892857142857143,
+                               0.0877192982456140,
+                               0.0727272727272727,
+                               0.0892857142857143,
+                               0.0892857142857143,
+                               0.0909090909090909,
+                               0.0740740740740741,
+                               0.0740740740740741,
+                               0.0740740740740741,
+                               0.0576923076923077,
+                               0.0740740740740741,
+                               0.0740740740740741,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.1071428571428570,
+                               0.1071428571428570,
+                               0.1071428571428570,
+                               0.1206896551724140,
+                               0.1206896551724140,
+                               0.1228070175438600,
+                               0.1250000000000000,
+                               0.1090909090909090,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0961538461538462,
+                               0.1000000000000000,
+                               0.0816326530612245,
+                               0.0816326530612245,
+                               0.0800000000000000,
+                               0.0800000000000000,
+                               0.0800000000000000,
+                               0.0800000000000000,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0816326530612245,
+                               0.0816326530612245,
+                               0.0816326530612245,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.1000000000000000,
+                               0.1020408163265310,
+                               0.1020408163265310,
+                               0.1020408163265310,
+                               0.1020408163265310,
+                               0.1153846153846150,
+                               0.1111111111111110,
+                               0.1071428571428570,
+                               0.1071428571428570,
+                               0.1071428571428570,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1052631578947370,
+                               0.1071428571428570,
+                               0.1071428571428570,
+                               0.1071428571428570,
+                               0.1071428571428570,
+                               0.1071428571428570,
+                               0.1071428571428570,
+                               0.0909090909090909,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0784313725490196,
+                               0.0769230769230769,
+                               0.0784313725490196,
+                               0.0784313725490196,
+                               0.0769230769230769,
+                               0.0784313725490196,
+                               0.0784313725490196,
+                               0.0784313725490196,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.1132075471698110,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1153846153846150,
+                               0.1153846153846150,
+                               0.1153846153846150,
+                               0.1132075471698110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1454545454545450,
+                               0.1454545454545450,
+                               0.1538461538461540,
+                               0.1481481481481480,
+                               0.1481481481481480,
+                               0.1481481481481480,
+                               0.1538461538461540,
+                               0.1538461538461540,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1276595744680850,
+                               0.1304347826086960,
+                               0.1304347826086960,
+                               0.0888888888888889,
+                               0.0869565217391304,
+                               0.0851063829787234,
+                               0.1041666666666670,
+                               0.1063829787234040,
+                               0.1063829787234040,
+                               0.1063829787234040,
+                               0.1063829787234040,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1224489795918370,
+                               0.1041666666666670,
+                               0.1041666666666670,
+                               0.1041666666666670,
+                               0.1020408163265310,
+                               0.1041666666666670,
+                               0.1063829787234040,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1041666666666670,
+                               0.1041666666666670,
+                               0.1020408163265310,
+                               0.1020408163265310,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.1153846153846150,
+                               0.1153846153846150,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1153846153846150,
+                               0.1153846153846150,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1666666666666670,
+                               0.1666666666666670,
+                               0.1666666666666670,
+                               0.1698113207547170,
+                               0.1666666666666670,
+                               0.1509433962264150,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1818181818181820,
+                               0.1636363636363640,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1754385964912280,
+                               0.1754385964912280,
+                               0.1896551724137930,
+                               0.1896551724137930,
+                               0.1896551724137930,
+                               0.1896551724137930,
+                               0.1864406779661020,
+                               0.1803278688524590,
+                               0.1803278688524590,
+                               0.1803278688524590,
+                               0.1803278688524590,
+                               0.1803278688524590,
+                               0.1803278688524590,
+                               0.1803278688524590,
+                               0.1803278688524590,
+                               0.1803278688524590,
+                               0.1833333333333330,
+                               0.1833333333333330,
+                               0.1833333333333330,
+                               0.1967213114754100,
+                               0.1935483870967740,
+                               0.1803278688524590,
+                               0.1803278688524590,
+                               0.1803278688524590,
+                               0.1774193548387100,
+                               0.1774193548387100,
+                               0.1774193548387100,
+                               0.1500000000000000,
+                               0.1500000000000000,
+                               0.1500000000000000,
+                               0.1500000000000000,
+                               0.1666666666666670,
+                               0.1525423728813560,
+                               0.1071428571428570,
+                               0.1228070175438600,
+                               0.1228070175438600,
+                               0.1228070175438600,
+                               0.1228070175438600,
+                               0.1228070175438600,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1403508771929820,
+                               0.1403508771929820,
+                               0.1403508771929820,
+                               0.1403508771929820,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1724137931034480,
+                               0.1724137931034480,
+                               0.1694915254237290,
+                               0.1666666666666670,
+                               0.1639344262295080,
+                               0.1500000000000000,
+                               0.1639344262295080,
+                               0.1639344262295080,
+                               0.1639344262295080,
+                               0.1612903225806450,
+                               0.1612903225806450,
+                               0.1612903225806450,
+                               0.1612903225806450,
+                               0.1475409836065570,
+                               0.1475409836065570,
+                               0.1612903225806450,
+                               0.1612903225806450,
+                               0.1587301587301590,
+                               0.1692307692307690,
+                               0.1692307692307690,
+                               0.1692307692307690,
+                               0.1692307692307690,
+                               0.1562500000000000,
+                               0.1562500000000000,
+                               0.1562500000000000,
+                               0.1692307692307690,
+                               0.1692307692307690,
+                               0.1692307692307690,
+                               0.1692307692307690,
+                               0.1538461538461540,
+                               0.1538461538461540,
+                               0.1538461538461540,
+                               0.1538461538461540,
+                               0.1406250000000000,
+                               0.1290322580645160,
+                               0.1290322580645160,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0781250000000000,
+                               0.0781250000000000,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.0952380952380952,
+                               0.0793650793650794,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0625000000000000,
+                               0.0625000000000000,
+                               0.0625000000000000,
+                               0.0625000000000000,
+                               0.0615384615384615,
+                               0.0615384615384615,
+                               0.0615384615384615,
+                               0.0615384615384615,
+                               0.0615384615384615,
+                               0.0615384615384615,
+                               0.0606060606060606,
+                               0.0606060606060606,
+                               0.0606060606060606,
+                               0.0606060606060606,
+                               0.0606060606060606,
+                               0.0606060606060606,
+                               0.0606060606060606,
+                               0.0606060606060606,
+                               0.0606060606060606,
+                               0.0606060606060606,
+                               0.0597014925373134,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0571428571428571,
+                               0.0571428571428571,
+                               0.0571428571428571,
+                               0.0571428571428571,
+                               0.0571428571428571,
+                               0.0571428571428571,
+                               0.0571428571428571,
+                               0.0571428571428571,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0153846153846154,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0156250000000000,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0153846153846154,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0468750000000000,
+                               0.0468750000000000,
+                               0.0468750000000000,
+                               0.0468750000000000,
+                               0.0468750000000000,
+                               0.0468750000000000,
+                               0.0468750000000000,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0333333333333333,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0333333333333333,
+                               0.0169491525423729,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0161290322580645,
+                               0.0163934426229508,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0169491525423729,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0169491525423729,
+                               0.0166666666666667,
+                               0.0163934426229508,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0166666666666667,
+                               0.0169491525423729,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0163934426229508,
+                               0.0166666666666667,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0172413793103448,
+                               0.0178571428571429,
+                               0.0178571428571429,
+                               0.0178571428571429,
+                               0.0181818181818182,
+                               0.0178571428571429,
+                               0.0178571428571429,
+                               0.0178571428571429,
+                               0.0178571428571429,
+                               0.0181818181818182,
+                               0.0185185185185185,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0188679245283019,
+                               0.0192307692307692,
+                               0.0196078431372549,
+                               0.0204081632653061,
+                               0.0200000000000000,
+                               0.0200000000000000,
+                               0.0392156862745098,
+                               0.0400000000000000,
+                               0.0392156862745098,
+                               0.0384615384615385,
+                               0.0384615384615385,
+                               0.0384615384615385,
+                               0.0384615384615385,
+                               0.0384615384615385,
+                               0.0392156862745098,
+                               0.0392156862745098,
+                               0.0392156862745098,
+                               0.0384615384615385,
+                               0.0392156862745098,
+                               0.0576923076923077,
+                               0.0576923076923077,
+                               0.0576923076923077,
+                               0.0576923076923077,
+                               0.0576923076923077,
+                               0.0576923076923077,
+                               0.0576923076923077,
+                               0.0566037735849057,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0535714285714286,
+                               0.0535714285714286,
+                               0.0526315789473684,
+                               0.0517241379310345,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0357142857142857,
+                               0.0357142857142857,
+                               0.0363636363636364,
+                               0.0357142857142857,
+                               0.0357142857142857,
+                               0.0350877192982456,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0377358490566038,
+                               0.0377358490566038,
+                               0.0377358490566038,
+                               0.0377358490566038,
+                               0.0377358490566038,
+                               0.0370370370370370,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0370370370370370,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0370370370370370,
+                               0.0392156862745098,
+                               0.0392156862745098,
+                               0.0400000000000000,
+                               0.0408163265306122,
+                               0.0408163265306122,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0400000000000000,
+                               0.0400000000000000,
+                               0.0400000000000000,
+                               0.0392156862745098,
+                               0.0392156862745098,
+                               0.0392156862745098,
+                               0.0384615384615385,
+                               0.0384615384615385,
+                               0.0566037735849057,
+                               0.0566037735849057,
+                               0.0566037735849057,
+                               0.0566037735849057,
+                               0.0566037735849057,
+                               0.0566037735849057,
+                               0.0566037735849057,
+                               0.0566037735849057,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0322580645161290,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0312500000000000,
+                               0.0312500000000000,
+                               0.0307692307692308,
+                               0.0307692307692308,
+                               0.0303030303030303,
+                               0.0303030303030303,
+                               0.0303030303030303,
+                               0.0298507462686567,
+                               0.0298507462686567,
+                               0.0298507462686567,
+                               0.0294117647058823,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0285714285714286,
+                               0.0281690140845070,
+                               0.0285714285714286,
+                               0.0285714285714286,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0294117647058823,
+                               0.0298507462686567,
+                               0.0298507462686567,
+                               0.0298507462686567,
+                               0.0298507462686567,
+                               0.0298507462686567,
+                               0.0298507462686567,
+                               0.0298507462686567,
+                               0.0303030303030303,
+                               0.0303030303030303,
+                               0.0303030303030303,
+                               0.0303030303030303,
+                               0.0303030303030303,
+                               0.0298507462686567,
+                               0.0298507462686567,
+                               0.0298507462686567,
+                               0.0298507462686567,
+                               0.0298507462686567,
+                               0.0298507462686567,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0144927536231884,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0144927536231884,
+                               0.0147058823529412,
+                               0.0144927536231884,
+                               0.0147058823529412,
+                               0.0149253731343284,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0151515151515152,
+                               0.0156250000000000,
+                               0.0153846153846154,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0158730158730159,
+                               0.0461538461538462,
+                               0.0468750000000000,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0781250000000000,
+                               0.0781250000000000,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0806451612903226,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0952380952380952,
+                               0.0952380952380952,
+                               0.0952380952380952,
+                               0.0952380952380952,
+                               0.1093750000000000,
+                               0.1093750000000000,
+                               0.1093750000000000,
+                               0.1093750000000000,
+                               0.1093750000000000,
+                               0.1093750000000000,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0666666666666667,
+                               0.0645161290322581,
+                               0.0781250000000000,
+                               0.0781250000000000,
+                               0.0781250000000000,
+                               0.0781250000000000,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0757575757575758,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0704225352112676,
+                               0.0704225352112676,
+                               0.0571428571428571,
+                               0.0579710144927536,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0447761194029851,
+                               0.0454545454545455,
+                               0.0447761194029851,
+                               0.0441176470588235,
+                               0.0434782608695652,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0434782608695652,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0298507462686567,
+                               0.0298507462686567,
+                               0.0298507462686567,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0298507462686567,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0285714285714286,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0140845070422535,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0136986301369863,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0138888888888889,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0000000000000000,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0281690140845070,
+                               0.0285714285714286,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0422535211267606,
+                               0.0422535211267606,
+                               0.0422535211267606,
+                               0.0422535211267606,
+                               0.0422535211267606,
+                               0.0422535211267606,
+                               0.0422535211267606,
+                               0.0285714285714286,
+                               0.0289855072463768,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0298507462686567,
+                               0.0298507462686567,
+                               0.0298507462686567,
+                               0.0298507462686567,
+                               0.0298507462686567,
+                               0.0298507462686567,
+                               0.0298507462686567,
+                               0.0298507462686567,
+                               0.0298507462686567,
+                               0.0298507462686567,
+                               0.0298507462686567,
+                               0.0298507462686567,
+                               0.0298507462686567,
+                               0.0298507462686567,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0144927536231884,
+                               0.0147058823529412,
+                               0.0144927536231884,
+                               0.0142857142857143,
+                               0.0142857142857143,
+                               0.0140845070422535,
+                               0.0140845070422535,
+                               0.0142857142857143,
+                               0.0144927536231884,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0149253731343284,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0147058823529412,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0289855072463768,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0289855072463768,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0294117647058823,
+                               0.0298507462686567,
+                               0.0303030303030303,
+                               0.0447761194029851,
+                               0.0447761194029851,
+                               0.0454545454545455,
+                               0.0597014925373134,
+                               0.0597014925373134,
+                               0.0447761194029851,
+                               0.0447761194029851,
+                               0.0447761194029851,
+                               0.0447761194029851,
+                               0.0447761194029851,
+                               0.0441176470588235,
+                               0.0447761194029851,
+                               0.0454545454545455,
+                               0.0454545454545455,
+                               0.0454545454545455,
+                               0.0454545454545455,
+                               0.0454545454545455,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0454545454545455,
+                               0.0454545454545455,
+                               0.0447761194029851,
+                               0.0447761194029851,
+                               0.0454545454545455,
+                               0.0468750000000000,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0476190476190476,
+                               0.0322580645161290,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0333333333333333,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0327868852459016,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0491803278688525,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0508474576271187,
+                               0.0526315789473684,
+                               0.0545454545454545,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0689655172413793,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0714285714285714,
+                               0.0727272727272727,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0545454545454545,
+                               0.0555555555555556,
+                               0.0566037735849057,
+                               0.0384615384615385,
+                               0.0384615384615385,
+                               0.0384615384615385,
+                               0.0377358490566038,
+                               0.0377358490566038,
+                               0.0377358490566038,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0612244897959184,
+                               0.0625000000000000,
+                               0.0625000000000000,
+                               0.0612244897959184,
+                               0.0961538461538462,
+                               0.1111111111111110,
+                               0.1578947368421050,
+                               0.1551724137931030,
+                               0.1724137931034480,
+                               0.1694915254237290,
+                               0.1666666666666670,
+                               0.1666666666666670,
+                               0.2000000000000000,
+                               0.1864406779661020,
+                               0.1864406779661020,
+                               0.1864406779661020,
+                               0.1896551724137930,
+                               0.1896551724137930,
+                               0.2033898305084750,
+                               0.2033898305084750,
+                               0.2033898305084750,
+                               0.2000000000000000,
+                               0.1967213114754100,
+                               0.1967213114754100,
+                               0.1935483870967740,
+                               0.1935483870967740,
+                               0.2187500000000000,
+                               0.2187500000000000,
+                               0.2187500000000000,
+                               0.2187500000000000,
+                               0.2187500000000000,
+                               0.2307692307692310,
+                               0.2307692307692310,
+                               0.2380952380952380,
+                               0.2419354838709680,
+                               0.2459016393442620,
+                               0.2586206896551720,
+                               0.2586206896551720,
+                               0.2711864406779660,
+                               0.2711864406779660,
+                               0.2711864406779660,
+                               0.2711864406779660,
+                               0.2622950819672130,
+                               0.2580645161290320,
+                               0.2542372881355930,
+                               0.2542372881355930,
+                               0.2542372881355930,
+                               0.2500000000000000,
+                               0.2459016393442620,
+                               0.2459016393442620,
+                               0.2459016393442620,
+                               0.2459016393442620,
+                               0.2500000000000000,
+                               0.2500000000000000,
+                               0.2500000000000000,
+                               0.2500000000000000,
+                               0.2622950819672130,
+                               0.2622950819672130,
+                               0.2622950819672130,
+                               0.2666666666666670,
+                               0.2711864406779660,
+                               0.2711864406779660,
+                               0.2833333333333330,
+                               0.2833333333333330,
+                               0.2786885245901640,
+                               0.2741935483870970,
+                               0.2615384615384620,
+                               0.2656250000000000,
+                               0.2539682539682540,
+                               0.2539682539682540,
+                               0.2539682539682540,
+                               0.2622950819672130,
+                               0.2666666666666670,
+                               0.2622950819672130,
+                               0.2500000000000000,
+                               0.2500000000000000,
+                               0.2459016393442620,
+                               0.2419354838709680,
+                               0.2419354838709680,
+                               0.2419354838709680,
+                               0.2419354838709680,
+                               0.2419354838709680,
+                               0.2419354838709680,
+                               0.2419354838709680,
+                               0.2419354838709680,
+                               0.2419354838709680,
+                               0.2500000000000000,
+                               0.2615384615384620,
+                               0.2727272727272730,
+                               0.2727272727272730,
+                               0.2727272727272730,
+                               0.2727272727272730,
+                               0.2769230769230770,
+                               0.2769230769230770,
+                               0.2769230769230770,
+                               0.2727272727272730,
+                               0.2647058823529410,
+                               0.2647058823529410,
+                               0.2537313432835820,
+                               0.2647058823529410,
+                               0.2647058823529410,
+                               0.2647058823529410,
+                               0.2424242424242420,
+                               0.2424242424242420,
+                               0.2153846153846150,
+                               0.2153846153846150,
+                               0.2153846153846150,
+                               0.2153846153846150,
+                               0.1774193548387100,
+                               0.1774193548387100,
+                               0.1774193548387100,
+                               0.1639344262295080,
+                               0.1639344262295080,
+                               0.1639344262295080,
+                               0.1694915254237290,
+                               0.1694915254237290,
+                               0.1694915254237290,
+                               0.1724137931034480,
+                               0.1724137931034480,
+                               0.1724137931034480,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1578947368421050,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1454545454545450,
+                               0.1454545454545450,
+                               0.1454545454545450,
+                               0.1454545454545450,
+                               0.1454545454545450,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1481481481481480,
+                               0.1481481481481480,
+                               0.1509433962264150,
+                               0.1666666666666670,
+                               0.1509433962264150,
+                               0.1886792452830190,
+                               0.2000000000000000,
+                               0.2037037037037040,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.1929824561403510,
+                               0.1785714285714290,
+                               0.1818181818181820,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1724137931034480,
+                               0.1724137931034480,
+                               0.1694915254237290,
+                               0.1694915254237290,
+                               0.1666666666666670,
+                               0.1666666666666670,
+                               0.1500000000000000,
+                               0.1500000000000000,
+                               0.1500000000000000,
+                               0.1500000000000000,
+                               0.1525423728813560,
+                               0.1525423728813560,
+                               0.1379310344827590,
+                               0.1379310344827590,
+                               0.1228070175438600,
+                               0.1228070175438600,
+                               0.1228070175438600,
+                               0.1525423728813560,
+                               0.1525423728813560,
+                               0.1525423728813560,
+                               0.1694915254237290,
+                               0.1694915254237290,
+                               0.1694915254237290,
+                               0.1694915254237290,
+                               0.1666666666666670,
+                               0.1803278688524590,
+                               0.1803278688524590,
+                               0.1803278688524590,
+                               0.1803278688524590,
+                               0.1935483870967740,
+                               0.1935483870967740,
+                               0.1935483870967740,
+                               0.1935483870967740,
+                               0.1935483870967740,
+                               0.1935483870967740,
+                               0.1935483870967740,
+                               0.1935483870967740,
+                               0.1935483870967740,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.1969696969696970,
+                               0.1969696969696970,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.2121212121212120,
+                               0.2121212121212120,
+                               0.2238805970149250,
+                               0.2238805970149250,
+                               0.2238805970149250,
+                               0.2205882352941180,
+                               0.2205882352941180,
+                               0.2205882352941180,
+                               0.2205882352941180,
+                               0.2089552238805970,
+                               0.2058823529411760,
+                               0.2058823529411760,
+                               0.1940298507462690,
+                               0.1940298507462690,
+                               0.1940298507462690,
+                               0.1940298507462690,
+                               0.1940298507462690,
+                               0.1940298507462690,
+                               0.1884057971014490,
+                               0.1884057971014490,
+                               0.1764705882352940,
+                               0.1764705882352940,
+                               0.1764705882352940,
+                               0.1764705882352940,
+                               0.1764705882352940,
+                               0.1764705882352940,
+                               0.1764705882352940,
+                               0.1641791044776120,
+                               0.1641791044776120,
+                               0.1515151515151520,
+                               0.1492537313432840,
+                               0.1492537313432840,
+                               0.1470588235294120,
+                               0.1449275362318840,
+                               0.1449275362318840,
+                               0.1449275362318840,
+                               0.1449275362318840,
+                               0.1449275362318840,
+                               0.1449275362318840,
+                               0.1304347826086960,
+                               0.1323529411764710,
+                               0.1343283582089550,
+                               0.1343283582089550,
+                               0.1343283582089550,
+                               0.1343283582089550,
+                               0.1343283582089550,
+                               0.1343283582089550,
+                               0.1343283582089550,
+                               0.1343283582089550,
+                               0.1343283582089550,
+                               0.1343283582089550,
+                               0.1212121212121210,
+                               0.1230769230769230,
+                               0.1230769230769230,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1230769230769230,
+                               0.1230769230769230,
+                               0.1212121212121210,
+                               0.1212121212121210,
+                               0.1212121212121210,
+                               0.1212121212121210,
+                               0.1194029850746270,
+                               0.1142857142857140,
+                               0.1142857142857140,
+                               0.1014492753623190,
+                               0.1014492753623190,
+                               0.1014492753623190,
+                               0.1014492753623190,
+                               0.1014492753623190,
+                               0.1014492753623190,
+                               0.1029411764705880,
+                               0.1029411764705880,
+                               0.1029411764705880,
+                               0.1029411764705880,
+                               0.1029411764705880,
+                               0.1029411764705880,
+                               0.1029411764705880,
+                               0.1029411764705880,
+                               0.1029411764705880,
+                               0.1044776119402990,
+                               0.1060606060606060,
+                               0.1060606060606060,
+                               0.1060606060606060,
+                               0.1060606060606060,
+                               0.1060606060606060,
+                               0.1060606060606060,
+                               0.1044776119402990,
+                               0.1044776119402990,
+                               0.1014492753623190,
+                               0.1014492753623190,
+                               0.1014492753623190,
+                               0.1029411764705880,
+                               0.1029411764705880,
+                               0.1029411764705880,
+                               0.1029411764705880,
+                               0.1029411764705880,
+                               0.1029411764705880,
+                               0.1029411764705880,
+                               0.1029411764705880,
+                               0.1029411764705880,
+                               0.1029411764705880,
+                               0.1029411764705880,
+                               0.1029411764705880,
+                               0.1029411764705880,
+                               0.1060606060606060,
+                               0.1060606060606060,
+                               0.1076923076923080,
+                               0.1076923076923080,
+                               0.1076923076923080,
+                               0.1076923076923080,
+                               0.1076923076923080,
+                               0.1076923076923080,
+                               0.0937500000000000,
+                               0.0937500000000000,
+                               0.0937500000000000,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0857142857142857,
+                               0.0857142857142857,
+                               0.0845070422535211,
+                               0.0845070422535211,
+                               0.0845070422535211,
+                               0.0845070422535211,
+                               0.0845070422535211,
+                               0.0845070422535211,
+                               0.0845070422535211,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0704225352112676,
+                               0.0704225352112676,
+                               0.0704225352112676,
+                               0.0704225352112676,
+                               0.0704225352112676,
+                               0.0704225352112676,
+                               0.0704225352112676,
+                               0.0694444444444444,
+                               0.0694444444444444,
+                               0.0694444444444444,
+                               0.0694444444444444,
+                               0.0694444444444444,
+                               0.0694444444444444,
+                               0.0694444444444444,
+                               0.0694444444444444,
+                               0.0563380281690141,
+                               0.0563380281690141,
+                               0.0563380281690141,
+                               0.0563380281690141,
+                               0.0563380281690141,
+                               0.0563380281690141,
+                               0.0563380281690141,
+                               0.0563380281690141,
+                               0.0563380281690141,
+                               0.0563380281690141,
+                               0.0563380281690141,
+                               0.0563380281690141,
+                               0.0563380281690141,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0547945205479452,
+                               0.0547945205479452,
+                               0.0547945205479452,
+                               0.0547945205479452,
+                               0.0547945205479452,
+                               0.0547945205479452,
+                               0.0547945205479452,
+                               0.0547945205479452,
+                               0.0547945205479452,
+                               0.0547945205479452,
+                               0.0547945205479452,
+                               0.0547945205479452,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0540540540540541,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0405405405405405,
+                               0.0405405405405405,
+                               0.0405405405405405,
+                               0.0405405405405405,
+                               0.0405405405405405,
+                               0.0405405405405405,
+                               0.0405405405405405,
+                               0.0405405405405405,
+                               0.0405405405405405,
+                               0.0405405405405405,
+                               0.0405405405405405,
+                               0.0405405405405405,
+                               0.0405405405405405,
+                               0.0405405405405405,
+                               0.0405405405405405,
+                               0.0405405405405405,
+                               0.0405405405405405,
+                               0.0405405405405405,
+                               0.0405405405405405,
+                               0.0405405405405405,
+                               0.0405405405405405,
+                               0.0405405405405405,
+                               0.0405405405405405,
+                               0.0405405405405405,
+                               0.0405405405405405,
+                               0.0405405405405405,
+                               0.0405405405405405,
+                               0.0405405405405405,
+                               0.0405405405405405,
+                               0.0405405405405405,
+                               0.0405405405405405,
+                               0.0405405405405405,
+                               0.0405405405405405,
+                               0.0405405405405405,
+                               0.0405405405405405,
+                               0.0405405405405405,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0410958904109589,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0416666666666667,
+                               0.0422535211267606,
+                               0.0422535211267606,
+                               0.0422535211267606,
+                               0.0422535211267606,
+                               0.0422535211267606,
+                               0.0422535211267606,
+                               0.0422535211267606,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0428571428571429,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0454545454545455,
+                               0.0454545454545455,
+                               0.0454545454545455,
+                               0.0454545454545455,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0468750000000000,
+                               0.0468750000000000,
+                               0.0468750000000000,
+                               0.0468750000000000,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0317460317460317,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0333333333333333,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0338983050847458,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0344827586206897,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0333333333333333,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0322580645161290,
+                               0.0327868852459016,
+                               0.0322580645161290,
+                               0.0327868852459016,
+                               0.0327868852459016,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0350877192982456,
+                               0.0357142857142857,
+                               0.0357142857142857,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0357142857142857,
+                               0.0357142857142857,
+                               0.0357142857142857,
+                               0.0357142857142857,
+                               0.0357142857142857,
+                               0.0350877192982456,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0338983050847458,
+                               0.0344827586206897,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0500000000000000,
+                               0.0508474576271187,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0333333333333333,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0338983050847458,
+                               0.0333333333333333,
+                               0.0491803278688525,
+                               0.0491803278688525,
+                               0.0526315789473684,
+                               0.0517241379310345,
+                               0.0508474576271187,
+                               0.0517241379310345,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0566037735849057,
+                               0.0555555555555556,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0740740740740741,
+                               0.0740740740740741,
+                               0.0740740740740741,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0740740740740741,
+                               0.0740740740740741,
+                               0.0754716981132075,
+                               0.0784313725490196,
+                               0.0600000000000000,
+                               0.0612244897959184,
+                               0.0600000000000000,
+                               0.0600000000000000,
+                               0.0576923076923077,
+                               0.0576923076923077,
+                               0.0576923076923077,
+                               0.0566037735849057,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0483870967741936,
+                               0.0491803278688525,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0634920634920635,
+                               0.0625000000000000,
+                               0.0625000000000000,
+                               0.0625000000000000,
+                               0.0625000000000000,
+                               0.0625000000000000,
+                               0.0625000000000000,
+                               0.0615384615384615,
+                               0.0615384615384615,
+                               0.0615384615384615,
+                               0.0615384615384615,
+                               0.0615384615384615,
+                               0.0606060606060606,
+                               0.0606060606060606,
+                               0.0606060606060606,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0597014925373134,
+                               0.0597014925373134,
+                               0.0597014925373134,
+                               0.0597014925373134,
+                               0.0597014925373134,
+                               0.0597014925373134,
+                               0.0597014925373134,
+                               0.0597014925373134,
+                               0.0597014925373134,
+                               0.0597014925373134,
+                               0.0588235294117647,
+                               0.0597014925373134,
+                               0.0597014925373134,
+                               0.0597014925373134,
+                               0.0597014925373134,
+                               0.0597014925373134,
+                               0.0597014925373134,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0441176470588235,
+                               0.0447761194029851,
+                               0.0447761194029851,
+                               0.0447761194029851,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0597014925373134,
+                               0.0454545454545455,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0461538461538462,
+                               0.0606060606060606,
+                               0.0606060606060606,
+                               0.0597014925373134,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0724637681159420,
+                               0.0735294117647059,
+                               0.0735294117647059,
+                               0.0735294117647059,
+                               0.0735294117647059,
+                               0.0735294117647059,
+                               0.0735294117647059,
+                               0.0735294117647059,
+                               0.0735294117647059,
+                               0.0735294117647059,
+                               0.0735294117647059,
+                               0.0735294117647059,
+                               0.0735294117647059,
+                               0.0597014925373134,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0579710144927536,
+                               0.0571428571428571,
+                               0.0571428571428571,
+                               0.0571428571428571,
+                               0.0571428571428571,
+                               0.0571428571428571,
+                               0.0571428571428571,
+                               0.0571428571428571,
+                               0.0571428571428571,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0579710144927536,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0735294117647059,
+                               0.0606060606060606,
+                               0.0615384615384615,
+                               0.0615384615384615,
+                               0.0615384615384615,
+                               0.0625000000000000,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.1029411764705880,
+                               0.1029411764705880,
+                               0.1029411764705880,
+                               0.1029411764705880,
+                               0.1029411764705880,
+                               0.1029411764705880,
+                               0.1029411764705880,
+                               0.1029411764705880,
+                               0.1014492753623190,
+                               0.1159420289855070,
+                               0.1159420289855070,
+                               0.1176470588235290,
+                               0.1176470588235290,
+                               0.1194029850746270,
+                               0.1060606060606060,
+                               0.1060606060606060,
+                               0.1076923076923080,
+                               0.1212121212121210,
+                               0.1212121212121210,
+                               0.1076923076923080,
+                               0.1111111111111110,
+                               0.1269841269841270,
+                               0.1451612903225810,
+                               0.1500000000000000,
+                               0.1500000000000000,
+                               0.1525423728813560,
+                               0.1935483870967740,
+                               0.2000000000000000,
+                               0.1967213114754100,
+                               0.1967213114754100,
+                               0.1967213114754100,
+                               0.1967213114754100,
+                               0.1967213114754100,
+                               0.1935483870967740,
+                               0.1935483870967740,
+                               0.1935483870967740,
+                               0.1935483870967740,
+                               0.1904761904761900,
+                               0.1904761904761900,
+                               0.1904761904761900,
+                               0.1875000000000000,
+                               0.1875000000000000,
+                               0.1875000000000000,
+                               0.1875000000000000,
+                               0.1875000000000000,
+                               0.1875000000000000,
+                               0.1875000000000000,
+                               0.1846153846153850,
+                               0.1846153846153850,
+                               0.1846153846153850,
+                               0.1846153846153850,
+                               0.1846153846153850,
+                               0.1875000000000000,
+                               0.1875000000000000,
+                               0.1875000000000000,
+                               0.2000000000000000,
+                               0.1875000000000000,
+                               0.1904761904761900,
+                               0.1875000000000000,
+                               0.1904761904761900,
+                               0.1904761904761900,
+                               0.1935483870967740,
+                               0.2063492063492060,
+                               0.2063492063492060,
+                               0.2063492063492060,
+                               0.2063492063492060,
+                               0.2096774193548390,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2063492063492060,
+                               0.1935483870967740,
+                               0.1935483870967740,
+                               0.1935483870967740,
+                               0.1935483870967740,
+                               0.1803278688524590,
+                               0.1639344262295080,
+                               0.1639344262295080,
+                               0.1666666666666670,
+                               0.1666666666666670,
+                               0.1379310344827590,
+                               0.1206896551724140,
+                               0.1166666666666670,
+                               0.1166666666666670,
+                               0.1129032258064520,
+                               0.0983606557377049,
+                               0.0952380952380952,
+                               0.0937500000000000,
+                               0.0937500000000000,
+                               0.0937500000000000,
+                               0.0793650793650794,
+                               0.0781250000000000,
+                               0.0781250000000000,
+                               0.0781250000000000,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0666666666666667,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0666666666666667,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0645161290322581,
+                               0.0793650793650794,
+                               0.0781250000000000,
+                               0.0781250000000000,
+                               0.0781250000000000,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.0937500000000000,
+                               0.0937500000000000,
+                               0.0937500000000000,
+                               0.0937500000000000,
+                               0.0937500000000000,
+                               0.0937500000000000,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.0923076923076923,
+                               0.1060606060606060,
+                               0.1060606060606060,
+                               0.1076923076923080,
+                               0.1076923076923080,
+                               0.0937500000000000,
+                               0.0937500000000000,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.0967741935483871,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0847457627118644,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.0833333333333333,
+                               0.0819672131147541,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0806451612903226,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0952380952380952,
+                               0.0952380952380952,
+                               0.0952380952380952,
+                               0.0952380952380952,
+                               0.0952380952380952,
+                               0.0952380952380952,
+                               0.0952380952380952,
+                               0.0952380952380952,
+                               0.0806451612903226,
+                               0.0819672131147541,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0983606557377049,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0952380952380952,
+                               0.0952380952380952,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0952380952380952,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0819672131147541,
+                               0.0819672131147541,
+                               0.0967741935483871,
+                               0.0983606557377049,
+                               0.0967741935483871,
+                               0.1000000000000000,
+                               0.1147540983606560,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.1000000000000000,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0967741935483871,
+                               0.0952380952380952,
+                               0.0967741935483871,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.1000000000000000,
+                               0.1016949152542370,
+                               0.1016949152542370,
+                               0.1016949152542370,
+                               0.1016949152542370,
+                               0.1016949152542370,
+                               0.1016949152542370,
+                               0.1016949152542370,
+                               0.0862068965517241,
+                               0.0847457627118644,
+                               0.1000000000000000,
+                               0.1147540983606560,
+                               0.1166666666666670,
+                               0.1166666666666670,
+                               0.1186440677966100,
+                               0.1186440677966100,
+                               0.1186440677966100,
+                               0.1186440677966100,
+                               0.1206896551724140,
+                               0.1186440677966100,
+                               0.1206896551724140,
+                               0.1228070175438600,
+                               0.1228070175438600,
+                               0.1228070175438600,
+                               0.1525423728813560,
+                               0.1500000000000000,
+                               0.1525423728813560,
+                               0.1525423728813560,
+                               0.1525423728813560,
+                               0.1525423728813560,
+                               0.1666666666666670,
+                               0.1666666666666670,
+                               0.1694915254237290,
+                               0.1694915254237290,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1578947368421050,
+                               0.1724137931034480,
+                               0.1724137931034480,
+                               0.1724137931034480,
+                               0.1724137931034480,
+                               0.1724137931034480,
+                               0.1724137931034480,
+                               0.1724137931034480,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1754385964912280,
+                               0.1896551724137930,
+                               0.1896551724137930,
+                               0.1896551724137930,
+                               0.1896551724137930,
+                               0.1754385964912280,
+                               0.1818181818181820,
+                               0.2105263157894740,
+                               0.2105263157894740,
+                               0.2105263157894740,
+                               0.2142857142857140,
+                               0.2068965517241380,
+                               0.2105263157894740,
+                               0.2105263157894740,
+                               0.2142857142857140,
+                               0.2037037037037040,
+                               0.2037037037037040,
+                               0.2037037037037040,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.2037037037037040,
+                               0.2037037037037040,
+                               0.2037037037037040,
+                               0.2037037037037040,
+                               0.2037037037037040,
+                               0.2115384615384620,
+                               0.2115384615384620,
+                               0.2156862745098040,
+                               0.2156862745098040,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.1800000000000000,
+                               0.1800000000000000,
+                               0.1923076923076920,
+                               0.1923076923076920,
+                               0.1923076923076920,
+                               0.2264150943396230,
+                               0.2264150943396230,
+                               0.2264150943396230,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2456140350877190,
+                               0.2456140350877190,
+                               0.2545454545454540,
+                               0.2545454545454540,
+                               0.2545454545454540,
+                               0.2592592592592590,
+                               0.2641509433962260,
+                               0.2641509433962260,
+                               0.2692307692307690,
+                               0.2692307692307690,
+                               0.2692307692307690,
+                               0.2549019607843140,
+                               0.2549019607843140,
+                               0.2641509433962260,
+                               0.2777777777777780,
+                               0.2962962962962960,
+                               0.3018867924528300,
+                               0.3148148148148150,
+                               0.3018867924528300,
+                               0.3018867924528300,
+                               0.3018867924528300,
+                               0.3018867924528300,
+                               0.2884615384615380,
+                               0.2745098039215690,
+                               0.2745098039215690,
+                               0.2745098039215690,
+                               0.2857142857142860,
+                               0.2857142857142860,
+                               0.3000000000000000,
+                               0.3137254901960780,
+                               0.3076923076923080,
+                               0.3137254901960780,
+                               0.3200000000000000,
+                               0.3200000000000000,
+                               0.3200000000000000,
+                               0.3200000000000000,
+                               0.3137254901960780,
+                               0.3269230769230770,
+                               0.3600000000000000,
+                               0.3600000000000000,
+                               0.3600000000000000,
+                               0.3529411764705880,
+                               0.3461538461538460,
+                               0.3461538461538460,
+                               0.3269230769230770,
+                               0.3269230769230770,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3137254901960780,
+                               0.3137254901960780,
+                               0.3076923076923080,
+                               0.2884615384615380,
+                               0.2745098039215690,
+                               0.2549019607843140,
+                               0.2549019607843140,
+                               0.2400000000000000,
+                               0.2500000000000000,
+                               0.2352941176470590,
+                               0.2400000000000000,
+                               0.2400000000000000,
+                               0.2352941176470590,
+                               0.2200000000000000,
+                               0.2115384615384620,
+                               0.2115384615384620,
+                               0.2115384615384620,
+                               0.2115384615384620,
+                               0.2115384615384620,
+                               0.2075471698113210,
+                               0.1851851851851850,
+                               0.1851851851851850,
+                               0.1698113207547170,
+                               0.1666666666666670,
+                               0.1698113207547170,
+                               0.1698113207547170,
+                               0.1538461538461540,
+                               0.1538461538461540,
+                               0.1509433962264150,
+                               0.1509433962264150,
+                               0.1568627450980390,
+                               0.1600000000000000,
+                               0.1730769230769230,
+                               0.1851851851851850,
+                               0.1538461538461540,
+                               0.1538461538461540,
+                               0.1698113207547170,
+                               0.1730769230769230,
+                               0.1698113207547170,
+                               0.1698113207547170,
+                               0.1698113207547170,
+                               0.1698113207547170,
+                               0.1698113207547170,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1568627450980390,
+                               0.1568627450980390,
+                               0.1568627450980390,
+                               0.1568627450980390,
+                               0.1568627450980390,
+                               0.1568627450980390,
+                               0.1568627450980390,
+                               0.1568627450980390,
+                               0.1568627450980390,
+                               0.1568627450980390,
+                               0.1568627450980390,
+                               0.1568627450980390,
+                               0.1568627450980390,
+                               0.1851851851851850,
+                               0.1851851851851850,
+                               0.1698113207547170,
+                               0.1698113207547170,
+                               0.1698113207547170,
+                               0.1851851851851850,
+                               0.1851851851851850,
+                               0.1851851851851850,
+                               0.1851851851851850,
+                               0.2000000000000000,
+                               0.1851851851851850,
+                               0.1851851851851850,
+                               0.2105263157894740,
+                               0.2105263157894740,
+                               0.2372881355932200,
+                               0.2295081967213110,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2096774193548390,
+                               0.2096774193548390,
+                               0.2096774193548390,
+                               0.2063492063492060,
+                               0.2063492063492060,
+                               0.2096774193548390,
+                               0.2096774193548390,
+                               0.2222222222222220,
+                               0.2295081967213110,
+                               0.2295081967213110,
+                               0.2295081967213110,
+                               0.2166666666666670,
+                               0.2419354838709680,
+                               0.2419354838709680,
+                               0.2419354838709680,
+                               0.2419354838709680,
+                               0.2459016393442620,
+                               0.2622950819672130,
+                               0.2622950819672130,
+                               0.2500000000000000,
+                               0.2372881355932200,
+                               0.2372881355932200,
+                               0.2372881355932200,
+                               0.2372881355932200,
+                               0.2372881355932200,
+                               0.2000000000000000,
+                               0.2280701754385960,
+                               0.2280701754385960,
+                               0.2241379310344830,
+                               0.2241379310344830,
+                               0.2105263157894740,
+                               0.2105263157894740,
+                               0.2105263157894740,
+                               0.2105263157894740,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.1964285714285710,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1754385964912280,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1403508771929820,
+                               0.1379310344827590,
+                               0.1379310344827590,
+                               0.1379310344827590,
+                               0.1379310344827590,
+                               0.1379310344827590,
+                               0.1379310344827590,
+                               0.1379310344827590,
+                               0.1379310344827590,
+                               0.1666666666666670,
+                               0.1666666666666670,
+                               0.1666666666666670,
+                               0.1666666666666670,
+                               0.1694915254237290,
+                               0.1694915254237290,
+                               0.1694915254237290,
+                               0.1694915254237290,
+                               0.1694915254237290,
+                               0.1694915254237290,
+                               0.1694915254237290,
+                               0.1694915254237290,
+                               0.1639344262295080,
+                               0.1639344262295080,
+                               0.1639344262295080,
+                               0.1774193548387100,
+                               0.1746031746031750,
+                               0.1746031746031750,
+                               0.1746031746031750,
+                               0.1746031746031750,
+                               0.1746031746031750,
+                               0.1746031746031750,
+                               0.1746031746031750,
+                               0.1746031746031750,
+                               0.1746031746031750,
+                               0.1746031746031750,
+                               0.1746031746031750,
+                               0.1746031746031750,
+                               0.1774193548387100,
+                               0.1774193548387100,
+                               0.1774193548387100,
+                               0.1774193548387100,
+                               0.1774193548387100,
+                               0.1666666666666670,
+                               0.1666666666666670,
+                               0.1666666666666670,
+                               0.1639344262295080,
+                               0.1639344262295080,
+                               0.1639344262295080,
+                               0.1587301587301590,
+                               0.1587301587301590,
+                               0.1587301587301590,
+                               0.1587301587301590,
+                               0.1587301587301590,
+                               0.1587301587301590,
+                               0.1639344262295080,
+                               0.1612903225806450,
+                               0.1612903225806450,
+                               0.1612903225806450,
+                               0.1612903225806450,
+                               0.1612903225806450,
+                               0.1612903225806450,
+                               0.1612903225806450,
+                               0.1475409836065570,
+                               0.1475409836065570,
+                               0.1475409836065570,
+                               0.1475409836065570,
+                               0.1475409836065570,
+                               0.1500000000000000,
+                               0.1475409836065570,
+                               0.1475409836065570,
+                               0.1475409836065570,
+                               0.1475409836065570,
+                               0.1475409836065570,
+                               0.1475409836065570,
+                               0.1475409836065570,
+                               0.1475409836065570,
+                               0.1475409836065570,
+                               0.1475409836065570,
+                               0.1475409836065570,
+                               0.1475409836065570,
+                               0.1475409836065570,
+                               0.1475409836065570,
+                               0.1475409836065570,
+                               0.1475409836065570,
+                               0.1475409836065570,
+                               0.1500000000000000,
+                               0.1475409836065570,
+                               0.1475409836065570,
+                               0.1333333333333330,
+                               0.1333333333333330,
+                               0.1333333333333330,
+                               0.1311475409836070,
+                               0.1311475409836070,
+                               0.1311475409836070,
+                               0.1311475409836070,
+                               0.1311475409836070,
+                               0.1290322580645160,
+                               0.1290322580645160,
+                               0.1290322580645160,
+                               0.1290322580645160,
+                               0.1290322580645160,
+                               0.1290322580645160,
+                               0.1290322580645160,
+                               0.1290322580645160,
+                               0.1290322580645160,
+                               0.1290322580645160,
+                               0.1290322580645160,
+                               0.1290322580645160,
+                               0.1290322580645160,
+                               0.1290322580645160,
+                               0.1290322580645160,
+                               0.1290322580645160,
+                               0.1290322580645160,
+                               0.1290322580645160,
+                               0.1290322580645160,
+                               0.1290322580645160,
+                               0.1290322580645160,
+                               0.1147540983606560,
+                               0.1147540983606560,
+                               0.1147540983606560,
+                               0.1129032258064520,
+                               0.1129032258064520,
+                               0.1129032258064520,
+                               0.1129032258064520,
+                               0.1129032258064520,
+                               0.1129032258064520,
+                               0.1129032258064520,
+                               0.1147540983606560,
+                               0.1147540983606560,
+                               0.1147540983606560,
+                               0.1147540983606560,
+                               0.1147540983606560,
+                               0.1147540983606560,
+                               0.1147540983606560,
+                               0.1147540983606560,
+                               0.1147540983606560,
+                               0.1147540983606560,
+                               0.1147540983606560,
+                               0.1166666666666670,
+                               0.1147540983606560,
+                               0.1147540983606560,
+                               0.1147540983606560,
+                               0.1147540983606560,
+                               0.1147540983606560,
+                               0.1147540983606560,
+                               0.1129032258064520,
+                               0.1129032258064520,
+                               0.1269841269841270,
+                               0.1269841269841270,
+                               0.1269841269841270,
+                               0.1269841269841270,
+                               0.1290322580645160,
+                               0.1290322580645160,
+                               0.1290322580645160,
+                               0.1147540983606560,
+                               0.1147540983606560,
+                               0.1147540983606560,
+                               0.1147540983606560,
+                               0.1147540983606560,
+                               0.1147540983606560,
+                               0.1147540983606560,
+                               0.1000000000000000,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0983606557377049,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0967741935483871,
+                               0.0952380952380952,
+                               0.0952380952380952,
+                               0.0952380952380952,
+                               0.0952380952380952,
+                               0.0952380952380952,
+                               0.0952380952380952,
+                               0.0952380952380952,
+                               0.0952380952380952,
+                               0.0952380952380952,
+                               0.0952380952380952,
+                               0.0952380952380952,
+                               0.0952380952380952,
+                               0.0937500000000000,
+                               0.0937500000000000,
+                               0.0923076923076923,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0895522388059701,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0746268656716418,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0757575757575758,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0769230769230769,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0793650793650794,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0806451612903226,
+                               0.0645161290322581,
+                               0.0655737704918033,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0655737704918033,
+                               0.0666666666666667,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0655737704918033,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0701754385964912,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0925925925925926,
+                               0.0943396226415094,
+                               0.0961538461538462,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.0943396226415094,
+                               0.0943396226415094,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0909090909090909,
+                               0.0925925925925926,
+                               0.0877192982456140,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0892857142857143,
+                               0.0909090909090909,
+                               0.0925925925925926,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.0943396226415094,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0925925925925926,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0943396226415094,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0943396226415094,
+                               0.0943396226415094,
+                               0.0925925925925926,
+                               0.0943396226415094,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0943396226415094,
+                               0.0943396226415094,
+                               0.0943396226415094,
+                               0.0943396226415094,
+                               0.0925925925925926,
+                               0.0943396226415094,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.0980392156862745,
+                               0.0961538461538462,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0816326530612245,
+                               0.0816326530612245,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0833333333333333,
+                               0.0851063829787234,
+                               0.0652173913043478,
+                               0.0652173913043478,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0652173913043478,
+                               0.0652173913043478,
+                               0.0652173913043478,
+                               0.0666666666666667,
+                               0.0697674418604651,
+                               0.0697674418604651,
+                               0.0681818181818182,
+                               0.0666666666666667,
+                               0.0869565217391304,
+                               0.1063829787234040,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1136363636363640,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1041666666666670,
+                               0.1041666666666670,
+                               0.1063829787234040,
+                               0.1063829787234040,
+                               0.1063829787234040,
+                               0.1063829787234040,
+                               0.1063829787234040,
+                               0.1063829787234040,
+                               0.1063829787234040,
+                               0.1086956521739130,
+                               0.0869565217391304,
+                               0.0666666666666667,
+                               0.0625000000000000,
+                               0.0625000000000000,
+                               0.0625000000000000,
+                               0.0625000000000000,
+                               0.0600000000000000,
+                               0.0612244897959184,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0588235294117647,
+                               0.0576923076923077,
+                               0.0576923076923077,
+                               0.0576923076923077,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0727272727272727,
+                               0.0740740740740741,
+                               0.0740740740740741,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0877192982456140,
+                               0.0714285714285714,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0714285714285714,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0714285714285714,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0666666666666667,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0517241379310345,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0535714285714286,
+                               0.0535714285714286,
+                               0.0535714285714286,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0862068965517241,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0892857142857143,
+                               0.0925925925925926,
+                               0.0943396226415094,
+                               0.0943396226415094,
+                               0.0943396226415094,
+                               0.0943396226415094,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.0784313725490196,
+                               0.0784313725490196,
+                               0.0754716981132075,
+                               0.0754716981132075,
+                               0.0740740740740741,
+                               0.0740740740740741,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0535714285714286,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0535714285714286,
+                               0.0535714285714286,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0535714285714286,
+                               0.0535714285714286,
+                               0.0535714285714286,
+                               0.0535714285714286,
+                               0.0535714285714286,
+                               0.0535714285714286,
+                               0.0535714285714286,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0545454545454545,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0508474576271187,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0500000000000000,
+                               0.0508474576271187,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0517241379310345,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0689655172413793,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0714285714285714,
+                               0.0701754385964912,
+                               0.0862068965517241,
+                               0.0862068965517241,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0847457627118644,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0535714285714286,
+                               0.0535714285714286,
+                               0.0535714285714286,
+                               0.0535714285714286,
+                               0.0535714285714286,
+                               0.0535714285714286,
+                               0.0535714285714286,
+                               0.0535714285714286,
+                               0.0535714285714286,
+                               0.0535714285714286,
+                               0.0526315789473684,
+                               0.0526315789473684,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0517241379310345,
+                               0.0677966101694915,
+                               0.0677966101694915,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0701754385964912,
+                               0.0689655172413793,
+                               0.0689655172413793,
+                               0.0714285714285714,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0555555555555556,
+                               0.0377358490566038,
+                               0.0377358490566038,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0370370370370370,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0566037735849057,
+                               0.0566037735849057,
+                               0.0555555555555556,
+                               0.0740740740740741,
+                               0.0740740740740741,
+                               0.0740740740740741,
+                               0.0566037735849057,
+                               0.0566037735849057,
+                               0.0576923076923077,
+                               0.0576923076923077,
+                               0.0588235294117647,
+                               0.0600000000000000,
+                               0.0600000000000000,
+                               0.0612244897959184,
+                               0.0408163265306122,
+                               0.0408163265306122,
+                               0.0408163265306122,
+                               0.0408163265306122,
+                               0.0400000000000000,
+                               0.0400000000000000,
+                               0.0400000000000000,
+                               0.0400000000000000,
+                               0.0400000000000000,
+                               0.0400000000000000,
+                               0.0400000000000000,
+                               0.0400000000000000,
+                               0.0400000000000000,
+                               0.0400000000000000,
+                               0.0392156862745098,
+                               0.0392156862745098,
+                               0.0392156862745098,
+                               0.0392156862745098,
+                               0.0400000000000000,
+                               0.0204081632653061,
+                               0.0208333333333333,
+                               0.0204081632653061,
+                               0.0200000000000000,
+                               0.0200000000000000,
+                               0.0200000000000000,
+                               0.0392156862745098,
+                               0.0392156862745098,
+                               0.0392156862745098,
+                               0.0392156862745098,
+                               0.0392156862745098,
+                               0.0392156862745098,
+                               0.0384615384615385,
+                               0.0377358490566038,
+                               0.0377358490566038,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0535714285714286,
+                               0.0535714285714286,
+                               0.0535714285714286,
+                               0.0566037735849057,
+                               0.0566037735849057,
+                               0.0566037735849057,
+                               0.0566037735849057,
+                               0.0566037735849057,
+                               0.0576923076923077,
+                               0.0566037735849057,
+                               0.0566037735849057,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0555555555555556,
+                               0.0566037735849057,
+                               0.0754716981132075,
+                               0.0754716981132075,
+                               0.0740740740740741,
+                               0.0740740740740741,
+                               0.0727272727272727,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0714285714285714,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0862068965517241,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0877192982456140,
+                               0.0892857142857143,
+                               0.0892857142857143,
+                               0.0892857142857143,
+                               0.0892857142857143,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.1111111111111110,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0943396226415094,
+                               0.0943396226415094,
+                               0.0943396226415094,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.0943396226415094,
+                               0.0943396226415094,
+                               0.0943396226415094,
+                               0.0943396226415094,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.0980392156862745,
+                               0.1153846153846150,
+                               0.1153846153846150,
+                               0.1153846153846150,
+                               0.1153846153846150,
+                               0.1153846153846150,
+                               0.1153846153846150,
+                               0.1153846153846150,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0961538461538462,
+                               0.0980392156862745,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.0800000000000000,
+                               0.0816326530612245,
+                               0.0816326530612245,
+                               0.0816326530612245,
+                               0.0816326530612245,
+                               0.0816326530612245,
+                               0.0833333333333333,
+                               0.0816326530612245,
+                               0.0816326530612245,
+                               0.0816326530612245,
+                               0.0833333333333333,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.1000000000000000,
+                               0.1200000000000000,
+                               0.1224489795918370,
+                               0.1224489795918370,
+                               0.1224489795918370,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1428571428571430,
+                               0.1372549019607840,
+                               0.1372549019607840,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1458333333333330,
+                               0.1458333333333330,
+                               0.1489361702127660,
+                               0.1458333333333330,
+                               0.1489361702127660,
+                               0.1304347826086960,
+                               0.1333333333333330,
+                               0.1333333333333330,
+                               0.1333333333333330,
+                               0.1333333333333330,
+                               0.1521739130434780,
+                               0.1521739130434780,
+                               0.1702127659574470,
+                               0.1739130434782610,
+                               0.1818181818181820,
+                               0.1777777777777780,
+                               0.1818181818181820,
+                               0.1818181818181820,
+                               0.1904761904761900,
+                               0.1860465116279070,
+                               0.1818181818181820,
+                               0.1818181818181820,
+                               0.1860465116279070,
+                               0.2045454545454550,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2272727272727270,
+                               0.2325581395348840,
+                               0.2380952380952380,
+                               0.2380952380952380,
+                               0.2195121951219510,
+                               0.2195121951219510,
+                               0.2142857142857140,
+                               0.2142857142857140,
+                               0.2093023255813950,
+                               0.2093023255813950,
+                               0.2045454545454550,
+                               0.2045454545454550,
+                               0.1860465116279070,
+                               0.1860465116279070,
+                               0.1860465116279070,
+                               0.1860465116279070,
+                               0.1860465116279070,
+                               0.1904761904761900,
+                               0.2093023255813950,
+                               0.2093023255813950,
+                               0.2142857142857140,
+                               0.2142857142857140,
+                               0.2272727272727270,
+                               0.2142857142857140,
+                               0.2045454545454550,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2127659574468080,
+                               0.2173913043478260,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2400000000000000,
+                               0.2400000000000000,
+                               0.2400000000000000,
+                               0.2400000000000000,
+                               0.2549019607843140,
+                               0.2600000000000000,
+                               0.2600000000000000,
+                               0.2600000000000000,
+                               0.2600000000000000,
+                               0.2549019607843140,
+                               0.2692307692307690,
+                               0.2692307692307690,
+                               0.2692307692307690,
+                               0.2830188679245280,
+                               0.2830188679245280,
+                               0.2830188679245280,
+                               0.2830188679245280,
+                               0.2692307692307690,
+                               0.2745098039215690,
+                               0.2745098039215690,
+                               0.2745098039215690,
+                               0.2745098039215690,
+                               0.2448979591836730,
+                               0.2448979591836730,
+                               0.2448979591836730,
+                               0.2448979591836730,
+                               0.2448979591836730,
+                               0.2600000000000000,
+                               0.2600000000000000,
+                               0.2600000000000000,
+                               0.2600000000000000,
+                               0.2600000000000000,
+                               0.2600000000000000,
+                               0.2600000000000000,
+                               0.2653061224489800,
+                               0.2600000000000000,
+                               0.2600000000000000,
+                               0.2600000000000000,
+                               0.2600000000000000,
+                               0.2600000000000000,
+                               0.2600000000000000,
+                               0.2600000000000000,
+                               0.2600000000000000,
+                               0.2448979591836730,
+                               0.2448979591836730,
+                               0.2400000000000000,
+                               0.2244897959183670,
+                               0.2244897959183670,
+                               0.2244897959183670,
+                               0.2244897959183670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2244897959183670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2127659574468080,
+                               0.2127659574468080,
+                               0.2127659574468080,
+                               0.2083333333333330,
+                               0.2083333333333330,
+                               0.2083333333333330,
+                               0.2127659574468080,
+                               0.2127659574468080,
+                               0.2127659574468080,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2600000000000000,
+                               0.2745098039215690,
+                               0.2692307692307690,
+                               0.2692307692307690,
+                               0.2692307692307690,
+                               0.2641509433962260,
+                               0.2830188679245280,
+                               0.2830188679245280,
+                               0.2830188679245280,
+                               0.2830188679245280,
+                               0.2830188679245280,
+                               0.2830188679245280,
+                               0.2641509433962260,
+                               0.2641509433962260,
+                               0.2692307692307690,
+                               0.2692307692307690,
+                               0.2692307692307690,
+                               0.2692307692307690,
+                               0.2549019607843140,
+                               0.2549019607843140,
+                               0.2549019607843140,
+                               0.2549019607843140,
+                               0.2549019607843140,
+                               0.2549019607843140,
+                               0.2549019607843140,
+                               0.2549019607843140,
+                               0.2549019607843140,
+                               0.2549019607843140,
+                               0.2549019607843140,
+                               0.2549019607843140,
+                               0.2400000000000000,
+                               0.2400000000000000,
+                               0.2400000000000000,
+                               0.2400000000000000,
+                               0.2400000000000000,
+                               0.2400000000000000,
+                               0.2400000000000000,
+                               0.2400000000000000,
+                               0.2400000000000000,
+                               0.2400000000000000,
+                               0.2352941176470590,
+                               0.2352941176470590,
+                               0.2200000000000000,
+                               0.2200000000000000,
+                               0.2200000000000000,
+                               0.2156862745098040,
+                               0.2156862745098040,
+                               0.2156862745098040,
+                               0.2156862745098040,
+                               0.2156862745098040,
+                               0.2115384615384620,
+                               0.2115384615384620,
+                               0.2115384615384620,
+                               0.2115384615384620,
+                               0.2075471698113210,
+                               0.2075471698113210,
+                               0.2075471698113210,
+                               0.2075471698113210,
+                               0.2075471698113210,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2181818181818180,
+                               0.2321428571428570,
+                               0.2363636363636360,
+                               0.2363636363636360,
+                               0.2363636363636360,
+                               0.2363636363636360,
+                               0.2500000000000000,
+                               0.2500000000000000,
+                               0.2500000000000000,
+                               0.2500000000000000,
+                               0.2545454545454540,
+                               0.2678571428571430,
+                               0.2678571428571430,
+                               0.2545454545454540,
+                               0.2545454545454540,
+                               0.2545454545454540,
+                               0.2545454545454540,
+                               0.2407407407407410,
+                               0.2407407407407410,
+                               0.2264150943396230,
+                               0.2264150943396230,
+                               0.2264150943396230,
+                               0.2264150943396230,
+                               0.2307692307692310,
+                               0.2156862745098040,
+                               0.2156862745098040,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.1960784313725490,
+                               0.1960784313725490,
+                               0.2264150943396230,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2075471698113210,
+                               0.1960784313725490,
+                               0.1960784313725490,
+                               0.1960784313725490,
+                               0.1960784313725490,
+                               0.1960784313725490,
+                               0.1960784313725490,
+                               0.2075471698113210,
+                               0.2075471698113210,
+                               0.2037037037037040,
+                               0.2037037037037040,
+                               0.2037037037037040,
+                               0.2037037037037040,
+                               0.2037037037037040,
+                               0.2037037037037040,
+                               0.2037037037037040,
+                               0.2037037037037040,
+                               0.2037037037037040,
+                               0.2037037037037040,
+                               0.2075471698113210,
+                               0.2075471698113210,
+                               0.2075471698113210,
+                               0.2075471698113210,
+                               0.2075471698113210,
+                               0.2075471698113210,
+                               0.2075471698113210,
+                               0.2037037037037040,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1896551724137930,
+                               0.1896551724137930,
+                               0.1896551724137930,
+                               0.1896551724137930,
+                               0.1896551724137930,
+                               0.1896551724137930,
+                               0.1896551724137930,
+                               0.1896551724137930,
+                               0.1896551724137930,
+                               0.1896551724137930,
+                               0.1896551724137930,
+                               0.1896551724137930,
+                               0.1896551724137930,
+                               0.1896551724137930,
+                               0.1896551724137930,
+                               0.1896551724137930,
+                               0.1896551724137930,
+                               0.1896551724137930,
+                               0.1896551724137930,
+                               0.1896551724137930,
+                               0.1896551724137930,
+                               0.1896551724137930,
+                               0.1896551724137930,
+                               0.1896551724137930,
+                               0.1754385964912280,
+                               0.1754385964912280,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1481481481481480,
+                               0.1481481481481480,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1454545454545450,
+                               0.1454545454545450,
+                               0.1454545454545450,
+                               0.1454545454545450,
+                               0.1454545454545450,
+                               0.1454545454545450,
+                               0.1454545454545450,
+                               0.1454545454545450,
+                               0.1454545454545450,
+                               0.1454545454545450,
+                               0.1454545454545450,
+                               0.1454545454545450,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1090909090909090,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1132075471698110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1111111111111110,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1272727272727270,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1296296296296300,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1320754716981130,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1372549019607840,
+                               0.1372549019607840,
+                               0.1372549019607840,
+                               0.1372549019607840,
+                               0.1372549019607840,
+                               0.1372549019607840,
+                               0.1176470588235290,
+                               0.1176470588235290,
+                               0.1176470588235290,
+                               0.1176470588235290,
+                               0.1176470588235290,
+                               0.1176470588235290,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1346153846153850,
+                               0.1372549019607840,
+                               0.1372549019607840,
+                               0.1372549019607840,
+                               0.1372549019607840,
+                               0.1372549019607840,
+                               0.1372549019607840,
+                               0.1372549019607840,
+                               0.1372549019607840,
+                               0.1372549019607840,
+                               0.1372549019607840,
+                               0.1372549019607840,
+                               0.1200000000000000,
+                               0.1200000000000000,
+                               0.1224489795918370,
+                               0.1224489795918370,
+                               0.1224489795918370,
+                               0.1224489795918370,
+                               0.1224489795918370,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1224489795918370,
+                               0.1041666666666670,
+                               0.1041666666666670,
+                               0.1041666666666670,
+                               0.1041666666666670,
+                               0.1224489795918370,
+                               0.1224489795918370,
+                               0.1224489795918370,
+                               0.1224489795918370,
+                               0.1224489795918370,
+                               0.1224489795918370,
+                               0.1224489795918370,
+                               0.1224489795918370,
+                               0.1200000000000000,
+                               0.1200000000000000,
+                               0.1200000000000000,
+                               0.1200000000000000,
+                               0.1200000000000000,
+                               0.1200000000000000,
+                               0.1200000000000000,
+                               0.1200000000000000,
+                               0.1200000000000000,
+                               0.1200000000000000,
+                               0.1020408163265310,
+                               0.1020408163265310,
+                               0.1020408163265310,
+                               0.1020408163265310,
+                               0.1020408163265310,
+                               0.1020408163265310,
+                               0.1020408163265310,
+                               0.1020408163265310,
+                               0.1020408163265310,
+                               0.1020408163265310,
+                               0.1020408163265310,
+                               0.1020408163265310,
+                               0.1200000000000000,
+                               0.1372549019607840,
+                               0.1428571428571430,
+                               0.1458333333333330,
+                               0.1458333333333330,
+                               0.1489361702127660,
+                               0.1521739130434780,
+                               0.1521739130434780,
+                               0.1521739130434780,
+                               0.1702127659574470,
+                               0.1875000000000000,
+                               0.2040816326530610,
+                               0.2083333333333330,
+                               0.2083333333333330,
+                               0.2083333333333330,
+                               0.2083333333333330,
+                               0.2083333333333330,
+                               0.2127659574468080,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2340425531914890,
+                               0.2340425531914890,
+                               0.2391304347826090,
+                               0.2391304347826090,
+                               0.2391304347826090,
+                               0.2391304347826090,
+                               0.2553191489361700,
+                               0.2553191489361700,
+                               0.2608695652173910,
+                               0.2608695652173910,
+                               0.2444444444444440,
+                               0.2272727272727270,
+                               0.2093023255813950,
+                               0.2045454545454550,
+                               0.2045454545454550,
+                               0.2045454545454550,
+                               0.2045454545454550,
+                               0.2045454545454550,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2391304347826090,
+                               0.2391304347826090,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2222222222222220,
+                               0.2391304347826090,
+                               0.2391304347826090,
+                               0.2391304347826090,
+                               0.2391304347826090,
+                               0.2391304347826090,
+                               0.2391304347826090,
+                               0.2553191489361700,
+                               0.2708333333333330,
+                               0.2708333333333330,
+                               0.2708333333333330,
+                               0.2708333333333330,
+                               0.2708333333333330,
+                               0.2553191489361700,
+                               0.2553191489361700,
+                               0.2391304347826090,
+                               0.2391304347826090,
+                               0.2391304347826090,
+                               0.2391304347826090,
+                               0.2391304347826090,
+                               0.2391304347826090,
+                               0.2391304347826090,
+                               0.2553191489361700,
+                               0.2553191489361700,
+                               0.2553191489361700,
+                               0.2444444444444440,
+                               0.2391304347826090,
+                               0.2340425531914890,
+                               0.2340425531914890,
+                               0.2500000000000000,
+                               0.2500000000000000,
+                               0.2653061224489800,
+                               0.2708333333333330,
+                               0.2765957446808510,
+                               0.2708333333333330,
+                               0.2857142857142860,
+                               0.2857142857142860,
+                               0.2553191489361700,
+                               0.2553191489361700,
+                               0.2608695652173910,
+                               0.2608695652173910,
+                               0.2608695652173910,
+                               0.2608695652173910,
+                               0.3061224489795920,
+                               0.2978723404255320,
+                               0.2978723404255320,
+                               0.2978723404255320,
+                               0.2978723404255320,
+                               0.3125000000000000,
+                               0.3125000000000000,
+                               0.3125000000000000,
+                               0.3125000000000000,
+                               0.3191489361702130,
+                               0.3191489361702130,
+                               0.3191489361702130,
+                               0.3191489361702130,
+                               0.2888888888888890,
+                               0.2826086956521740,
+                               0.2888888888888890,
+                               0.2727272727272730,
+                               0.2727272727272730,
+                               0.2790697674418600,
+                               0.3111111111111110,
+                               0.3111111111111110,
+                               0.3111111111111110,
+                               0.3111111111111110,
+                               0.3111111111111110,
+                               0.3260869565217390,
+                               0.3260869565217390,
+                               0.3260869565217390,
+                               0.3191489361702130,
+                               0.3043478260869570,
+                               0.3043478260869570,
+                               0.3043478260869570,
+                               0.3191489361702130,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3265306122448980,
+                               0.3333333333333330,
+                               0.3469387755102040,
+                               0.3600000000000000,
+                               0.3600000000000000,
+                               0.3469387755102040,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3265306122448980,
+                               0.3061224489795920,
+                               0.3000000000000000,
+                               0.3000000000000000,
+                               0.3000000000000000,
+                               0.3137254901960780,
+                               0.3137254901960780,
+                               0.3000000000000000,
+                               0.3000000000000000,
+                               0.3000000000000000,
+                               0.3000000000000000,
+                               0.3000000000000000,
+                               0.2916666666666670,
+                               0.2978723404255320,
+                               0.2978723404255320,
+                               0.3125000000000000,
+                               0.3125000000000000,
+                               0.3125000000000000,
+                               0.2978723404255320,
+                               0.2916666666666670,
+                               0.2916666666666670,
+                               0.3061224489795920,
+                               0.3061224489795920,
+                               0.2916666666666670,
+                               0.3061224489795920,
+                               0.3000000000000000,
+                               0.3000000000000000,
+                               0.3137254901960780,
+                               0.3269230769230770,
+                               0.3333333333333330,
+                               0.3269230769230770,
+                               0.3269230769230770,
+                               0.3207547169811320,
+                               0.3207547169811320,
+                               0.3207547169811320,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3207547169811320,
+                               0.3269230769230770,
+                               0.3269230769230770,
+                               0.3207547169811320,
+                               0.3207547169811320,
+                               0.3207547169811320,
+                               0.3207547169811320,
+                               0.3207547169811320,
+                               0.3207547169811320,
+                               0.3207547169811320,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3454545454545450,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3396226415094340,
+                               0.3396226415094340,
+                               0.3396226415094340,
+                               0.3396226415094340,
+                               0.3396226415094340,
+                               0.3461538461538460,
+                               0.3584905660377360,
+                               0.3584905660377360,
+                               0.3584905660377360,
+                               0.3584905660377360,
+                               0.3584905660377360,
+                               0.3518518518518520,
+                               0.3518518518518520,
+                               0.3518518518518520,
+                               0.3396226415094340,
+                               0.3269230769230770,
+                               0.3137254901960780,
+                               0.3137254901960780,
+                               0.3137254901960780,
+                               0.3269230769230770,
+                               0.3269230769230770,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3200000000000000,
+                               0.3061224489795920,
+                               0.3200000000000000,
+                               0.3137254901960780,
+                               0.3137254901960780,
+                               0.3137254901960780,
+                               0.3269230769230770,
+                               0.3269230769230770,
+                               0.3269230769230770,
+                               0.3269230769230770,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3400000000000000,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3400000000000000,
+                               0.3529411764705880,
+                               0.3529411764705880,
+                               0.3529411764705880,
+                               0.3529411764705880,
+                               0.3600000000000000,
+                               0.3600000000000000,
+                               0.3600000000000000,
+                               0.3600000000000000,
+                               0.3469387755102040,
+                               0.3600000000000000,
+                               0.3600000000000000,
+                               0.3600000000000000,
+                               0.3600000000000000,
+                               0.3673469387755100,
+                               0.3800000000000000,
+                               0.3800000000000000,
+                               0.3800000000000000,
+                               0.4000000000000000,
+                               0.4000000000000000,
+                               0.4081632653061220,
+                               0.4081632653061220,
+                               0.4081632653061220,
+                               0.4081632653061220,
+                               0.4081632653061220,
+                               0.3958333333333330,
+                               0.3958333333333330,
+                               0.3958333333333330,
+                               0.3958333333333330,
+                               0.3958333333333330,
+                               0.3958333333333330,
+                               0.3958333333333330,
+                               0.3958333333333330,
+                               0.3958333333333330,
+                               0.3958333333333330,
+                               0.3958333333333330,
+                               0.3958333333333330,
+                               0.3958333333333330,
+                               0.4081632653061220,
+                               0.4081632653061220,
+                               0.4081632653061220,
+                               0.4081632653061220,
+                               0.4042553191489360,
+                               0.4042553191489360,
+                               0.4042553191489360,
+                               0.4042553191489360,
+                               0.4042553191489360,
+                               0.4130434782608700,
+                               0.4042553191489360,
+                               0.4042553191489360,
+                               0.4042553191489360,
+                               0.4042553191489360,
+                               0.4042553191489360,
+                               0.4166666666666670,
+                               0.4375000000000000,
+                               0.4375000000000000,
+                               0.4375000000000000,
+                               0.4375000000000000,
+                               0.4375000000000000,
+                               0.4375000000000000,
+                               0.4468085106382980,
+                               0.4468085106382980,
+                               0.4468085106382980,
+                               0.4347826086956520,
+                               0.4347826086956520,
+                               0.4347826086956520,
+                               0.4347826086956520,
+                               0.4347826086956520,
+                               0.4565217391304350,
+                               0.4565217391304350,
+                               0.4565217391304350,
+                               0.4444444444444440,
+                               0.4444444444444440,
+                               0.4444444444444440,
+                               0.4444444444444440,
+                               0.4444444444444440,
+                               0.4444444444444440,
+                               0.4444444444444440,
+                               0.4444444444444440,
+                               0.4347826086956520,
+                               0.4347826086956520,
+                               0.4347826086956520,
+                               0.4255319148936170,
+                               0.4255319148936170,
+                               0.4255319148936170,
+                               0.4255319148936170,
+                               0.4255319148936170,
+                               0.4130434782608700,
+                               0.4130434782608700,
+                               0.4255319148936170,
+                               0.4255319148936170,
+                               0.4255319148936170,
+                               0.4255319148936170,
+                               0.4042553191489360,
+                               0.4042553191489360,
+                               0.4042553191489360,
+                               0.4042553191489360,
+                               0.4042553191489360,
+                               0.4166666666666670,
+                               0.4166666666666670,
+                               0.4285714285714290,
+                               0.4166666666666670,
+                               0.4166666666666670,
+                               0.4166666666666670,
+                               0.4166666666666670,
+                               0.4166666666666670,
+                               0.4166666666666670,
+                               0.4166666666666670,
+                               0.4166666666666670,
+                               0.4166666666666670,
+                               0.4166666666666670,
+                               0.4166666666666670,
+                               0.4166666666666670,
+                               0.4200000000000000,
+                               0.4081632653061220,
+                               0.4081632653061220,
+                               0.4081632653061220,
+                               0.4081632653061220,
+                               0.4081632653061220,
+                               0.4000000000000000,
+                               0.4117647058823530,
+                               0.4038461538461540,
+                               0.4150943396226420,
+                               0.4074074074074070,
+                               0.4074074074074070,
+                               0.4150943396226420,
+                               0.4150943396226420,
+                               0.4150943396226420,
+                               0.4150943396226420,
+                               0.4150943396226420,
+                               0.4038461538461540,
+                               0.3962264150943400,
+                               0.4038461538461540,
+                               0.4038461538461540,
+                               0.4038461538461540,
+                               0.4038461538461540,
+                               0.4038461538461540,
+                               0.3877551020408160,
+                               0.3921568627450980,
+                               0.3921568627450980,
+                               0.3800000000000000,
+                               0.3800000000000000,
+                               0.3800000000000000,
+                               0.3800000000000000,
+                               0.3725490196078430,
+                               0.3725490196078430,
+                               0.3725490196078430,
+                               0.3725490196078430,
+                               0.3846153846153850,
+                               0.3962264150943400,
+                               0.4038461538461540,
+                               0.4038461538461540,
+                               0.4150943396226420,
+                               0.4150943396226420,
+                               0.4150943396226420,
+                               0.4181818181818180,
+                               0.4181818181818180,
+                               0.4181818181818180,
+                               0.4181818181818180,
+                               0.4181818181818180,
+                               0.4074074074074070,
+                               0.3962264150943400,
+                               0.3962264150943400,
+                               0.3962264150943400,
+                               0.4074074074074070,
+                               0.4074074074074070,
+                               0.4074074074074070,
+                               0.4000000000000000,
+                               0.4107142857142860,
+                               0.4107142857142860,
+                               0.4035087719298250,
+                               0.4035087719298250,
+                               0.4035087719298250,
+                               0.4035087719298250,
+                               0.4035087719298250,
+                               0.4035087719298250,
+                               0.4035087719298250,
+                               0.4035087719298250,
+                               0.4107142857142860,
+                               0.4107142857142860,
+                               0.4107142857142860,
+                               0.4107142857142860,
+                               0.4000000000000000,
+                               0.4000000000000000,
+                               0.4000000000000000,
+                               0.4000000000000000,
+                               0.3928571428571430,
+                               0.3818181818181820,
+                               0.3818181818181820,
+                               0.3818181818181820,
+                               0.3818181818181820,
+                               0.3818181818181820,
+                               0.3703703703703700,
+                               0.3818181818181820,
+                               0.3818181818181820,
+                               0.3818181818181820,
+                               0.3888888888888890,
+                               0.3962264150943400,
+                               0.4074074074074070,
+                               0.4074074074074070,
+                               0.4000000000000000,
+                               0.4000000000000000,
+                               0.3888888888888890,
+                               0.4000000000000000,
+                               0.4000000000000000,
+                               0.4000000000000000,
+                               0.3888888888888890,
+                               0.3888888888888890,
+                               0.3888888888888890,
+                               0.3888888888888890,
+                               0.3962264150943400,
+                               0.3962264150943400,
+                               0.3962264150943400,
+                               0.4074074074074070,
+                               0.4000000000000000,
+                               0.3962264150943400,
+                               0.3846153846153850,
+                               0.3846153846153850,
+                               0.3725490196078430,
+                               0.3725490196078430,
+                               0.3653846153846150,
+                               0.3653846153846150,
+                               0.3773584905660380,
+                               0.3773584905660380,
+                               0.3703703703703700,
+                               0.3703703703703700,
+                               0.3703703703703700,
+                               0.3584905660377360,
+                               0.3773584905660380,
+                               0.3773584905660380,
+                               0.3653846153846150,
+                               0.3653846153846150,
+                               0.3653846153846150,
+                               0.3653846153846150,
+                               0.3600000000000000,
+                               0.3600000000000000,
+                               0.3600000000000000,
+                               0.3600000000000000,
+                               0.3600000000000000,
+                               0.3600000000000000,
+                               0.3529411764705880,
+                               0.3529411764705880,
+                               0.3529411764705880,
+                               0.3529411764705880,
+                               0.3529411764705880,
+                               0.3584905660377360,
+                               0.3584905660377360,
+                               0.3584905660377360,
+                               0.3518518518518520,
+                               0.3518518518518520,
+                               0.3518518518518520,
+                               0.3518518518518520,
+                               0.3584905660377360,
+                               0.3584905660377360,
+                               0.3703703703703700,
+                               0.3703703703703700,
+                               0.3703703703703700,
+                               0.3518518518518520,
+                               0.3454545454545450,
+                               0.3454545454545450,
+                               0.3571428571428570,
+                               0.3571428571428570,
+                               0.3571428571428570,
+                               0.3571428571428570,
+                               0.3508771929824560,
+                               0.3508771929824560,
+                               0.3508771929824560,
+                               0.3508771929824560,
+                               0.3392857142857140,
+                               0.3333333333333330,
+                               0.3396226415094340,
+                               0.3461538461538460,
+                               0.3461538461538460,
+                               0.3461538461538460,
+                               0.3529411764705880,
+                               0.3653846153846150,
+                               0.3653846153846150,
+                               0.3653846153846150,
+                               0.3653846153846150,
+                               0.3653846153846150,
+                               0.3529411764705880,
+                               0.3529411764705880,
+                               0.3265306122448980,
+                               0.3265306122448980,
+                               0.3265306122448980,
+                               0.3265306122448980,
+                               0.3265306122448980,
+                               0.3333333333333330,
+                               0.3265306122448980,
+                               0.3265306122448980,
+                               0.3265306122448980,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3469387755102040,
+                               0.3469387755102040,
+                               0.3469387755102040,
+                               0.3469387755102040,
+                               0.3469387755102040,
+                               0.3541666666666670,
+                               0.3541666666666670,
+                               0.3541666666666670,
+                               0.3541666666666670,
+                               0.3541666666666670,
+                               0.3541666666666670,
+                               0.3541666666666670,
+                               0.3541666666666670,
+                               0.3541666666666670,
+                               0.3541666666666670,
+                               0.3541666666666670,
+                               0.3673469387755100,
+                               0.3673469387755100,
+                               0.3673469387755100,
+                               0.3800000000000000,
+                               0.3673469387755100,
+                               0.3673469387755100,
+                               0.3673469387755100,
+                               0.3600000000000000,
+                               0.3600000000000000,
+                               0.3529411764705880,
+                               0.3529411764705880,
+                               0.3529411764705880,
+                               0.3529411764705880,
+                               0.3653846153846150,
+                               0.3653846153846150,
+                               0.3800000000000000,
+                               0.3800000000000000,
+                               0.3800000000000000,
+                               0.3800000000000000,
+                               0.3800000000000000,
+                               0.3673469387755100,
+                               0.3469387755102040,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3469387755102040,
+                               0.3400000000000000,
+                               0.3400000000000000,
+                               0.3529411764705880,
+                               0.3529411764705880,
+                               0.3529411764705880,
+                               0.3529411764705880,
+                               0.3529411764705880,
+                               0.3600000000000000,
+                               0.3600000000000000,
+                               0.3469387755102040,
+                               0.3469387755102040,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3469387755102040,
+                               0.3469387755102040,
+                               0.3469387755102040,
+                               0.3469387755102040,
+                               0.3600000000000000,
+                               0.3725490196078430,
+                               0.3846153846153850,
+                               0.3846153846153850,
+                               0.3846153846153850,
+                               0.3846153846153850,
+                               0.3962264150943400,
+                               0.3962264150943400,
+                               0.4038461538461540,
+                               0.3962264150943400,
+                               0.3962264150943400,
+                               0.3962264150943400,
+                               0.3962264150943400,
+                               0.4038461538461540,
+                               0.4259259259259260,
+                               0.4259259259259260,
+                               0.4259259259259260,
+                               0.4259259259259260,
+                               0.4150943396226420,
+                               0.4150943396226420,
+                               0.4150943396226420,
+                               0.4150943396226420,
+                               0.4150943396226420,
+                               0.4150943396226420,
+                               0.4150943396226420,
+                               0.4000000000000000,
+                               0.3818181818181820,
+                               0.3818181818181820,
+                               0.3888888888888890,
+                               0.3888888888888890,
+                               0.3888888888888890,
+                               0.3888888888888890,
+                               0.3962264150943400,
+                               0.3888888888888890,
+                               0.3888888888888890,
+                               0.3888888888888890,
+                               0.3888888888888890,
+                               0.3888888888888890,
+                               0.4000000000000000,
+                               0.4000000000000000,
+                               0.4000000000000000,
+                               0.4000000000000000,
+                               0.4000000000000000,
+                               0.3888888888888890,
+                               0.3703703703703700,
+                               0.3703703703703700,
+                               0.3703703703703700,
+                               0.3703703703703700,
+                               0.3703703703703700,
+                               0.3703703703703700,
+                               0.3703703703703700,
+                               0.3584905660377360,
+                               0.3584905660377360,
+                               0.3584905660377360,
+                               0.3584905660377360,
+                               0.3584905660377360,
+                               0.3584905660377360,
+                               0.3584905660377360,
+                               0.3584905660377360,
+                               0.3584905660377360,
+                               0.3584905660377360,
+                               0.3584905660377360,
+                               0.3773584905660380,
+                               0.3773584905660380,
+                               0.3962264150943400,
+                               0.3962264150943400,
+                               0.3888888888888890,
+                               0.3818181818181820,
+                               0.3928571428571430,
+                               0.4035087719298250,
+                               0.4035087719298250,
+                               0.4035087719298250,
+                               0.4137931034482760,
+                               0.4137931034482760,
+                               0.4000000000000000,
+                               0.4000000000000000,
+                               0.4107142857142860,
+                               0.4107142857142860,
+                               0.4107142857142860,
+                               0.4107142857142860,
+                               0.4107142857142860,
+                               0.4107142857142860,
+                               0.4107142857142860,
+                               0.4107142857142860,
+                               0.4107142857142860,
+                               0.4107142857142860,
+                               0.4210526315789470,
+                               0.4107142857142860,
+                               0.4107142857142860,
+                               0.4107142857142860,
+                               0.4107142857142860,
+                               0.4107142857142860,
+                               0.4107142857142860,
+                               0.4210526315789470,
+                               0.4107142857142860,
+                               0.4107142857142860,
+                               0.4107142857142860,
+                               0.4107142857142860,
+                               0.4000000000000000,
+                               0.4000000000000000,
+                               0.4000000000000000,
+                               0.4000000000000000,
+                               0.4000000000000000,
+                               0.3888888888888890,
+                               0.3818181818181820,
+                               0.3818181818181820,
+                               0.3584905660377360,
+                               0.3584905660377360,
+                               0.3461538461538460,
+                               0.3461538461538460,
+                               0.3137254901960780,
+                               0.3000000000000000,
+                               0.3137254901960780,
+                               0.3137254901960780,
+                               0.3137254901960780,
+                               0.3137254901960780,
+                               0.3000000000000000,
+                               0.3000000000000000,
+                               0.3000000000000000,
+                               0.3000000000000000,
+                               0.3000000000000000,
+                               0.3000000000000000,
+                               0.2800000000000000,
+                               0.2653061224489800,
+                               0.3076923076923080,
+                               0.3076923076923080,
+                               0.3076923076923080,
+                               0.3076923076923080,
+                               0.2941176470588230,
+                               0.2941176470588230,
+                               0.2941176470588230,
+                               0.2941176470588230,
+                               0.2941176470588230,
+                               0.2941176470588230,
+                               0.3207547169811320,
+                               0.3207547169811320,
+                               0.3207547169811320,
+                               0.3207547169811320,
+                               0.3207547169811320,
+                               0.3207547169811320,
+                               0.3090909090909090,
+                               0.3090909090909090,
+                               0.2962962962962960,
+                               0.2962962962962960,
+                               0.2962962962962960,
+                               0.2962962962962960,
+                               0.2962962962962960,
+                               0.2962962962962960,
+                               0.2962962962962960,
+                               0.2962962962962960,
+                               0.2962962962962960,
+                               0.2962962962962960,
+                               0.2962962962962960,
+                               0.2909090909090910,
+                               0.2777777777777780,
+                               0.2641509433962260,
+                               0.2777777777777780,
+                               0.2777777777777780,
+                               0.2727272727272730,
+                               0.2857142857142860,
+                               0.2807017543859650,
+                               0.2758620689655170,
+                               0.2758620689655170,
+                               0.2758620689655170,
+                               0.2758620689655170,
+                               0.2758620689655170,
+                               0.2631578947368420,
+                               0.2631578947368420,
+                               0.2631578947368420,
+                               0.2586206896551720,
+                               0.2456140350877190,
+                               0.2456140350877190,
+                               0.2456140350877190,
+                               0.2456140350877190,
+                               0.2321428571428570,
+                               0.2321428571428570,
+                               0.2321428571428570,
+                               0.2321428571428570,
+                               0.2280701754385960,
+                               0.2280701754385960,
+                               0.2241379310344830,
+                               0.2241379310344830,
+                               0.2241379310344830,
+                               0.2241379310344830,
+                               0.2280701754385960,
+                               0.2280701754385960,
+                               0.2280701754385960,
+                               0.2280701754385960,
+                               0.2280701754385960,
+                               0.2280701754385960,
+                               0.2280701754385960,
+                               0.2280701754385960,
+                               0.2142857142857140,
+                               0.2142857142857140,
+                               0.2068965517241380,
+                               0.2068965517241380,
+                               0.2068965517241380,
+                               0.2068965517241380,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1929824561403510,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.1964285714285710,
+                               0.1818181818181820,
+                               0.1818181818181820,
+                               0.1818181818181820,
+                               0.1818181818181820,
+                               0.1818181818181820,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1785714285714290,
+                               0.1754385964912280,
+                               0.1754385964912280,
+                               0.1754385964912280,
+                               0.1754385964912280,
+                               0.1754385964912280,
+                               0.1754385964912280,
+                               0.1754385964912280,
+                               0.1754385964912280,
+                               0.1754385964912280,
+                               0.1754385964912280,
+                               0.1754385964912280,
+                               0.1754385964912280,
+                               0.1754385964912280,
+                               0.1754385964912280,
+                               0.1896551724137930,
+                               0.1896551724137930,
+                               0.1896551724137930,
+                               0.1896551724137930,
+                               0.1896551724137930,
+                               0.1896551724137930,
+                               0.1754385964912280,
+                               0.1754385964912280,
+                               0.1754385964912280,
+                               0.1754385964912280,
+                               0.1754385964912280,
+                               0.1754385964912280,
+                               0.1754385964912280,
+                               0.1754385964912280,
+                               0.1754385964912280,
+                               0.1754385964912280,
+                               0.1754385964912280,
+                               0.1754385964912280,
+                               0.1724137931034480,
+                               0.1724137931034480,
+                               0.1724137931034480,
+                               0.1724137931034480,
+                               0.1724137931034480,
+                               0.1724137931034480,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1578947368421050,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1607142857142860,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1636363636363640,
+                               0.1666666666666670,
+                               0.1666666666666670,
+                               0.1666666666666670,
+                               0.1666666666666670,
+                               0.1698113207547170,
+                               0.1698113207547170,
+                               0.1698113207547170,
+                               0.1698113207547170,
+                               0.1698113207547170,
+                               0.1698113207547170,
+                               0.1698113207547170,
+                               0.1698113207547170,
+                               0.1698113207547170,
+                               0.1698113207547170,
+                               0.1698113207547170,
+                               0.1698113207547170,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1730769230769230,
+                               0.1764705882352940,
+                               0.1764705882352940,
+                               0.1764705882352940,
+                               0.1764705882352940,
+                               0.1764705882352940,
+                               0.1764705882352940,
+                               0.1764705882352940,
+                               0.1764705882352940,
+                               0.1764705882352940,
+                               0.1764705882352940,
+                               0.1764705882352940,
+                               0.1764705882352940,
+                               0.1764705882352940,
+                               0.1764705882352940,
+                               0.1764705882352940,
+                               0.1764705882352940,
+                               0.1764705882352940,
+                               0.1764705882352940,
+                               0.1600000000000000,
+                               0.1600000000000000,
+                               0.1600000000000000,
+                               0.1600000000000000,
+                               0.1600000000000000,
+                               0.1600000000000000,
+                               0.1568627450980390,
+                               0.1568627450980390,
+                               0.1568627450980390,
+                               0.1568627450980390,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1224489795918370,
+                               0.1224489795918370,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1224489795918370,
+                               0.1224489795918370,
+                               0.1224489795918370,
+                               0.1224489795918370,
+                               0.1063829787234040,
+                               0.1063829787234040,
+                               0.1063829787234040,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1400000000000000,
+                               0.1224489795918370,
+                               0.1224489795918370,
+                               0.1224489795918370,
+                               0.1224489795918370,
+                               0.1224489795918370,
+                               0.1224489795918370,
+                               0.1224489795918370,
+                               0.1224489795918370,
+                               0.1224489795918370,
+                               0.1224489795918370,
+                               0.1224489795918370,
+                               0.1224489795918370,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1333333333333330,
+                               0.1333333333333330,
+                               0.1333333333333330,
+                               0.1333333333333330,
+                               0.1333333333333330,
+                               0.1333333333333330,
+                               0.1739130434782610,
+                               0.1739130434782610,
+                               0.1739130434782610,
+                               0.1739130434782610,
+                               0.1777777777777780,
+                               0.1956521739130430,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2244897959183670,
+                               0.2244897959183670,
+                               0.2244897959183670,
+                               0.2244897959183670,
+                               0.2244897959183670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2448979591836730,
+                               0.2448979591836730,
+                               0.2448979591836730,
+                               0.2448979591836730,
+                               0.2448979591836730,
+                               0.2448979591836730,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2653061224489800,
+                               0.2653061224489800,
+                               0.2708333333333330,
+                               0.2708333333333330,
+                               0.2708333333333330,
+                               0.2708333333333330,
+                               0.2708333333333330,
+                               0.2708333333333330,
+                               0.2708333333333330,
+                               0.2708333333333330,
+                               0.2708333333333330,
+                               0.2765957446808510,
+                               0.2916666666666670,
+                               0.2978723404255320,
+                               0.3125000000000000,
+                               0.3265306122448980,
+                               0.3265306122448980,
+                               0.3333333333333330,
+                               0.3191489361702130,
+                               0.3191489361702130,
+                               0.3260869565217390,
+                               0.3260869565217390,
+                               0.3260869565217390,
+                               0.3260869565217390,
+                               0.3333333333333330,
+                               0.3181818181818180,
+                               0.3181818181818180,
+                               0.3181818181818180,
+                               0.3181818181818180,
+                               0.3333333333333330,
+                               0.3260869565217390,
+                               0.3043478260869570,
+                               0.3043478260869570,
+                               0.2954545454545450,
+                               0.2954545454545450,
+                               0.2954545454545450,
+                               0.2790697674418600,
+                               0.2666666666666670,
+                               0.2666666666666670,
+                               0.2826086956521740,
+                               0.2826086956521740,
+                               0.2888888888888890,
+                               0.2888888888888890,
+                               0.2727272727272730,
+                               0.2558139534883720,
+                               0.2558139534883720,
+                               0.2558139534883720,
+                               0.2500000000000000,
+                               0.2666666666666670,
+                               0.2608695652173910,
+                               0.2608695652173910,
+                               0.2553191489361700,
+                               0.2553191489361700,
+                               0.2708333333333330,
+                               0.2500000000000000,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2448979591836730,
+                               0.2448979591836730,
+                               0.2500000000000000,
+                               0.2500000000000000,
+                               0.2500000000000000,
+                               0.2448979591836730,
+                               0.2448979591836730,
+                               0.2400000000000000,
+                               0.2400000000000000,
+                               0.2549019607843140,
+                               0.2549019607843140,
+                               0.2400000000000000,
+                               0.2400000000000000,
+                               0.2400000000000000,
+                               0.2400000000000000,
+                               0.2448979591836730,
+                               0.2448979591836730,
+                               0.2448979591836730,
+                               0.2500000000000000,
+                               0.2500000000000000,
+                               0.2500000000000000,
+                               0.2653061224489800,
+                               0.2653061224489800,
+                               0.2653061224489800,
+                               0.2653061224489800,
+                               0.2653061224489800,
+                               0.2800000000000000,
+                               0.2653061224489800,
+                               0.2653061224489800,
+                               0.2800000000000000,
+                               0.2500000000000000,
+                               0.2500000000000000,
+                               0.2500000000000000,
+                               0.2500000000000000,
+                               0.2500000000000000,
+                               0.2500000000000000,
+                               0.2448979591836730,
+                               0.2500000000000000,
+                               0.2500000000000000,
+                               0.2500000000000000,
+                               0.2500000000000000,
+                               0.2500000000000000,
+                               0.2553191489361700,
+                               0.2608695652173910,
+                               0.2608695652173910,
+                               0.2608695652173910,
+                               0.2608695652173910,
+                               0.2608695652173910,
+                               0.2553191489361700,
+                               0.2708333333333330,
+                               0.2708333333333330,
+                               0.2708333333333330,
+                               0.2708333333333330,
+                               0.2708333333333330,
+                               0.2708333333333330,
+                               0.2708333333333330,
+                               0.2653061224489800,
+                               0.2653061224489800,
+                               0.2653061224489800,
+                               0.2653061224489800,
+                               0.2653061224489800,
+                               0.2800000000000000,
+                               0.2800000000000000,
+                               0.2800000000000000,
+                               0.2800000000000000,
+                               0.2800000000000000,
+                               0.2857142857142860,
+                               0.2916666666666670,
+                               0.2916666666666670,
+                               0.2916666666666670,
+                               0.2916666666666670,
+                               0.2916666666666670,
+                               0.2857142857142860,
+                               0.2916666666666670,
+                               0.2916666666666670,
+                               0.3061224489795920,
+                               0.3061224489795920,
+                               0.2978723404255320,
+                               0.2978723404255320,
+                               0.2826086956521740,
+                               0.2826086956521740,
+                               0.2727272727272730,
+                               0.2727272727272730,
+                               0.2888888888888890,
+                               0.3043478260869570,
+                               0.3043478260869570,
+                               0.3043478260869570,
+                               0.3043478260869570,
+                               0.3043478260869570,
+                               0.3191489361702130,
+                               0.3260869565217390,
+                               0.3260869565217390,
+                               0.3260869565217390,
+                               0.3260869565217390,
+                               0.3260869565217390,
+                               0.3260869565217390,
+                               0.3260869565217390,
+                               0.3260869565217390,
+                               0.3260869565217390,
+                               0.3260869565217390,
+                               0.3260869565217390,
+                               0.3260869565217390,
+                               0.3111111111111110,
+                               0.3181818181818180,
+                               0.3181818181818180,
+                               0.3181818181818180,
+                               0.3181818181818180,
+                               0.3023255813953490,
+                               0.3023255813953490,
+                               0.2790697674418600,
+                               0.2857142857142860,
+                               0.3023255813953490,
+                               0.3023255813953490,
+                               0.3023255813953490,
+                               0.3181818181818180,
+                               0.3333333333333330,
+                               0.3617021276595740,
+                               0.3877551020408160,
+                               0.3877551020408160,
+                               0.4000000000000000,
+                               0.4000000000000000,
+                               0.4117647058823530,
+                               0.4117647058823530,
+                               0.4117647058823530,
+                               0.4117647058823530,
+                               0.4000000000000000,
+                               0.3877551020408160,
+                               0.3750000000000000,
+                               0.3750000000000000,
+                               0.3750000000000000,
+                               0.3750000000000000,
+                               0.3877551020408160,
+                               0.3877551020408160,
+                               0.3800000000000000,
+                               0.3800000000000000,
+                               0.3673469387755100,
+                               0.3673469387755100,
+                               0.3673469387755100,
+                               0.3673469387755100,
+                               0.3673469387755100,
+                               0.3673469387755100,
+                               0.3673469387755100,
+                               0.3541666666666670,
+                               0.3404255319148940,
+                               0.3404255319148940,
+                               0.3404255319148940,
+                               0.3404255319148940,
+                               0.3404255319148940,
+                               0.3404255319148940,
+                               0.3404255319148940,
+                               0.3404255319148940,
+                               0.3404255319148940,
+                               0.3404255319148940,
+                               0.3404255319148940,
+                               0.3478260869565220,
+                               0.3478260869565220,
+                               0.3478260869565220,
+                               0.3404255319148940,
+                               0.3260869565217390,
+                               0.3260869565217390,
+                               0.3260869565217390,
+                               0.3260869565217390,
+                               0.3191489361702130,
+                               0.3191489361702130,
+                               0.3043478260869570,
+                               0.2727272727272730,
+                               0.2727272727272730,
+                               0.2727272727272730,
+                               0.2727272727272730,
+                               0.2727272727272730,
+                               0.2727272727272730,
+                               0.2727272727272730,
+                               0.2727272727272730,
+                               0.2888888888888890,
+                               0.2888888888888890,
+                               0.2826086956521740,
+                               0.2888888888888890,
+                               0.2888888888888890,
+                               0.3043478260869570,
+                               0.3191489361702130,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3409090909090910,
+                               0.3409090909090910,
+                               0.3409090909090910,
+                               0.3409090909090910,
+                               0.3409090909090910,
+                               0.3555555555555560,
+                               0.3555555555555560,
+                               0.3555555555555560,
+                               0.3555555555555560,
+                               0.3555555555555560,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3333333333333330,
+                               0.3478260869565220,
+                               0.3478260869565220,
+                               0.3478260869565220,
+                               0.3555555555555560,
+                               0.3478260869565220,
+                               0.3478260869565220,
+                               0.3617021276595740,
+                               0.3617021276595740,
+                               0.3617021276595740,
+                               0.3617021276595740,
+                               0.3478260869565220,
+                               0.3617021276595740,
+                               0.3617021276595740,
+                               0.3478260869565220,
+                               0.3478260869565220,
+                               0.3404255319148940,
+                               0.3404255319148940,
+                               0.3404255319148940,
+                               0.3404255319148940,
+                               0.3404255319148940,
+                               0.3404255319148940,
+                               0.3541666666666670,
+                               0.3541666666666670,
+                               0.3617021276595740,
+                               0.3617021276595740,
+                               0.3617021276595740,
+                               0.3617021276595740,
+                               0.3541666666666670,
+                               0.3600000000000000,
+                               0.3600000000000000,
+                               0.3600000000000000,
+                               0.3725490196078430,
+                               0.3725490196078430,
+                               0.3725490196078430,
+                               0.3800000000000000,
+                               0.4000000000000000,
+                               0.4000000000000000,
+                               0.4000000000000000,
+                               0.4000000000000000,
+                               0.4000000000000000,
+                               0.3877551020408160,
+                               0.3877551020408160,
+                               0.3877551020408160,
+                               0.3877551020408160,
+                               0.4000000000000000,
+                               0.4000000000000000,
+                               0.4000000000000000,
+                               0.4000000000000000,
+                               0.4000000000000000,
+                               0.4000000000000000,
+                               0.4000000000000000,
+                               0.3877551020408160,
+                               0.3877551020408160,
+                               0.3750000000000000,
+                               0.3750000000000000,
+                               0.3695652173913040,
+                               0.3695652173913040,
+                               0.3695652173913040,
+                               0.3695652173913040,
+                               0.3555555555555560,
+                               0.3555555555555560,
+                               0.3695652173913040,
+                               0.3695652173913040,
+                               0.3695652173913040,
+                               0.3695652173913040,
+                               0.3617021276595740,
+                               0.3695652173913040,
+                               0.3555555555555560,
+                               0.3409090909090910,
+                               0.3555555555555560,
+                               0.3555555555555560,
+                               0.3777777777777780,
+                               0.3863636363636360,
+                               0.3953488372093020,
+                               0.3953488372093020,
+                               0.3953488372093020,
+                               0.3953488372093020,
+                               0.3863636363636360,
+                               0.3863636363636360,
+                               0.3863636363636360,
+                               0.3863636363636360,
+                               0.3863636363636360,
+                               0.3863636363636360,
+                               0.3863636363636360,
+                               0.3863636363636360,
+                               0.3777777777777780,
+                               0.3777777777777780,
+                               0.3777777777777780,
+                               0.3777777777777780,
+                               0.3777777777777780,
+                               0.3777777777777780,
+                               0.3777777777777780,
+                               0.3777777777777780,
+                               0.3777777777777780,
+                               0.3777777777777780,
+                               0.3777777777777780,
+                               0.3777777777777780,
+                               0.3913043478260870,
+                               0.3913043478260870,
+                               0.3913043478260870,
+                               0.3913043478260870,
+                               0.3636363636363640,
+                               0.3777777777777780,
+                               0.3777777777777780,
+                               0.3777777777777780,
+                               0.3777777777777780,
+                               0.3777777777777780,
+                               0.3777777777777780,
+                               0.3636363636363640,
+                               0.3636363636363640,
+                               0.3636363636363640,
+                               0.3636363636363640,
+                               0.3636363636363640,
+                               0.3555555555555560,
+                               0.3555555555555560,
+                               0.3555555555555560,
+                               0.3555555555555560,
+                               0.3409090909090910,
+                               0.3409090909090910,
+                               0.3255813953488370,
+                               0.3255813953488370,
+                               0.3255813953488370,
+                               0.3255813953488370,
+                               0.3414634146341460,
+                               0.3170731707317070,
+                               0.3095238095238100,
+                               0.3255813953488370,
+                               0.3255813953488370,
+                               0.3255813953488370,
+                               0.3095238095238100,
+                               0.3095238095238100,
+                               0.3255813953488370,
+                               0.3255813953488370,
+                               0.3095238095238100,
+                               0.3095238095238100,
+                               0.3095238095238100,
+                               0.3255813953488370,
+                               0.3255813953488370,
+                               0.3255813953488370,
+                               0.3255813953488370,
+                               0.3255813953488370,
+                               0.3095238095238100,
+                               0.3095238095238100,
+                               0.3255813953488370,
+                               0.3255813953488370,
+                               0.3409090909090910,
+                               0.3409090909090910,
+                               0.3555555555555560,
+                               0.3555555555555560,
+                               0.3555555555555560,
+                               0.3555555555555560,
+                               0.3555555555555560,
+                               0.3409090909090910,
+                               0.3409090909090910,
+                               0.3488372093023260,
+                               0.3636363636363640,
+                               0.3636363636363640,
+                               0.3636363636363640,
+                               0.3636363636363640,
+                               0.3636363636363640,
+                               0.3913043478260870,
+                               0.3913043478260870,
+                               0.3913043478260870,
+                               0.3913043478260870,
+                               0.3913043478260870,
+                               0.3913043478260870,
+                               0.3913043478260870,
+                               0.3913043478260870,
+                               0.3913043478260870,
+                               0.3913043478260870,
+                               0.3913043478260870,
+                               0.3913043478260870,
+                               0.3829787234042550,
+                               0.3913043478260870,
+                               0.3913043478260870,
+                               0.3913043478260870,
+                               0.3913043478260870,
+                               0.4042553191489360,
+                               0.4042553191489360,
+                               0.4042553191489360,
+                               0.3913043478260870,
+                               0.4000000000000000,
+                               0.4000000000000000,
+                               0.3863636363636360,
+                               0.3636363636363640,
+                               0.3636363636363640,
+                               0.3636363636363640,
+                               0.3636363636363640,
+                               0.3488372093023260,
+                               0.3488372093023260,
+                               0.3488372093023260,
+                               0.3409090909090910,
+                               0.3255813953488370,
+                               0.3255813953488370,
+                               0.3181818181818180,
+                               0.3181818181818180,
+                               0.3111111111111110,
+                               0.3111111111111110,
+                               0.3111111111111110,
+                               0.3260869565217390,
+                               0.3404255319148940,
+                               0.3404255319148940,
+                               0.3260869565217390,
+                               0.3023255813953490,
+                               0.3181818181818180,
+                               0.3111111111111110,
+                               0.3111111111111110,
+                               0.3043478260869570,
+                               0.3043478260869570,
+                               0.3043478260869570,
+                               0.3043478260869570,
+                               0.3043478260869570,
+                               0.3111111111111110,
+                               0.3111111111111110,
+                               0.3111111111111110,
+                               0.3260869565217390,
+                               0.3260869565217390,
+                               0.3111111111111110,
+                               0.3111111111111110,
+                               0.3111111111111110,
+                               0.3111111111111110,
+                               0.3111111111111110,
+                               0.3111111111111110,
+                               0.3260869565217390,
+                               0.3111111111111110,
+                               0.3111111111111110,
+                               0.2954545454545450,
+                               0.2954545454545450,
+                               0.2954545454545450,
+                               0.2954545454545450,
+                               0.3260869565217390,
+                               0.3191489361702130,
+                               0.3191489361702130,
+                               0.3191489361702130,
+                               0.3191489361702130,
+                               0.3191489361702130,
+                               0.3125000000000000,
+                               0.3125000000000000,
+                               0.3125000000000000,
+                               0.3125000000000000,
+                               0.2978723404255320,
+                               0.2826086956521740,
+                               0.2826086956521740,
+                               0.2765957446808510,
+                               0.2978723404255320,
+                               0.2978723404255320,
+                               0.2916666666666670,
+                               0.2765957446808510,
+                               0.2765957446808510,
+                               0.2765957446808510,
+                               0.2765957446808510,
+                               0.2916666666666670,
+                               0.2916666666666670,
+                               0.3061224489795920,
+                               0.3061224489795920,
+                               0.3061224489795920,
+                               0.3061224489795920,
+                               0.2916666666666670,
+                               0.2916666666666670,
+                               0.2916666666666670,
+                               0.2916666666666670,
+                               0.2708333333333330,
+                               0.2500000000000000,
+                               0.2500000000000000,
+                               0.2500000000000000,
+                               0.2500000000000000,
+                               0.2500000000000000,
+                               0.2340425531914890,
+                               0.2340425531914890,
+                               0.2173913043478260,
+                               0.2173913043478260,
+                               0.1956521739130430,
+                               0.1956521739130430,
+                               0.1956521739130430,
+                               0.1956521739130430,
+                               0.2173913043478260,
+                               0.2173913043478260,
+                               0.2000000000000000,
+                               0.2000000000000000,
+                               0.2173913043478260,
+                               0.2173913043478260,
+                               0.1956521739130430,
+                               0.1956521739130430,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2291666666666670,
+                               0.2244897959183670,
+                               0.2083333333333330,
+                               0.1914893617021280,
+                               0.1914893617021280,
+                               0.1875000000000000,
+                               0.1914893617021280,
+                               0.1914893617021280,
+                               0.1914893617021280,
+                               0.1914893617021280,
+                               0.1914893617021280,
+                               0.1739130434782610,
+                               0.1702127659574470,
+                               0.1666666666666670,
+                               0.1666666666666670,
+                               0.1666666666666670,
+                               0.1666666666666670,
+                               0.1836734693877550,
+                               0.1875000000000000,
+                               0.1914893617021280,
+                               0.1914893617021280,
+                               0.1739130434782610,
+                               0.1739130434782610,
+                               0.1739130434782610,
+                               0.1739130434782610,
+                               0.1739130434782610,
+                               0.1739130434782610,
+                               0.1739130434782610,
+                               0.1739130434782610,
+                               0.1739130434782610,
+                               0.1739130434782610,
+                               0.1777777777777780,
+                               0.1702127659574470,
+                               0.1702127659574470,
+                               0.1702127659574470,
+                               0.1702127659574470,
+                               0.1702127659574470,
+                               0.1875000000000000,
+                               0.1875000000000000,
+                               0.1875000000000000,
+                               0.1875000000000000,
+                               0.1875000000000000,
+                               0.1875000000000000,
+                               0.1875000000000000,
+                               0.1875000000000000,
+                               0.1836734693877550,
+                               0.1836734693877550,
+                               0.1666666666666670,
+                               0.1666666666666670,
+                               0.1666666666666670,
+                               0.1458333333333330,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1428571428571430,
+                               0.1458333333333330,
+                               0.1458333333333330,
+                               0.1458333333333330,
+                               0.1276595744680850,
+                               0.1276595744680850,
+                               0.1276595744680850,
+                               0.1276595744680850,
+                               0.1276595744680850,
+                               0.1276595744680850,
+                               0.1276595744680850,
+                               0.1276595744680850,
+                               0.1276595744680850,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1224489795918370,
+                               0.1224489795918370,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1250000000000000,
+                               0.1224489795918370,
+                               0.1224489795918370,
+                               0.1224489795918370,
+                               0.1224489795918370,
+                               0.1224489795918370,
+                               0.1224489795918370,
+                               0.1041666666666670,
+                               0.1041666666666670,
+                               0.1041666666666670,
+                               0.1041666666666670,
+                               0.1041666666666670,
+                               0.1020408163265310,
+                               0.1020408163265310,
+                               0.1020408163265310,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1020408163265310,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0800000000000000,
+                               0.0800000000000000,
+                               0.0800000000000000,
+                               0.0800000000000000,
+                               0.0800000000000000,
+                               0.0800000000000000,
+                               0.0800000000000000,
+                               0.0800000000000000,
+                               0.0800000000000000,
+                               0.0800000000000000,
+                               0.0800000000000000,
+                               0.0800000000000000,
+                               0.0800000000000000,
+                               0.0800000000000000,
+                               0.0800000000000000,
+                               0.0816326530612245,
+                               0.1000000000000000,
+                               0.1000000000000000,
+                               0.0980392156862745,
+                               0.0980392156862745,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.0961538461538462,
+                               0.0943396226415094,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0909090909090909,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0925925925925926,
+                               0.0909090909090909,
+                               0.0740740740740741,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0727272727272727,
+                               0.0714285714285714,
+                               0.0545454545454545,
+                               0.0545454545454545,
+                               0.0535714285714286,
+                               0.0535714285714286,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0363636363636364,
+                               0.0357142857142857,
+                               0.0357142857142857,
+                               0.0357142857142857,
+                               0.0357142857142857,
+                               0.0357142857142857,
+                               0.0357142857142857,
+                               0.0357142857142857,
+                               0.0357142857142857,
+                               0.0357142857142857,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0350877192982456,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0344827586206897,
+                               0.0175438596491228,
+                               0.0175438596491228,
+                               0.0175438596491228
+                       }
+               }
+       };
+
+}      /* namespace prob_features */
+
+}      /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_FEATURES_MODEL_H_ */
diff --git a/src/my-place/user_places/similarity.h b/src/my-place/user_places/similarity.h
new file mode 100644 (file)
index 0000000..5938ef5
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_SIMILAR_H_
+#define _CONTEXT_PLACE_RECOGNITION_SIMILAR_H_
+
+#include "user_places_types.h"
+
+namespace ctx {
+
+namespace similarity {
+
+       template <class T> ctx::share_t overlap1stOver2nd(const T &s1, const T &s2)
+       {
+               if (s2.empty()) {
+                       return 0;
+               }
+               int count = 0;
+               for (auto e : s2) {
+                       if (s1.find(e) != s1.end()) {
+                               count++;
+                       }
+               }
+               return (ctx::share_t) count / s2.size();
+       }
+
+       template <class T> ctx::share_t overlapBiggerOverSmaller(const T &s1, const T &s2)
+       {
+               if (s1.size() > s2.size()) {
+                       return similarity::overlap1stOver2nd(s1, s2);
+               } else {
+                       return similarity::overlap1stOver2nd(s2, s1);
+               }
+       }
+
+       template <class T> bool isJoint(const T &s1, const T &s2)
+       {
+               for (auto e : s2) {
+                       if (s1.find(e) != s1.end()) {
+                               return true;
+                       }
+               }
+               return false;
+       }
+
+}      /* namespace similarity */
+
+}      /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_SIMILAR_H_ */
diff --git a/src/my-place/user_places/user_places.cpp b/src/my-place/user_places/user_places.cpp
new file mode 100644 (file)
index 0000000..ca237ea
--- /dev/null
@@ -0,0 +1,136 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <ctime>
+#include <memory>
+#include <Types.h>
+#include "user_places.h"
+#include "places_detector.h"
+#include "../place_recognition_types.h"
+
+ctx::UserPlaces::UserPlaces(PlaceRecogMode energyMode):
+       __visitDetector(nullptr),
+       __placesDetector(nullptr),
+       __placesDetectorTimerId(-1)
+{
+       time_t now = std::time(nullptr);
+       __visitDetector = new(std::nothrow) VisitDetector(now, energyMode);
+       if (__visitDetector == nullptr) {
+               _E("Cannot initialize __visitDetector");
+               return;
+       }
+
+       __placesDetector = new(std::nothrow) PlacesDetector();
+       if (__placesDetector == nullptr) {
+               _E("Cannot initialize __placesDetector");
+               return;
+       }
+
+       __placesDetectorTimerId = __timerManager.setAt( // execute once every night
+                       PLACES_DETECTOR_TASK_START_HOUR,
+                       PLACES_DETECTOR_TASK_START_MINUTE,
+                       DayOfWeek::EVERYDAY,
+                       __placesDetector);
+       if (__placesDetectorTimerId < 0) {
+               _E("PlacesDetector timer set FAIL");
+               return;
+       } else {
+               _D("PlacesDetector timer set SUCCESS");
+       }
+}
+
+ctx::UserPlaces::~UserPlaces()
+{
+       if (__placesDetectorTimerId >= 0) {
+               __timerManager.remove(__placesDetectorTimerId);
+               _D("PlacesDetector timer removed");
+       }
+
+       if (__visitDetector) {
+               delete __visitDetector;
+       }
+
+       if (__placesDetector) {
+               delete __placesDetector;
+       }
+};
+
+std::vector<std::shared_ptr<ctx::Place>> ctx::UserPlaces::getPlaces()
+{
+       if (__placesDetector) {
+               return __placesDetector->getPlaces();
+       } else {
+               return std::vector<std::shared_ptr<ctx::Place>>();
+       }
+}
+
+/*
+ * Example JSON output:
+ * ------------------------------------------------
+ * {
+ *       "PlacesList": [
+ *             {
+ *               "TypeId": 2,
+ *               "Name": "Work",
+ *               "GeoLatitude": 10.94433,
+ *               "GeoLongitude": 50.85504,
+ *               "WifiAPs": "00:1f:f3:5b:2b:1f,15:34:56:78:9a:ba,13:34:56:78:9a:ba",
+ *               "CreateDate": 12132567
+ *             },
+ *             {
+ *               "TypeId": 1,
+ *               "Name": "Home",
+ *               "GeoLatitude": 10.96233,
+ *               "GeoLongitude": 50.84304,
+ *               "WifiAPs": "aa:bb:cc:dd:ee:ff,10:34:56:78:9a:bc",
+ *               "CreateDate": 12132889
+ *             },
+ *             {
+ *               "TypeId": 3,
+ *               "Name": "Other",
+ *               "GeoLatitude": 10.96553,
+ *               "GeoLongitude": 50.80404,
+ *               "WifiAPs": "12:34:56:78:9a:ba",
+ *               "CreateDate": 12132346
+ *             }
+ *       ]
+ * }
+ */
+ctx::Json ctx::UserPlaces::composeJson(std::vector<std::shared_ptr<Place>> places)
+{
+       ctx::Json data;
+       for (std::shared_ptr<ctx::Place> place : places) {
+               ctx::Json placeJson;
+               placeJson.set(NULL, PLACE_CATEG_ID, place->categId);
+               placeJson.set(NULL, PLACE_CATEG_CONFIDENCE, place->categConfidence);
+               placeJson.set(NULL, PLACE_NAME, place->name);
+               if (place->locationValid) {
+                       placeJson.set(NULL, PLACE_GEO_LATITUDE, place->location.latitude);
+                       placeJson.set(NULL, PLACE_GEO_LONGITUDE, place->location.longitude);
+               }
+               placeJson.set(NULL, PLACE_WIFI_APS, place->wifiAps);
+               placeJson.set(NULL, PLACE_CREATE_DATE, static_cast<int>(place->createDate));
+               data.append(NULL, DATA_READ, placeJson);
+       }
+       return data;
+}
+
+void ctx::UserPlaces::setMode(PlaceRecogMode energyMode)
+{
+       if (__visitDetector) {
+               __visitDetector->setMode(energyMode);
+       }
+}
diff --git a/src/my-place/user_places/user_places.h b/src/my-place/user_places/user_places.h
new file mode 100644 (file)
index 0000000..1df6388
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_USER_PLACES_H_
+#define _CONTEXT_PLACE_RECOGNITION_USER_PLACES_H_
+
+#include <vector>
+#include <Json.h>
+#include <TimerManager.h>
+#include "visit_detector.h"
+#include "places_detector.h"
+#include "user_places_types.h"
+
+namespace ctx {
+
+       class UserPlaces {
+
+       private:
+               VisitDetector *__visitDetector;
+               PlacesDetector *__placesDetector;
+               int __placesDetectorTimerId;
+               TimerManager __timerManager;
+
+       public:
+               UserPlaces(PlaceRecogMode energyMode = PLACE_RECOG_HIGH_ACCURACY_MODE);
+               ~UserPlaces();
+
+               void setMode(PlaceRecogMode energyMode);
+               std::vector<std::shared_ptr<Place>> getPlaces();
+               static Json composeJson(std::vector<std::shared_ptr<Place>> places);
+
+       };      /* class UserPlaces */
+
+}      /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_USER_PLACES_H_ */
diff --git a/src/my-place/user_places/user_places_params.h b/src/my-place/user_places/user_places_params.h
new file mode 100644 (file)
index 0000000..ec70a29
--- /dev/null
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_USER_PLACES_PARAMS_H_
+#define _CONTEXT_PLACE_RECOGNITION_USER_PLACES_PARAMS_H_
+
+/*
+ * WiFi scanning frequency (in minutes) in PLACE_RECOG_HIGH_ACCURACY_MODE.
+ */
+#define WIFI_LOGGER_INTERVAL_MINUTES_HIGH_ACCURACY 3
+
+/*
+ * WiFi scanning frequency (in minutes) in PLACE_RECOG_LOW_POWER_MODE.
+ */
+#define WIFI_LOGGER_INTERVAL_MINUTES_LOW_POWER 60
+
+/*
+ * Time window taken into consideration (in seconds) in PLACE_RECOG_HIGH_ACCURACY_MODE.
+ */
+#define VISIT_DETECTOR_PERIOD_SECONDS_HIGH_ACCURACY 360
+
+/*
+ * Time window taken into consideration (in seconds) in PLACE_RECOG_LOW_POWER_MODE.
+ */
+#define VISIT_DETECTOR_PERIOD_SECONDS_LOW_POWER 3600
+
+/*
+ * Overlap threshold between two sets of mac addresses (overlap
+ * coefficient for two sets should be higher than this threshold
+ * in order to detect stable radio environment); =< 1.0
+ * New parameter in algorithm compared to original version of PlaceSense!
+ */
+#define VISIT_DETECTOR_OVERLAP 0.8f
+
+/*
+ * Specifies how many stable intervals must be seen to
+ * indicate an entrance to a place; >= 1
+ */
+#define VISIT_DETECTOR_STABLE_DEPTH 1
+
+/*
+ * Representatives threshold (representatnive beacon
+ * response rate should be higher than this threshold); =< 1.0
+ */
+#define VISIT_DETECTOR_REP_THRESHOLD 0.9f
+
+/*
+ * Specifies how long scans must be unstable to indicate a leave form a place; >= 1
+ */
+#define VISIT_DETECTOR_TOLERANCE_DEPTH 3
+
+#define PLACES_DETECTOR_TASK_START_HOUR 3
+#define PLACES_DETECTOR_TASK_START_MINUTE 11
+#define PLACES_DETECTOR_RETENTION_DAYS 30
+#define PLACES_DETECTOR_RETENTION_SECONDS 24 * 60 * 60 * PLACES_DETECTOR_RETENTION_DAYS
+
+/*
+ * Number of digits after decimal point used in geo coordinates.
+ */
+#define GEO_LOCATION_PRECISION 7
+
+/*
+ * Minimal duration of visit (in minutes) taking into account for place detection
+ */
+#define PLACES_DETECTOR_MIN_VISIT_DURATION_MINUTES 15
+
+/*
+ * Maximum duration of visit (in minutes) taking into account for place detection
+ */
+#define PLACES_DETECTOR_MAX_VISIT_DURATION_MINUTES 5 * 24 * 60
+
+/*
+ * Minimum visits number per place
+ */
+#define PLACES_DETECTOR_MIN_VISITS_PER_PLACE 1
+
+/*
+ * Minimum visits number per big place
+ */
+#define PLACES_DETECTOR_MIN_VISITS_PER_BIG_PLACE 4
+
+/*
+ * Minimal visit category score for taking this visit into consideration during
+ * place categorization
+ */
+#define PLACES_CATEGER_MIN_VISITS_SCORE 0.1
+
+/*
+ * Minimum visits number per home
+ */
+#define PLACES_CATEGER_MIN_VISITS_PER_HOME 3
+
+/*
+ * Minimum visits number per work
+ */
+#define PLACES_CATEGER_MIN_VISITS_PER_WORK 2
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_USER_PLACES_PARAMS_H_ */
diff --git a/src/my-place/user_places/user_places_types.cpp b/src/my-place/user_places/user_places_types.cpp
new file mode 100644 (file)
index 0000000..14b1355
--- /dev/null
@@ -0,0 +1,262 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <set>
+#include <iostream>
+#include <iomanip>
+#include <sstream>
+#include <algorithm>
+#include <Types.h>
+#include "user_places_types.h"
+#include "user_places_params.h"
+#include "debug_utils.h"
+
+#define __MAC_STRING_COMPONENTS_SEPARATOR ':'
+#define __MAC_SET_STRING_DELIMITER ','
+
+ctx::Mac::Mac(const std::string& str)
+{
+       std::stringstream ss(str);
+       try {
+               ss >> *this;
+       } catch (std::runtime_error &e) {
+               _E("%s", e.what());
+       }
+}
+
+ctx::Mac::Mac(const char *str)
+{
+       std::stringstream ss(str);
+       try {
+               ss >> *this;
+       } catch (std::runtime_error &e) {
+               _E("%s", e.what());
+       }
+}
+
+std::istream& ctx::operator>>(std::istream &input, ctx::Mac &mac)
+{
+       int h;
+       char colon;
+       for (size_t i = 0; i < ctx::Mac::MAC_SIZE; i++) {
+               input >> std::hex;
+               input >> h;
+               mac.c[i] = h;
+               if (i + 1 >= ctx::Mac::MAC_SIZE) {
+                       break;
+               }
+               input >> colon;
+               if (colon != __MAC_STRING_COMPONENTS_SEPARATOR) {
+                       throw std::runtime_error("Invalid MAC format");
+               }
+       }
+       input >> std::dec;
+       return input;
+}
+
+std::ostream& ctx::operator<<(std::ostream &output, const ctx::Mac &mac)
+{
+       size_t i = 0;
+       while (true) {
+               output << std::hex << std::setfill('0') << std::setw(2);
+               output << static_cast<int>(mac.c[i]);
+               i++;
+               if (i >= Mac::MAC_SIZE) {
+                       break;
+               }
+               output << __MAC_STRING_COMPONENTS_SEPARATOR;
+       }
+       output << std::dec;
+       return output;
+}
+
+ctx::Mac::operator std::string() const
+{
+       std::stringstream ss;
+       ss << *this;
+       return ss.str();
+}
+
+bool ctx::operator==(const Mac &m1, const Mac &m2)
+{
+       for (size_t i = 0; i < Mac::MAC_SIZE; i++) {
+               if (m1.c[i] != m2.c[i]) {
+                       return false;
+               }
+       }
+       return true;
+}
+
+bool ctx::operator!=(const Mac &m1, const Mac &m2)
+{
+       return !(m1 == m2);
+}
+
+bool ctx::operator<(const Mac &m1, const Mac &m2)
+{
+       unsigned char c1, c2;
+       for (size_t i = 0; i < Mac::MAC_SIZE; i++) {
+               c1 = m1.c[i];
+               c2 = m2.c[i];
+               if (c1 < c2) {
+                       return true;
+               }
+               if (c1 > c2) {
+                       return false;
+               }
+       }
+       return false; // they are equal
+}
+
+std::istream& ctx::operator>>(std::istream &input, ctx::MacSet &macSet)
+{
+       Mac mac;
+       char delimeter;
+       while (!input.eof()) {
+               try {
+                       input >> mac;
+               } catch (std::runtime_error &e) {
+                       _E("Cannot read macSet. Exception: %s", e.what());
+                       break;
+               }
+               macSet.insert(mac);
+               if (input.eof()) {
+                       break;
+               }
+               delimeter = input.get();
+               if (delimeter != __MAC_SET_STRING_DELIMITER) {
+                       input.unget();
+                       break;
+               }
+       }
+       return input;
+}
+
+std::ostream& ctx::operator<<(std::ostream &output, const ctx::MacSet &macSet)
+{
+       std::vector<Mac> macVec(macSet.size());
+       std::copy(macSet.begin(), macSet.end(), macVec.begin());
+       std::sort(macVec.begin(), macVec.end());
+
+       bool first = true;
+       for (auto &mac: macVec) {
+               if (first) {
+                       first = false;
+               } else {
+                       output << __MAC_SET_STRING_DELIMITER;
+               }
+               output << mac;
+       }
+       return output;
+}
+
+void ctx::LocationEvent::log()
+{
+       std::string time_str = DebugUtils::humanReadableDateTime(timestamp, "%T", 9);
+#ifdef TIZEN_ENGINEER_MODE
+       _D("location lat=%.8f, lon=%.8f, acc=%.2f[m], time=%s, method=%d",
+                       coordinates.latitude,
+                       coordinates.longitude,
+                       coordinates.accuracy,
+                       time_str.c_str(),
+                       method);
+#else /* TIZEN_ENGINEER_MODE */
+       _D("location lat=%.8f, lon=%.8f, acc=%.2f[m], time=%s",
+                       coordinates.latitude,
+                       coordinates.longitude,
+                       coordinates.accuracy,
+                       time_str.c_str());
+#endif /* TIZEN_ENGINEER_MODE */
+}
+
+void ctx::Visit::setLocation(Location location_)
+{
+       locationValid = true;
+       location = location_;
+}
+
+void ctx::Visit::printShort2Stream(std::ostream &out) const
+{
+       // print only valid visits
+       if (interval.end != 0) {
+               float duration = ((float) (interval.end - interval.start)) / 3600; // [h]
+               out << "__VISIT " << duration << "h: ";
+                       out << DebugUtils::humanReadableDateTime(interval.start, "%m/%d %H:%M", 15) << " Ã· ";
+                       out << DebugUtils::humanReadableDateTime(interval.end, "%m/%d %H:%M", 15) << std::endl;
+       }
+}
+
+bool ctx::operator==(const ctx::Visit &v1, const ctx::Visit &v2)
+{
+       return v1.interval.start == v2.interval.start
+                       && v1.interval.end == v2.interval.end
+                       && v1.categs == v2.categs
+                       && v1.location.latitude == v2.location.latitude
+                       && v1.location.longitude == v2.location.longitude
+                       && v1.location.accuracy == v2.location.accuracy
+                       && v1.locationValid == v2.locationValid
+                       && v1.macSet == v2.macSet;
+}
+
+ctx::MacSet ctx::macSetFromString(const std::string &str)
+{
+       MacSet macSet;
+       std::stringstream ss;
+       ss << str;
+       ss >> macSet;
+       return macSet;
+}
+
+bool ctx::operator>(const Mac &m1, const Mac &m2)
+{
+       return m2 < m1;
+}
+
+std::shared_ptr<ctx::MacSet> ctx::macSetFromMacs2Counts(const Macs2Counts &macs2Counts)
+{
+       std::shared_ptr<MacSet> macSet(std::make_shared<MacSet>());
+       for (auto &macCount: macs2Counts) {
+               macSet->insert(macCount.first);
+       }
+       return macSet;
+}
+
+std::shared_ptr<ctx::MacSet> ctx::macSetsUnion(const std::vector<std::shared_ptr<MacSet>> &macSets)
+{
+       std::shared_ptr<MacSet> unionSet = std::make_shared<MacSet>();
+       for (std::shared_ptr<MacSet> macSet : macSets) {
+               unionSet->insert(macSet->begin(), macSet->end());
+       }
+       return unionSet;
+}
+
+ctx::Interval::Interval(time_t start_, time_t end_) : start(start_), end(end_) {
+       if (end_ < start_) {
+               _E("Negative interval, start=%d, end=%d", start_, end_);
+       }
+}
+
+void ctx::Place::print2Stream(std::ostream &out) const
+{
+       out << "PLACE:" << std::endl;
+       out << "__CATEGORY: " << name << std::endl;
+       if (locationValid) {
+               out << "__LOCATION: lat=" << std::setprecision(GEO_LOCATION_PRECISION + 2) << location.latitude;
+               out << ", lon=" << location.longitude << std::setprecision(5) << std::endl;
+       }
+       out << "__WIFI:" << wifiAps << std::endl;
+       out << "__CREATE_DATE: " << DebugUtils::humanReadableDateTime(createDate, "%F %T", 80) << std::endl;
+}
diff --git a/src/my-place/user_places/user_places_types.h b/src/my-place/user_places/user_places_types.h
new file mode 100644 (file)
index 0000000..cdf7be4
--- /dev/null
@@ -0,0 +1,219 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_USER_PLACES_TYPES_H_
+#define _CONTEXT_PLACE_RECOGNITION_USER_PLACES_TYPES_H_
+
+#include <memory>
+#include <vector>
+#include <map>
+#include <unordered_map>
+#include <unordered_set>
+#include "graph.h"
+#include "../place_recognition_types.h"
+#include <string>
+#include <ctime>
+
+namespace ctx {
+
+       /*
+        * type for numerical computations
+        */
+       typedef double num_t;
+
+       /*
+        * mac address
+        */
+       class Mac {
+
+       public:
+               const static size_t MAC_SIZE = 6;  // number of bytes for mac address.
+               unsigned char c[MAC_SIZE];
+
+               Mac() {};
+               Mac(const std::string &str);
+               Mac(const char *str);
+               operator std::string() const;
+
+       };      /* class Mac */
+
+       std::istream &operator>>(std::istream &input, ctx::Mac &mac);
+       std::ostream &operator<<(std::ostream &output, const ctx::Mac &mac);
+       bool operator==(const ctx::Mac &m1, const ctx::Mac &m2);
+       bool operator!=(const ctx::Mac &m1, const ctx::Mac &m2);
+       bool operator<(const ctx::Mac &m1, const ctx::Mac &m2);
+       bool operator>(const ctx::Mac &m1, const ctx::Mac &m2);
+
+}      /* namespace ctx */
+
+namespace std {
+
+       template <> struct hash<ctx::Mac> {
+               size_t operator()(const ctx::Mac & m) const {
+                       size_t h = 1;
+                       for (size_t i = 0; i < ctx::Mac::MAC_SIZE; i++) {
+                               h = h * 37 + m.c[i];
+                       }
+                       return h;
+               }
+       };
+
+}      /* namespace std */
+
+namespace ctx {
+
+       typedef float share_t;
+       typedef int count_t;
+
+       typedef std::unordered_map<ctx::Mac, ctx::count_t> Macs2Counts;
+       typedef std::unordered_map<ctx::Mac, ctx::share_t> Macs2Shares;
+
+       typedef std::unordered_set<ctx::Mac> MacSet;
+
+       std::istream &operator>>(std::istream &input, ctx::MacSet &macSet);
+       std::ostream &operator<<(std::ostream &output, const ctx::MacSet &macSet);
+       ctx::MacSet macSetFromString(const std::string &str);
+
+       std::shared_ptr<MacSet> macSetsUnion(const std::vector<std::shared_ptr<MacSet>> &macSets);
+
+       struct Interval {
+               time_t start;
+               time_t end;
+
+               Interval(time_t start, time_t end);
+       };
+
+}      /* namespace ctx */
+
+namespace std {
+
+       template <> struct hash<ctx::Interval> {
+               size_t operator()(const ctx::Interval & interval) const {
+                       return interval.end * interval.start;
+               }
+       };
+
+}      /* namespace std */
+
+namespace ctx {
+
+       /*
+        * fully describes interval data after the interval is finished
+        */
+       struct Frame {
+               Interval interval;
+               count_t numberOfTimestamps;
+               Macs2Counts macs2Counts;
+
+               Frame(Interval interval_) : interval(interval_), numberOfTimestamps(0) {};
+       };
+
+       /*
+        * mac address + its timestamp
+        */
+       struct MacEvent {
+               time_t timestamp;
+               Mac mac;
+
+               MacEvent(time_t timestamp_, Mac mac_) : timestamp(timestamp_), mac(mac_) {}
+       };
+
+       typedef std::map<int, num_t> Categs; // scores of categories
+
+       struct Location {
+               double latitude;
+               double longitude;
+               double accuracy; // [m]
+
+               Location(double latitude_ = 0.0, double longitude_ = 0.0, double accuracy_ = -1.0)
+                       : latitude(latitude_), longitude(longitude_), accuracy(accuracy_) {}
+
+       };      /* struct Location */
+
+#ifdef TIZEN_ENGINEER_MODE
+       enum LocationSource {
+               LOCATION_METHOD_REQUEST = 0,
+               LOCATION_METHOD_GET_LOCATION = 1,
+               LOCATION_METHOD_GET_LAST_LOCATION = 2
+       };
+#endif /* TIZEN_ENGINEER_MODE */
+
+       /*
+        * location + timestamp + method
+        */
+       struct LocationEvent {
+               Location coordinates;
+               time_t timestamp;
+
+#ifdef TIZEN_ENGINEER_MODE
+               LocationSource method;
+
+               LocationEvent(double latitude_, double longitude_, double accuracy_, time_t timestamp_, LocationSource method_) :
+                       coordinates(latitude_, longitude_, accuracy_),
+                       timestamp(timestamp_), method(method_) {}
+#else /* TIZEN_ENGINEER_MODE */
+               LocationEvent(double latitude_, double longitude_, double accuracy_, time_t timestamp_) :
+                       coordinates(latitude_, longitude_, accuracy_),
+                       timestamp(timestamp_) {}
+#endif /* TIZEN_ENGINEER_MODE */
+
+               void log();
+
+       };      /* struct LocationEvent */
+
+       struct Visit {
+               Interval interval;
+               std::shared_ptr<MacSet> macSet;
+               Categs categs;
+               bool locationValid;
+               Location location; // makes sense if locationValid == true;
+
+               Visit(Interval interval_, std::shared_ptr<MacSet> macSet_ = std::make_shared<MacSet>(), Categs categs_ = Categs()) :
+                       interval(interval_),
+                       macSet(macSet_),
+                       categs(categs_),
+                       locationValid(false) {}
+               void setLocation(Location location);
+               void printShort2Stream(std::ostream &out) const;
+
+       };      /* struct Visit */
+
+       bool operator==(const Visit &v1, const Visit &v2);
+       typedef std::vector<Visit> Visits;
+       typedef std::vector<MacEvent> MacEvents; // used to store current interval logs
+
+       std::shared_ptr<MacSet> macSetFromMacs2Counts(const Macs2Counts &macs2Counts);
+
+       typedef float confidence_t;
+
+       class Place {
+
+       public:
+               PlaceCategId categId; // category of a place (work/home/other)
+               confidence_t categConfidence; // confidence of the above category - between [0,1]
+               std::string name; // for now: "work"/"home"/"other"
+               bool locationValid;
+               Location location; // makes sense if locationValid == true;
+               std::string wifiAps; // WiFi APs MAC addresses separated by ","
+               time_t createDate; // The last update time of this place
+
+               void print2Stream(std::ostream &out) const;
+
+       };      /* class Place */
+
+}      /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_USER_PLACES_TYPES_H_ */
diff --git a/src/my-place/user_places/visit_categer.cpp b/src/my-place/user_places/visit_categer.cpp
new file mode 100644 (file)
index 0000000..1d4c0c6
--- /dev/null
@@ -0,0 +1,422 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "visit_categer.h"
+#include "mahal.h"
+#include <time.h>
+#include "../place_recognition_types.h"
+#include "prob_features_model.h"
+#include <Types.h>
+
+// categorizer model parameters trained offline (implemented in python):
+const std::map<int, ctx::MahalModel> ctx::VisitCateger::__models({
+{
+       PLACE_CATEG_ID_HOME,
+       ctx::MahalModel(
+       {
+               0.588408417316, 0.475154840361, -0.564085141865, 0.077711893790, 0.782630398597, -0.650926403250, -0.101943950378
+       },
+       {
+               0.797977863370, -0.133179879257, 0.242803062646, -0.059448581046, -0.117039646748, 0.097645535057, 0.014250290052,
+               -0.133179879257, 1.028900241400, -0.252245407243, 0.058455883835, -0.283950879851, 0.172204076583, 0.247906065767,
+               0.242803062646, -0.252245407243, 1.832134785177, 0.327188225606, 0.874905851092, -0.371088938012, -1.289816938938,
+               -0.059448581046, 0.058455883835, 0.327188225606, 1.455090164348, 0.138363721074, 0.216985279422, -1.113021128017,
+               -0.117039646748, -0.283950879851, 0.874905851092, 0.138363721074, 1.379674755873, -0.977922749615, -0.738895486376,
+               0.097645535057, 0.172204076583, -0.371088938012, 0.216985279422, -0.977922749615, 0.899928922718, -0.158101631251,
+               0.014250290052, 0.247906065767, -1.289816938938, -1.113021128017, -0.738895486376, -0.158101631251, 2.644105309746
+       })
+},
+{
+       PLACE_CATEG_ID_WORK,
+       ctx::MahalModel(
+       {
+               -0.128092670982, -0.762177819157, 0.262924477521, -0.412038966097, -1.049141893517, 1.104760800499, -0.628939955525
+       },
+       {
+               15.751249839350, 11.389025401325, -9.885346240379, -0.010809392387, -1.308837060762, 0.970778241189, 0.558946631235,
+               11.389025401325, 12.830223040140, -8.517695939156, 0.293693134532, -0.845784968295, 1.418175236596, -2.246658259974,
+               -9.885346240379, -8.517695939156, 10.222750966685, 0.390448668966, 1.095218945062, -0.403733435617, -1.815103304859,
+               -0.010809392387, 0.293693134532, 0.390448668966, 2.256864603458, 0.632080300647, -0.019551779384, -1.751417951792,
+               -1.308837060762, -0.845784968295, 1.095218945062, 0.632080300647, 3.132753467561, -1.427748733399, -4.291958669471,
+               0.970778241189, 1.418175236596, -0.403733435617, -0.019551779384, -1.427748733399, 1.183055586213, 0.200571452172,
+               0.558946631235, -2.246658259974, -1.815103304859, -1.751417951792, -4.291958669471, 0.200571452172, 11.668888615934
+       })
+},
+{
+       PLACE_CATEG_ID_OTHER,
+       ctx::MahalModel(
+       {
+               -0.542340098504, 0.184789511765, 0.387451546413, 0.301902661472, 0.109392397093, -0.310468874039, 0.709513920221
+       },
+       {
+               2.153884992301, -0.129488409324, 0.136236052776, -0.138043678532, -0.227492557156, 0.117810812390, 0.265072329266,
+               -0.129488409324, 3.165213522741, -1.751520714507, 0.467831090302, -0.483916138161, 0.376293684450, 0.149387541935,
+               0.136236052776, -1.751520714507, 2.483475248800, 0.384085303028, 0.338642175318, -0.052000492068, -0.801404345627,
+               -0.138043678532, 0.467831090302, 0.384085303028, 1.972390458477, -0.025332052563, 0.393845805027, -1.225948397955,
+               -0.227492557156, -0.483916138161, 0.338642175318, -0.025332052563, 0.890301343360, -0.549163112351, -0.746838701215,
+               0.117810812390, 0.376293684450, -0.052000492068, 0.393845805027, -0.549163112351, 0.474674836872, 0.012417969474,
+               0.265072329266, 0.149387541935, -0.801404345627, -1.225948397955, -0.746838701215, 0.012417969474, 2.104629121515
+       })
+}});
+
+ctx::PiecewiseLin ctx::VisitCateger::__chiApprox(
+{
+       0.  ,  0.01,  0.02,  0.03,  0.04,  0.05,  0.06,  0.07,  0.08,
+       0.09,  0.1 ,  0.11,  0.12,  0.13,  0.14,  0.15,  0.16,  0.17,
+       0.18,  0.19,  0.2 ,  0.21,  0.22,  0.23,  0.24,  0.25,  0.26,
+       0.27,  0.28,  0.29,  0.3 ,  0.31,  0.32,  0.33,  0.34,  0.35,
+       0.36,  0.37,  0.38,  0.39,  0.4 ,  0.41,  0.42,  0.43,  0.44,
+       0.45,  0.46,  0.47,  0.48,  0.49,  0.5 ,  0.51,  0.52,  0.53,
+       0.54,  0.55,  0.56,  0.57,  0.58,  0.59,  0.6 ,  0.61,  0.62,
+       0.63,  0.64,  0.65,  0.66,  0.67,  0.68,  0.69,  0.7 ,  0.71,
+       0.72,  0.73,  0.74,  0.75,  0.76,  0.77,  0.78,  0.79,  0.8 ,
+       0.81,  0.82,  0.83,  0.84,  0.85,  0.86,  0.87,  0.88,  0.89,
+       0.9 ,  0.91,  0.92,  0.93,  0.94,  0.95,  0.96,  0.97,  0.98,
+       0.99,  1.  ,  1.01,  1.02,  1.03,  1.04,  1.05,  1.06,  1.07,
+       1.08,  1.09,  1.1 ,  1.11,  1.12,  1.13,  1.14,  1.15,  1.16,
+       1.17,  1.18,  1.19,  1.2 ,  1.21,  1.22,  1.23,  1.24,  1.25,
+       1.26,  1.27,  1.28,  1.29,  1.3 ,  1.31,  1.32,  1.33,  1.34,
+       1.35,  1.36,  1.37,  1.38,  1.39,  1.4 ,  1.41,  1.42,  1.43,
+       1.44,  1.45,  1.46,  1.47,  1.48,  1.49,  1.5 ,  1.51,  1.52,
+       1.53,  1.54,  1.55,  1.56,  1.57,  1.58,  1.59,  1.6 ,  1.61,
+       1.62,  1.63,  1.64,  1.65,  1.66,  1.67,  1.68,  1.69,  1.7 ,
+       1.71,  1.72,  1.73,  1.74,  1.75,  1.76,  1.77,  1.78,  1.79,
+       1.8 ,  1.81,  1.82,  1.83,  1.84,  1.85,  1.86,  1.87,  1.88,
+       1.89,  1.9 ,  1.91,  1.92,  1.93,  1.94,  1.95,  1.96,  1.97,
+       1.98,  1.99,  2.  ,  2.01,  2.02,  2.03,  2.04,  2.05,  2.06,
+       2.07,  2.08,  2.09,  2.1 ,  2.11,  2.12,  2.13,  2.14,  2.15,
+       2.16,  2.17,  2.18,  2.19,  2.2 ,  2.21,  2.22,  2.23,  2.24,
+       2.25,  2.26,  2.27,  2.28,  2.29,  2.3 ,  2.31,  2.32,  2.33,
+       2.34,  2.35,  2.36,  2.37,  2.38,  2.39,  2.4 ,  2.41,  2.42,
+       2.43,  2.44,  2.45,  2.46,  2.47,  2.48,  2.49,  2.5 ,  2.51,
+       2.52,  2.53,  2.54,  2.55,  2.56,  2.57,  2.58,  2.59,  2.6 ,
+       2.61,  2.62,  2.63,  2.64,  2.65,  2.66,  2.67,  2.68,  2.69,
+       2.7 ,  2.71,  2.72,  2.73,  2.74,  2.75,  2.76,  2.77,  2.78,
+       2.79,  2.8 ,  2.81,  2.82,  2.83,  2.84,  2.85,  2.86,  2.87,
+       2.88,  2.89,  2.9 ,  2.91,  2.92,  2.93,  2.94,  2.95,  2.96,
+       2.97,  2.98,  2.99,  3.  ,  3.01,  3.02,  3.03,  3.04,  3.05,
+       3.06,  3.07,  3.08,  3.09,  3.1 ,  3.11,  3.12,  3.13,  3.14,
+       3.15,  3.16,  3.17,  3.18,  3.19,  3.2 ,  3.21,  3.22,  3.23,
+       3.24,  3.25,  3.26,  3.27,  3.28,  3.29,  3.3 ,  3.31,  3.32,
+       3.33,  3.34,  3.35,  3.36,  3.37,  3.38,  3.39,  3.4 ,  3.41,
+       3.42,  3.43,  3.44,  3.45,  3.46,  3.47,  3.48,  3.49,  3.5 ,
+       3.51,  3.52,  3.53,  3.54,  3.55,  3.56,  3.57,  3.58,  3.59,
+       3.6 ,  3.61,  3.62,  3.63,  3.64,  3.65,  3.66,  3.67,  3.68,
+       3.69,  3.7 ,  3.71,  3.72,  3.73,  3.74,  3.75,  3.76,  3.77,
+       3.78,  3.79,  3.8 ,  3.81,  3.82,  3.83,  3.84,  3.85,  3.86,
+       3.87,  3.88,  3.89,  3.9 ,  3.91,  3.92,  3.93,  3.94,  3.95,
+       3.96,  3.97,  3.98,  3.99,  4.  ,  4.01,  4.02,  4.03,  4.04,
+       4.05,  4.06,  4.07,  4.08,  4.09,  4.1 ,  4.11,  4.12,  4.13,
+       4.14,  4.15,  4.16,  4.17,  4.18,  4.19,  4.2 ,  4.21,  4.22,
+       4.23,  4.24,  4.25,  4.26,  4.27,  4.28,  4.29,  4.3 ,  4.31,
+       4.32,  4.33,  4.34,  4.35,  4.36,  4.37,  4.38,  4.39,  4.4 ,
+       4.41,  4.42,  4.43,  4.44,  4.45,  4.46,  4.47,  4.48,  4.49,
+       4.5 ,  4.51,  4.52,  4.53,  4.54,  4.55,  4.56,  4.57,  4.58,
+       4.59,  4.6 ,  4.61,  4.62,  4.63,  4.64,  4.65,  4.66,  4.67,
+       4.68,  4.69,  4.7 ,  4.71,  4.72,  4.73,  4.74,  4.75,  4.76,
+       4.77,  4.78,  4.79,  4.8 ,  4.81,  4.82,  4.83,  4.84,  4.85,
+       4.86,  4.87,  4.88,  4.89,  4.9 ,  4.91,  4.92,  4.93,  4.94,
+       4.95,  4.96,  4.97,  4.98,  4.99,  5.  ,  5.01,  5.02,  5.03,
+       5.04,  5.05,  5.06,  5.07,  5.08,  5.09,  5.1 ,  5.11,  5.12,
+       5.13,  5.14,  5.15,  5.16,  5.17,  5.18,  5.19,  5.2 ,  5.21,
+       5.22,  5.23,  5.24,  5.25,  5.26,  5.27,  5.28,  5.29,  5.3 ,
+       5.31,  5.32,  5.33,  5.34,  5.35,  5.36,  5.37,  5.38,  5.39,
+       5.4 ,  5.41,  5.42,  5.43,  5.44,  5.45,  5.46,  5.47,  5.48,
+       5.49,  5.5 ,  5.51,  5.52,  5.53,  5.54,  5.55,  5.56,  5.57,
+       5.58,  5.59,  5.6 ,  5.61,  5.62,  5.63,  5.64,  5.65,  5.66,
+       5.67,  5.68,  5.69,  5.7 ,  5.71,  5.72,  5.73,  5.74,  5.75,
+       5.76,  5.77,  5.78,  5.79,  5.8 ,  5.81,  5.82,  5.83,  5.84,
+       5.85,  5.86,  5.87,  5.88,  5.89,  5.9 ,  5.91,  5.92,  5.93,
+       5.94,  5.95,  5.96,  5.97,  5.98,  5.99,  6.  ,  6.01,  6.02,
+       6.03,  6.04,  6.05,  6.06,  6.07,  6.08,  6.09,  6.1 ,  6.11,
+       6.12,  6.13,  6.14,  6.15,  6.16,  6.17,  6.18,  6.19,  6.2 ,
+       6.21,  6.22,  6.23,  6.24,  6.25,  6.26,  6.27,  6.28,  6.29,
+       6.3 ,  6.31,  6.32,  6.33,  6.34,  6.35,  6.36,  6.37,  6.38,
+       6.39,  6.4 ,  6.41,  6.42,  6.43,  6.44,  6.45,  6.46,  6.47,
+       6.48,  6.49,  6.5 ,  6.51,  6.52,  6.53,  6.54,  6.55,  6.56,
+       6.57,  6.58,  6.59,  6.6 ,  6.61,  6.62,  6.63,  6.64,  6.65,
+       6.66,  6.67,  6.68,  6.69,  6.7 ,  6.71,  6.72,  6.73,  6.74,
+       6.75,  6.76,  6.77,  6.78,  6.79,  6.8 ,  6.81,  6.82,  6.83,
+       6.84,  6.85,  6.86,  6.87,  6.88,  6.89,  6.9 ,  6.91,  6.92,
+       6.93,  6.94,  6.95,  6.96,  6.97,  6.98,  6.99,  7.
+},
+{
+       0.      ,  0.      ,  0.      ,  0.      ,  0.      ,  0.      ,
+       0.      ,  0.      ,  0.      ,  0.      ,  0.      ,  0.      ,
+       0.      ,  0.      ,  0.      ,  0.      ,  0.      ,  0.      ,
+       0.      ,  0.      ,  0.      ,  0.      ,  0.      ,  0.      ,
+       0.      ,  0.      ,  0.000001,  0.000001,  0.000001,  0.000001,
+       0.000002,  0.000002,  0.000003,  0.000003,  0.000004,  0.000005,
+       0.000006,  0.000007,  0.000008,  0.00001 ,  0.000012,  0.000014,
+       0.000016,  0.000019,  0.000023,  0.000026,  0.000031,  0.000035,
+       0.000041,  0.000047,  0.000054,  0.000062,  0.00007 ,  0.00008 ,
+       0.000091,  0.000103,  0.000116,  0.000131,  0.000147,  0.000165,
+       0.000185,  0.000207,  0.000231,  0.000257,  0.000285,  0.000316,
+       0.00035 ,  0.000387,  0.000427,  0.000471,  0.000518,  0.000569,
+       0.000624,  0.000683,  0.000747,  0.000816,  0.00089 ,  0.00097 ,
+       0.001055,  0.001147,  0.001245,  0.001349,  0.001461,  0.00158 ,
+       0.001708,  0.001843,  0.001987,  0.002141,  0.002303,  0.002476,
+       0.002659,  0.002854,  0.003059,  0.003276,  0.003506,  0.003748,
+       0.004004,  0.004274,  0.004558,  0.004857,  0.005171,  0.005502,
+       0.00585 ,  0.006215,  0.006597,  0.006999,  0.007419,  0.007859,
+       0.00832 ,  0.008802,  0.009305,  0.009831,  0.01038 ,  0.010953,
+       0.01155 ,  0.012172,  0.01282 ,  0.013495,  0.014197,  0.014927,
+       0.015686,  0.016473,  0.017291,  0.01814 ,  0.019021,  0.019933,
+       0.020879,  0.021858,  0.022872,  0.023921,  0.025006,  0.026127,
+       0.027285,  0.028482,  0.029717,  0.030992,  0.032306,  0.033662,
+       0.035059,  0.036497,  0.037979,  0.039504,  0.041073,  0.042687,
+       0.044345,  0.04605 ,  0.047801,  0.049599,  0.051445,  0.053339,
+       0.055282,  0.057273,  0.059315,  0.061406,  0.063548,  0.065742,
+       0.067986,  0.070283,  0.072632,  0.075034,  0.077488,  0.079996,
+       0.082558,  0.085174,  0.087843,  0.090568,  0.093346,  0.09618 ,
+       0.099069,  0.102013,  0.105012,  0.108066,  0.111176,  0.114342,
+       0.117563,  0.120839,  0.124171,  0.127558,  0.131001,  0.134499,
+       0.138052,  0.141659,  0.145322,  0.149039,  0.15281 ,  0.156635,
+       0.160514,  0.164446,  0.168431,  0.172469,  0.176559,  0.180701,
+       0.184894,  0.189138,  0.193432,  0.197776,  0.202169,  0.206611,
+       0.211101,  0.215639,  0.220223,  0.224853,  0.229528,  0.234248,
+       0.239012,  0.24382 ,  0.248669,  0.25356 ,  0.258492,  0.263464,
+       0.268474,  0.273523,  0.278608,  0.283731,  0.288888,  0.29408 ,
+       0.299305,  0.304562,  0.309851,  0.31517 ,  0.320519,  0.325895,
+       0.331299,  0.336729,  0.342185,  0.347664,  0.353166,  0.35869 ,
+       0.364234,  0.369798,  0.375381,  0.38098 ,  0.386596,  0.392227,
+       0.397871,  0.403529,  0.409197,  0.414876,  0.420565,  0.426261,
+       0.431964,  0.437673,  0.443387,  0.449103,  0.454822,  0.460543,
+       0.466263,  0.471981,  0.477698,  0.483411,  0.48912 ,  0.494822,
+       0.500518,  0.506206,  0.511886,  0.517554,  0.523212,  0.528858,
+       0.53449 ,  0.540108,  0.545711,  0.551297,  0.556866,  0.562417,
+       0.567948,  0.573459,  0.578949,  0.584417,  0.589861,  0.595282,
+       0.600677,  0.606048,  0.611391,  0.616707,  0.621995,  0.627254,
+       0.632483,  0.637681,  0.642848,  0.647984,  0.653086,  0.658155,
+       0.66319 ,  0.66819 ,  0.673155,  0.678084,  0.682976,  0.687831,
+       0.692649,  0.697428,  0.702168,  0.70687 ,  0.711531,  0.716153,
+       0.720733,  0.725273,  0.729772,  0.734228,  0.738643,  0.743015,
+       0.747344,  0.75163 ,  0.755873,  0.760072,  0.764227,  0.768339,
+       0.772406,  0.776428,  0.780406,  0.784339,  0.788228,  0.792071,
+       0.795869,  0.799622,  0.80333 ,  0.806992,  0.810609,  0.814181,
+       0.817707,  0.821188,  0.824624,  0.828015,  0.83136 ,  0.83466 ,
+       0.837916,  0.841126,  0.844292,  0.847413,  0.85049 ,  0.853522,
+       0.85651 ,  0.859455,  0.862355,  0.865212,  0.868026,  0.870796,
+       0.873524,  0.876209,  0.878852,  0.881452,  0.884011,  0.886528,
+       0.889005,  0.89144 ,  0.893834,  0.896189,  0.898503,  0.900778,
+       0.903014,  0.90521 ,  0.907369,  0.909488,  0.911571,  0.913615,
+       0.915623,  0.917594,  0.919528,  0.921427,  0.92329 ,  0.925118,
+       0.926911,  0.92867 ,  0.930395,  0.932086,  0.933745,  0.93537 ,
+       0.936963,  0.938525,  0.940055,  0.941554,  0.943022,  0.94446 ,
+       0.945869,  0.947248,  0.948598,  0.949919,  0.951213,  0.952478,
+       0.953717,  0.954928,  0.956113,  0.957273,  0.958406,  0.959514,
+       0.960598,  0.961657,  0.962692,  0.963703,  0.964692,  0.965657,
+       0.9666  ,  0.967521,  0.968421,  0.969299,  0.970156,  0.970993,
+       0.97181 ,  0.972607,  0.973385,  0.974144,  0.974884,  0.975605,
+       0.976309,  0.976996,  0.977665,  0.978317,  0.978953,  0.979572,
+       0.980176,  0.980764,  0.981337,  0.981895,  0.982438,  0.982967,
+       0.983482,  0.983984,  0.984472,  0.984947,  0.985409,  0.985858,
+       0.986296,  0.986721,  0.987135,  0.987537,  0.987929,  0.988309,
+       0.988678,  0.989038,  0.989387,  0.989726,  0.990056,  0.990376,
+       0.990687,  0.990989,  0.991282,  0.991566,  0.991843,  0.992111,
+       0.992371,  0.992624,  0.992869,  0.993106,  0.993337,  0.99356 ,
+       0.993777,  0.993988,  0.994191,  0.994389,  0.99458 ,  0.994766,
+       0.994946,  0.99512 ,  0.995289,  0.995452,  0.99561 ,  0.995764,
+       0.995912,  0.996056,  0.996195,  0.996329,  0.99646 ,  0.996586,
+       0.996708,  0.996825,  0.996939,  0.99705 ,  0.997156,  0.99726 ,
+       0.997359,  0.997456,  0.997549,  0.997639,  0.997726,  0.99781 ,
+       0.997891,  0.997969,  0.998045,  0.998118,  0.998189,  0.998257,
+       0.998323,  0.998386,  0.998447,  0.998506,  0.998563,  0.998618,
+       0.998671,  0.998723,  0.998772,  0.998819,  0.998865,  0.998909,
+       0.998952,  0.998993,  0.999033,  0.999071,  0.999107,  0.999143,
+       0.999177,  0.99921 ,  0.999241,  0.999272,  0.999301,  0.999329,
+       0.999356,  0.999382,  0.999407,  0.999431,  0.999455,  0.999477,
+       0.999498,  0.999519,  0.999539,  0.999558,  0.999576,  0.999594,
+       0.999611,  0.999627,  0.999643,  0.999658,  0.999672,  0.999686,
+       0.999699,  0.999712,  0.999724,  0.999736,  0.999747,  0.999758,
+       0.999769,  0.999779,  0.999788,  0.999797,  0.999806,  0.999815,
+       0.999823,  0.99983 ,  0.999838,  0.999845,  0.999852,  0.999858,
+       0.999865,  0.999871,  0.999876,  0.999882,  0.999887,  0.999892,
+       0.999897,  0.999902,  0.999906,  0.99991 ,  0.999915,  0.999918,
+       0.999922,  0.999926,  0.999929,  0.999932,  0.999936,  0.999938,
+       0.999941,  0.999944,  0.999947,  0.999949,  0.999952,  0.999954,
+       0.999956,  0.999958,  0.99996 ,  0.999962,  0.999964,  0.999965,
+       0.999967,  0.999969,  0.99997 ,  0.999972,  0.999973,  0.999974,
+       0.999975,  0.999977,  0.999978,  0.999979,  0.99998 ,  0.999981,
+       0.999982,  0.999983,  0.999984,  0.999984,  0.999985,  0.999986,
+       0.999987,  0.999987,  0.999988,  0.999988,  0.999989,  0.99999 ,
+       0.99999 ,  0.999991,  0.999991,  0.999992,  0.999992,  0.999992,
+       0.999993,  0.999993,  0.999993,  0.999994,  0.999994,  0.999994,
+       0.999995,  0.999995,  0.999995,  0.999995,  0.999996,  0.999996,
+       0.999996,  0.999996,  0.999997,  0.999997,  0.999997,  0.999997,
+       0.999997,  0.999997,  0.999998,  0.999998,  0.999998,  0.999998,
+       0.999998,  0.999998,  0.999998,  0.999998,  0.999998,  0.999998,
+       0.999999,  0.999999,  0.999999,  0.999999,  0.999999,  0.999999,
+       0.999999,  0.999999,  0.999999,  0.999999,  0.999999,  0.999999,
+       0.999999,  0.999999,  0.999999,  0.999999,  0.999999,  0.999999,
+       0.999999,  1.      ,  1.      ,  1.      ,  1.      ,  1.      ,
+       1.      ,  1.      ,  1.      ,  1.      ,  1.      ,  1.      ,
+       1.      ,  1.      ,  1.      ,  1.      ,  1.      ,  1.      ,
+       1.      ,  1.      ,  1.      ,  1.      ,  1.      ,  1.      ,
+       1.      ,  1.      ,  1.      ,  1.      ,  1.      ,  1.      ,
+       1.      ,  1.      ,  1.      ,  1.      ,  1.      ,  1.      ,
+       1.      ,  1.      ,  1.      ,  1.      ,  1.      ,  1.      ,
+       1.      ,  1.      ,  1.      ,  1.      ,  1.      ,  1.      ,
+       1.      ,  1.      ,  1.      ,  1.      ,  1.
+} // this is chi cdf for 7 degrees of freedom (because we have 7 features)
+);
+
+const std::vector<ctx::num_t> ctx::VisitCateger::__featuresMean(
+{
+       344.542975696503,
+       894.178423236515,
+       868.300533491405,
+       2.820391227030,
+       0.511747454052,
+       0.348669092762,
+       0.139583453187
+});
+
+const std::vector<ctx::num_t> ctx::VisitCateger::__featuresStd(
+{
+       416.061437196941,
+       301.401812101781,
+       300.774466281622,
+       1.916233112930,
+       0.314254748759,
+       0.360707461975,
+       0.109386661911
+});
+
+ctx::TimeFeatures ctx::VisitCateger::timeFeatures(const time_t &time)
+{
+       struct tm *timeinfo = localtime(&time);
+       if (timeinfo == NULL) {
+               return {0, 0, 0, false};
+       }
+       int minutesSinceMidnight = 60 * timeinfo->tm_hour + timeinfo->tm_min;
+       int weekday = (timeinfo->tm_wday + 6) % 7; // Monday is 0, Sunday is 6
+       bool weekend = weekday > 4;
+       int minutesSinceBeginingOfTheWeek = 24 * 60 * weekday + minutesSinceMidnight;
+       return {
+               minutesSinceMidnight,
+               minutesSinceBeginingOfTheWeek,
+               weekday,
+               weekend
+       };
+}
+
+int ctx::VisitCateger::weeksScope(const TimeFeatures &startF, const Interval &interval)
+{
+       int durationMinutes = (interval.end - interval.start) / 60;
+       int scopeMinutes = startF.minutesSinceBeginingOfTheWeek + durationMinutes;
+       int weeksScope = scopeMinutes / __MINUTES_IN_WEEK;
+       if (scopeMinutes % __MINUTES_IN_WEEK > 0) {
+               weeksScope++;
+       }
+       return weeksScope;
+}
+
+ctx::num_t ctx::VisitCateger::__sum(const std::vector<num_t> model, const size_t &from, const size_t &to)
+{
+       size_t toSecure = to;
+       if (to >= model.size()) {
+               _E("'to' exceeds model size");
+               toSecure = model.size() - 1;
+       }
+
+       if (from > to) {
+               _E("'from' greater than 'to'");
+       }
+
+       num_t result = 0.0;
+       for (size_t i = from; i <= toSecure; i++) {
+               result += model[i];
+       }
+
+       return result;
+}
+
+ctx::num_t ctx::VisitCateger::__weekModelMeanValue(PlaceCategId categ, const Interval &interval,
+               const TimeFeatures &startF, const TimeFeatures &endF)
+{
+       num_t ret = 0.0;
+       int minutes = 0;
+       int ws = weeksScope(startF, interval);
+       for (int week = 1; week <= ws; week++) {
+               size_t startIndex = (week == 1)
+                               ? startF.minutesSinceBeginingOfTheWeek
+                               : 0;
+               size_t endIndex = (week == ws)
+                               ? endF.minutesSinceBeginingOfTheWeek
+                               : __MINUTES_IN_WEEK - 1;
+               ret += __sum(prob_features::weekModel[categ], startIndex, endIndex);
+               minutes += endIndex - startIndex + 1;
+       }
+       if (minutes > 0) {
+               return ret / minutes;
+       }
+       return ret;
+}
+
+ctx::Categs ctx::VisitCateger::weekModelFeatures(const Interval &interval, const TimeFeatures &startF, const TimeFeatures &endF)
+{
+       ctx::Categs categs;
+       for (const auto &item : prob_features::weekModel) {
+               categs[item.first] = __weekModelMeanValue(item.first, interval, startF, endF);
+       }
+       _D("categs: H=%.12f, W=%.12f, O=%.12f",
+                       categs[PLACE_CATEG_ID_HOME],
+                       categs[PLACE_CATEG_ID_WORK],
+                       categs[PLACE_CATEG_ID_OTHER]);
+       return categs;
+}
+
+ctx::IntervalFeatures ctx::VisitCateger::intervalFeatures(const Interval &interval)
+{
+       num_t durationMinutes = 1.0 * (interval.end - interval.start) / 60;
+       TimeFeatures startFeatures = timeFeatures(interval.start);
+       TimeFeatures endFeatures = timeFeatures(interval.end);
+       Categs weekFeatures = weekModelFeatures(interval, startFeatures, endFeatures);
+       return {
+               durationMinutes,
+               (num_t) startFeatures.minutesSinceMidnight,
+               (num_t) endFeatures.minutesSinceMidnight,
+               (num_t) startFeatures.weekday,
+               weekFeatures[PLACE_CATEG_ID_HOME],
+               weekFeatures[PLACE_CATEG_ID_WORK],
+               weekFeatures[PLACE_CATEG_ID_OTHER]
+       };
+}
+
+void ctx::VisitCateger::__normalize(std::vector<ctx::num_t> &features)
+{
+       size_t n = features.size();
+       for (size_t i = 0; i < n; i++) {
+               features[i] -= __featuresMean[i];
+               features[i] /= __featuresStd[i];
+       }
+}
+
+void ctx::VisitCateger::categorize(ctx::Visit &visit)
+{
+       IntervalFeatures features = intervalFeatures(visit.interval);
+       __normalize(features);
+
+       for (auto &modelPair : __models) {
+               int categId = modelPair.first;
+               MahalModel model = modelPair.second;
+
+               num_t distance = model.distance(features);
+               num_t probability = 1 - __chiApprox.value(distance); // sth like probability but not exactly
+               visit.categs[categId] = probability;
+       }
+}
diff --git a/src/my-place/user_places/visit_categer.h b/src/my-place/user_places/visit_categer.h
new file mode 100644 (file)
index 0000000..b9d4940
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_VISIT_CATEGER_H_
+#define _CONTEXT_PLACE_RECOGNITION_VISIT_CATEGER_H_
+
+#include "user_places_types.h"
+#include "mahal.h"
+#include "piecewise_lin.h"
+#include <map>
+
+namespace ctx {
+
+       struct TimeFeatures {
+           int minutesSinceMidnight;
+           int minutesSinceBeginingOfTheWeek;
+           int weekday;
+           bool weekend;
+       };
+
+       typedef std::vector<num_t> IntervalFeatures;
+
+       /*
+        * visit categorizer class
+        */
+       class VisitCateger {
+
+       private:
+               static const int __MINUTES_IN_WEEK = 60 * 24 * 7;
+               static const std::map<int, MahalModel> __models;
+               static const std::vector<num_t> __featuresMean;
+               static const std::vector<num_t> __featuresStd;
+               static num_t __sum(const std::vector<num_t> model, const size_t &from, const size_t &to);
+               static num_t __weekModelMeanValue(PlaceCategId categ, const Interval &interval,
+                               const TimeFeatures &startF, const TimeFeatures &endF);
+               static void __normalize(std::vector<num_t> &features);
+               static PiecewiseLin __chiApprox; // tabled chi function approximator
+
+       public:
+               /**
+                * Function interpret time in timestamp input argument,
+                *
+                * @param  time          timestamp
+                * @return TimeFeatures  structure with interpretations of timestamp
+                */
+               static TimeFeatures timeFeatures(const time_t &time);
+
+               static int weeksScope(const TimeFeatures &startF, const Interval &interval);
+
+               /**
+                * Function interpret time interval input argument and calculates scores
+                * that argument interval is home, work or other based on whole week model.
+                *
+                * @param  interval  time interval
+                * @param  startF        start time features
+                * @param  endF      end time features
+                * @return Categs    score that argument interval is home, work or other
+                */
+               static Categs weekModelFeatures(const Interval &interval, const TimeFeatures &startF,
+                               const TimeFeatures &endF);
+
+               /**
+                * Function interpret time interval input argument,
+                *
+                * @param  interval          time interval
+                * @return IntervalFeatures  vector with interpretations of input time interval
+                */
+               static IntervalFeatures intervalFeatures(const Interval &interval);
+
+               /**
+                * Function categorize visit based on visits time interval and fill its categories values.
+                */
+               static void categorize(ctx::Visit &visit);
+
+       };      /* class VisitCateger */
+
+}      /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_VISIT_CATEGER_H_ */
diff --git a/src/my-place/user_places/visit_detector.cpp b/src/my-place/user_places/visit_detector.cpp
new file mode 100644 (file)
index 0000000..e0ba642
--- /dev/null
@@ -0,0 +1,444 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <set>
+#include <iostream>
+#include <iomanip>
+#include <sstream>
+#include <Types.h>
+#include <Json.h>
+#include "../place_recognition_types.h"
+#include "visit_detector.h"
+#include "user_places_params.h"
+#include "visit_categer.h"
+#include "similarity.h"
+#include "median.h"
+#include "debug_utils.h"
+
+#ifdef TIZEN_ENGINEER_MODE
+#define __VISIT_TABLE_COLUMNS \
+       VISIT_COLUMN_WIFI_APS " TEXT, "\
+       VISIT_COLUMN_START_TIME " timestamp, "\
+       VISIT_COLUMN_END_TIME " timestamp, "\
+       VISIT_COLUMN_START_TIME_HUMAN " TEXT, "\
+       VISIT_COLUMN_END_TIME_HUMAN " TEXT, "\
+       VISIT_COLUMN_LOCATION_VALID " INTEGER, "\
+       VISIT_COLUMN_LOCATION_LATITUDE " REAL, "\
+       VISIT_COLUMN_LOCATION_LONGITUDE " REAL, "\
+       VISIT_COLUMN_CATEG_HOME " REAL, "\
+       VISIT_COLUMN_CATEG_WORK " REAL, "\
+       VISIT_COLUMN_CATEG_OTHER " REAL"
+#else /* TIZEN_ENGINEER_MODE */
+#define __VISIT_TABLE_COLUMNS \
+       VISIT_COLUMN_WIFI_APS " TEXT, "\
+       VISIT_COLUMN_START_TIME " timestamp, "\
+       VISIT_COLUMN_END_TIME " timestamp, "\
+       VISIT_COLUMN_LOCATION_VALID " INTEGER, "\
+       VISIT_COLUMN_LOCATION_LATITUDE " REAL, "\
+       VISIT_COLUMN_LOCATION_LONGITUDE " REAL, "\
+       VISIT_COLUMN_CATEG_HOME " REAL, "\
+       VISIT_COLUMN_CATEG_WORK " REAL, "\
+       VISIT_COLUMN_CATEG_OTHER " REAL"
+#endif /* TIZEN_ENGINEER_MODE */
+
+ctx::VisitDetector::VisitDetector(time_t startScan, PlaceRecogMode energyMode, bool testMode) :
+       __testMode(testMode),
+       __locationLogger(this, testMode),
+       __wifiLogger(this, energyMode, testMode),
+       __currentInterval(startScan, startScan + VISIT_DETECTOR_PERIOD_SECONDS_HIGH_ACCURACY),
+       __stableCounter(0),
+       __tolerance(VISIT_DETECTOR_TOLERANCE_DEPTH),
+       __entranceToPlace(false),
+       __periodSeconds(VISIT_DETECTOR_PERIOD_SECONDS_HIGH_ACCURACY),
+       __entranceTime(0),
+       __departureTime(0)
+{
+       __setPeriod(energyMode);
+       __currentInterval = Interval(startScan, startScan + __periodSeconds);
+       __currentMacEvents = std::make_shared<MacEvents>();
+       __stayMacs = std::make_shared<MacSet>();
+
+       if (__testMode) {
+               __detectedVisits = std::make_shared<ctx::Visits>();
+               return;
+       }
+
+       __listeners.push_back(&__locationLogger);
+       __listeners.push_back(&__wifiLogger);
+       __dbCreateTable();
+       __wifiLogger.startLogging();
+}
+
+ctx::VisitDetector::~VisitDetector()
+{
+}
+
+bool ctx::VisitDetector::__isValid(const ctx::Mac &mac)
+{
+       return mac != "00:00:00:00:00:00";
+}
+
+void ctx::VisitDetector::onWifiScan(ctx::MacEvent e)
+{
+       _D("timestamp=%d, curent_interval.end=%d, mac=%s", e.timestamp, __currentInterval.end, std::string(e.mac).c_str());
+       if (__isValid(e.mac)) {
+               while (e.timestamp > __currentInterval.end) {
+                       __processCurrentLogger();
+                       __shiftCurrentInterval();
+               }
+               __currentMacEvents->push_back(e);
+       }
+}
+
+void ctx::VisitDetector::__processCurrentLogger()
+{
+       _D("");
+       std::shared_ptr<ctx::Frame> frame = __makeFrame(__currentMacEvents, __currentInterval);
+       __detectEntranceOrDeparture(frame);
+       __currentMacEvents->clear();
+}
+
+std::shared_ptr<ctx::Frame> ctx::VisitDetector::__makeFrame(std::shared_ptr<ctx::MacEvents> logger, ctx::Interval interval)
+{
+       std::set<time_t> timestamps;
+       std::shared_ptr<Frame> frame = std::make_shared<Frame>(interval);
+       for (auto log : *logger) {
+               timestamps.insert(log.timestamp);
+               if (frame->macs2Counts.find(log.mac) == frame->macs2Counts.end()) {
+                       frame->macs2Counts[log.mac] = 1;
+               } else {
+                       frame->macs2Counts[log.mac] += 1;
+               }
+       }
+       frame->numberOfTimestamps = timestamps.size();
+       return frame;
+}
+
+void ctx::VisitDetector::__shiftCurrentInterval()
+{
+       __currentInterval.end += __periodSeconds;
+       __currentInterval.start += __periodSeconds;
+}
+
+void ctx::VisitDetector::__detectEntranceOrDeparture(std::shared_ptr<ctx::Frame> frame)
+{
+       __entranceToPlace ? __detectDeparture(frame) : __detectEntrance(frame);
+}
+
+bool ctx::VisitDetector::__isDisjoint(const ctx::Macs2Counts &macs2Counts, const ctx::MacSet &macSet)
+{
+       for (auto &mac : macSet) {
+               if (macs2Counts.find(mac) != macs2Counts.end()) {
+                       return false;
+               }
+       }
+       return true;
+}
+
+bool ctx::VisitDetector::__protrudesFrom(const ctx::Macs2Counts &macs2Counts, const ctx::MacSet &macSet)
+{
+       for (auto &macCount : macs2Counts) {
+               if (macSet.find(macCount.first) == macSet.end()) {
+                       return true;
+               }
+       }
+       return false;
+}
+
+void ctx::VisitDetector::__detectDeparture(std::shared_ptr<ctx::Frame> frame)
+{
+       if (__tolerance == VISIT_DETECTOR_TOLERANCE_DEPTH) {
+               __departureTime = frame->interval.start;
+               __bufferedFrames.clear();
+       } else { // __tolerance < VISIT_DETECTOR_TOLERANCE_DEPTH
+               __bufferedFrames.push_back(frame);
+       }
+       if (__isDisjoint(frame->macs2Counts, *__representativesMacs)) {
+               if (frame->macs2Counts.empty() || __protrudesFrom(frame->macs2Counts, *__stayMacs)) {
+                       __tolerance--;
+               } else { // no new macs
+                       __bufferedFrames.clear();
+               }
+               if (__tolerance == 0) { // departure detected
+                       __visitEndDetected();
+                       __processBuffer(frame);
+               }
+       } else if (__tolerance < VISIT_DETECTOR_TOLERANCE_DEPTH) {
+               __tolerance++;
+       }
+}
+
+void ctx::VisitDetector::__visitStartDetected()
+{
+       __entranceToPlace = true;
+
+       __locationEvents.clear();
+       if (!__testMode) {
+               for (IVisitListener* listener : __listeners) {
+                       listener->onVisitStart();
+               }
+       }
+       __representativesMacs = __selectRepresentatives(__historyFrames);
+       __entranceTime = __historyFrames[0]->interval.start;
+       _I("Entrance detected, timestamp: %d", __entranceTime);
+       __resetHistory();
+}
+
+void ctx::VisitDetector::__visitEndDetected()
+{
+       if (!__testMode) {
+               for (IVisitListener* listener : __listeners) {
+                       listener->onVisitEnd();
+               }
+       }
+       _I("Departure detected, timestamp: %d", __departureTime);
+
+       Interval interval(__entranceTime, __departureTime);
+       Visit visit(interval, __representativesMacs);
+       VisitCateger::categorize(visit);
+
+       __putLocationToVisit(visit);
+
+       if (__testMode) {
+               __detectedVisits->push_back(visit);
+       } else {
+               __dbInsertVisit(visit);
+       }
+
+       // cleaning
+       __entranceToPlace = false;
+       __representativesMacs.reset();
+       __tolerance = VISIT_DETECTOR_TOLERANCE_DEPTH;
+}
+
+void ctx::VisitDetector::__putLocationToVisit(ctx::Visit &visit)
+{
+       // TODO: remove small accuracy locations from vectors?
+       std::vector<double> latitudes;
+       std::vector<double> longitudes;
+       visit.locationValid = false;
+       for (LocationEvent location : __locationEvents) {
+               if (location.timestamp >= __entranceTime && location.timestamp <= __departureTime) {
+                       latitudes.push_back(location.coordinates.latitude);
+                       longitudes.push_back(location.coordinates.longitude);
+                       visit.locationValid = true;
+               }
+       }
+       if (visit.locationValid) {
+               visit.location.latitude = median(latitudes);
+               visit.location.longitude = median(longitudes);
+               _D("visit location set: lat=%.8f, lon=%.8f", visit.location.latitude, visit.location.longitude);
+       } else {
+               _D("visit location not set");
+       }
+}
+
+void ctx::VisitDetector::__processBuffer(std::shared_ptr<ctx::Frame> frame)
+{
+       if (__bufferedFrames.empty()) {
+               __historyFrames.push_back(frame);
+       } else {
+               __historyFrames.push_back(__bufferedFrames[0]);
+               for (size_t i = 1; i < __bufferedFrames.size(); i++) {
+                       __detectEntrance(__bufferedFrames[i]);
+                       if (__entranceToPlace) {
+                               break;
+                       }
+               }
+       }
+}
+
+void ctx::VisitDetector::__detectEntrance(std::shared_ptr<ctx::Frame> currentFrame)
+{
+       if (currentFrame->macs2Counts.empty() || __historyFrames.empty()) {
+               __resetHistory(currentFrame);
+               return;
+       }
+
+       if (__stableCounter == 0) {
+               std::shared_ptr<Frame> oldestHistoryFrame = __historyFrames[0];
+               __stayMacs = macSetFromMacs2Counts(oldestHistoryFrame->macs2Counts);
+       }
+
+       std::shared_ptr<MacSet> currentBeacons = macSetFromMacs2Counts(currentFrame->macs2Counts);
+
+       if (similarity::overlapBiggerOverSmaller(*currentBeacons, *__stayMacs) > VISIT_DETECTOR_OVERLAP) {
+               __stableCounter++;
+               __historyFrames.push_back(currentFrame);
+
+               if (__stableCounter == VISIT_DETECTOR_STABLE_DEPTH) { // entrance detected
+                       __visitStartDetected();
+               }
+       } else {
+               __resetHistory(currentFrame);
+       }
+       return;
+}
+
+void ctx::VisitDetector::__resetHistory()
+{
+       __stableCounter = 0;
+       __historyFrames.clear();
+}
+
+void ctx::VisitDetector::__resetHistory(std::shared_ptr<Frame> frame)
+{
+       __resetHistory();
+       __historyFrames.push_back(frame);
+}
+
+std::shared_ptr<ctx::MacSet> ctx::VisitDetector::__selectRepresentatives(const std::vector<std::shared_ptr<Frame>> &frames)
+{
+       Macs2Counts reprs2Counts;
+       count_t allCount = 0;
+
+       for (auto frame : frames) {
+               allCount += frame->numberOfTimestamps;
+               for (auto &c : frame->macs2Counts) {
+                       reprs2Counts[c.first] += c.second;
+               }
+       }
+
+       std::shared_ptr<Macs2Shares> reprs2Shares = __macSharesFromCounts(reprs2Counts, allCount);
+
+       share_t maxShare = __calcMaxShare(*reprs2Shares);
+       share_t threshold = maxShare < VISIT_DETECTOR_REP_THRESHOLD ? maxShare : VISIT_DETECTOR_REP_THRESHOLD;
+
+       std::shared_ptr<MacSet> reprsMacSet = __macSetOfGreaterOrEqualShare(*reprs2Shares, threshold);
+
+       return reprsMacSet;
+}
+
+ctx::share_t ctx::VisitDetector::__calcMaxShare(const ctx::Macs2Shares &macs2Shares)
+{
+       ctx::share_t maxShare = 0.0;
+       for (auto &macShare : macs2Shares) {
+               if (macShare.second > maxShare) {
+                       maxShare = macShare.second;
+               }
+       }
+       return maxShare;
+}
+
+std::shared_ptr<ctx::MacSet> ctx::VisitDetector::__macSetOfGreaterOrEqualShare(const ctx::Macs2Shares &macs2Shares, ctx::share_t threshold)
+{
+       std::shared_ptr<MacSet> macSet = std::make_shared<MacSet>();
+       for (auto &macShare : macs2Shares) {
+               if (macShare.second >= threshold) {
+                       macSet->insert(macShare.first);
+               }
+       }
+       return macSet;
+}
+
+std::shared_ptr<ctx::Macs2Shares> ctx::VisitDetector::__macSharesFromCounts(ctx::Macs2Counts const &macs2Counts, ctx::count_t denominator)
+{
+       std::shared_ptr<Macs2Shares> macs2Shares(std::make_shared<Macs2Shares>());
+       for (auto macCount : macs2Counts) {
+               (*macs2Shares)[macCount.first] = (share_t) macCount.second / denominator;
+       }
+       return macs2Shares;
+}
+
+std::shared_ptr<ctx::Visits> ctx::VisitDetector::getVisits()
+{
+       return __detectedVisits;
+}
+
+void ctx::VisitDetector::__dbCreateTable()
+{
+       bool ret = __dbManager.createTable(0, VISIT_TABLE, __VISIT_TABLE_COLUMNS);
+       _D("db: visit Table Creation Result: %s", ret ? "SUCCESS" : "FAIL");
+}
+
+void ctx::VisitDetector::__putVisitCategToJson(const char* key, const Categs &categs, int categType, Json &data)
+{
+       auto categ = categs.find(categType);
+       if (categ == categs.end()) {
+               _E("json_put_visit no type %d in categs", categType);
+       } else {
+               data.set(NULL, key, categ->second);
+       }
+}
+
+void ctx::VisitDetector::__putVisitCategsToJson(const Categs &categs, Json &data)
+{
+       __putVisitCategToJson(VISIT_COLUMN_CATEG_HOME, categs, PLACE_CATEG_ID_HOME, data);
+       __putVisitCategToJson(VISIT_COLUMN_CATEG_WORK, categs, PLACE_CATEG_ID_WORK, data);
+       __putVisitCategToJson(VISIT_COLUMN_CATEG_OTHER, categs, PLACE_CATEG_ID_OTHER, data);
+}
+
+int ctx::VisitDetector::__dbInsertVisit(Visit visit)
+{
+       std::stringstream ss;
+       ss << *visit.macSet;
+
+       Json data;
+       data.set(NULL, VISIT_COLUMN_WIFI_APS, ss.str().c_str());
+
+       data.set(NULL, VISIT_COLUMN_LOCATION_VALID, visit.locationValid);
+       data.set(NULL, VISIT_COLUMN_LOCATION_LATITUDE, visit.location.latitude);
+       data.set(NULL, VISIT_COLUMN_LOCATION_LONGITUDE, visit.location.longitude);
+
+       data.set(NULL, VISIT_COLUMN_START_TIME, static_cast<int>(visit.interval.start));
+       data.set(NULL, VISIT_COLUMN_END_TIME, static_cast<int>(visit.interval.end));
+
+#ifdef TIZEN_ENGINEER_MODE
+       std::string startTimeHuman = DebugUtils::humanReadableDateTime(visit.interval.start, "%F %T", 80);
+       std::string endTimeHuman = DebugUtils::humanReadableDateTime(visit.interval.end, "%F %T", 80);
+       data.set(NULL, VISIT_COLUMN_START_TIME_HUMAN, startTimeHuman.c_str());
+       data.set(NULL, VISIT_COLUMN_END_TIME_HUMAN, endTimeHuman.c_str());
+       _D("db: visit table insert interval: (%d, %d): (%s, %s)",
+                       visit.interval.start, visit.interval.end, startTimeHuman.c_str(), endTimeHuman.c_str());
+#else
+       _D("db: visit table insert interval: (%d, %d)", visit.interval.start, visit.interval.end);
+#endif /* TIZEN_ENGINEER_MODE */
+
+       __putVisitCategsToJson(visit.categs, data);
+
+       int64_t rowId;
+       bool ret = __dbManager.insertSync(VISIT_TABLE, data, &rowId);
+       _D("db: visit table insert result: %s", ret ? "SUCCESS" : "FAIL");
+       return ret;
+}
+
+void ctx::VisitDetector::onNewLocation(LocationEvent locationEvent)
+{
+       _D("");
+       locationEvent.log();
+       __locationEvents.push_back(locationEvent);
+};
+
+void ctx::VisitDetector::__setPeriod(PlaceRecogMode energyMode)
+{
+       switch (energyMode) {
+       case PLACE_RECOG_LOW_POWER_MODE:
+               __periodSeconds = VISIT_DETECTOR_PERIOD_SECONDS_LOW_POWER;
+               break;
+       case PLACE_RECOG_HIGH_ACCURACY_MODE:
+               __periodSeconds = VISIT_DETECTOR_PERIOD_SECONDS_HIGH_ACCURACY;
+               break;
+       default:
+               _E("Incorrect energy mode");
+       }
+}
+
+void ctx::VisitDetector::setMode(PlaceRecogMode energyMode)
+{
+       _D("");
+       __setPeriod(energyMode);
+       __wifiLogger.setMode(energyMode);
+}
diff --git a/src/my-place/user_places/visit_detector.h b/src/my-place/user_places/visit_detector.h
new file mode 100644 (file)
index 0000000..ee6e7c2
--- /dev/null
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_VISIT_DETECTOR_H_
+#define _CONTEXT_PLACE_RECOGNITION_VISIT_DETECTOR_H_
+
+#include <memory>
+#include <vector>
+#include <map>
+#include <unordered_map>
+#include <unordered_set>
+#include "user_places_types.h"
+#include <Json.h>
+#include <DatabaseManager.h>
+#include "visit_listener_iface.h"
+#include "location_logger.h"
+#include "location_listener_iface.h"
+#include "wifi_listener_iface.h"
+#include "wifi_logger.h"
+
+namespace ctx {
+
+       class VisitDetector : public IWifiListener, ILocationListener {
+
+       private:
+               bool __testMode;
+               std::shared_ptr<Visits> __detectedVisits; // only used in test mode
+               LocationLogger __locationLogger;
+               WifiLogger __wifiLogger;
+               std::vector<IVisitListener*> __listeners;
+               std::shared_ptr<MacEvents> __currentMacEvents;
+               Interval __currentInterval;
+               std::vector<LocationEvent> __locationEvents;
+               std::vector<std::shared_ptr<Frame>> __historyFrames;  // python: history_scans  + history_times
+               std::vector<std::shared_ptr<Frame>> __bufferedFrames; // python: buffered_scans + buffered_times
+               int __stableCounter;
+               int __tolerance;
+               bool __entranceToPlace;
+               int __periodSeconds;
+               DatabaseManager __dbManager;
+
+               // fields that  are used only in case of entrance detection
+               std::shared_ptr<MacSet> __representativesMacs; // macs that represent the current place
+               std::shared_ptr<MacSet> __stayMacs; // macs that can appear in the current place
+               time_t __entranceTime;
+               time_t __departureTime;
+
+               bool __isValid(const Mac &mac);
+               void __shiftCurrentInterval();
+               void __detectEntranceOrDeparture(std::shared_ptr<Frame> frame);
+               void __detectEntrance(std::shared_ptr<Frame> frame);
+               void __detectDeparture(std::shared_ptr<Frame> frame);
+               void __processBuffer(std::shared_ptr<Frame> frame); // python: buffer_analysing
+               std::shared_ptr<Frame> __makeFrame(std::shared_ptr<MacEvents> macEvents, Interval interval);  // python: scans2fingerprint
+               void __resetHistory();
+               void __resetHistory(std::shared_ptr<Frame> frame);
+               void __visitStartDetected();
+               void __visitEndDetected();
+               void __putLocationToVisit(Visit &visit);
+               std::shared_ptr<MacSet> __selectRepresentatives(const std::vector<std::shared_ptr<Frame>> &frames);
+               std::shared_ptr<MacSet> __macSetOfGreaterOrEqualShare(const Macs2Shares &macs2Shares, share_t threshold);
+               std::shared_ptr<Macs2Shares> __macSharesFromCounts(Macs2Counts const &macs2Counts, count_t denominator); // python: response_rate
+               share_t __calcMaxShare(const Macs2Shares &macs2Shares);
+               bool __isDisjoint(const Macs2Counts &macs2Counts, const MacSet &macSet);
+               bool __protrudesFrom(const Macs2Counts &macs2Counts, const MacSet &macSet);
+               void __setPeriod(PlaceRecogMode mode);
+               void __processCurrentLogger();
+
+               /* DATABASE */
+               void __dbCreateTable();
+               int __dbInsertVisit(Visit visit);
+               void __putVisitCategToJson(const char* key, const Categs &categs, int categType, Json &data);
+               void __putVisitCategsToJson(const Categs &categs, Json &data);
+
+               /* INPUT */
+               void onWifiScan(MacEvent event);
+               void onNewLocation(LocationEvent location);
+
+       public:
+               VisitDetector(time_t startScan, PlaceRecogMode energyMode = PLACE_RECOG_HIGH_ACCURACY_MODE, bool testMode = false);
+               ~VisitDetector();
+
+               std::shared_ptr<Visits> getVisits(); // only used in test mode
+               void setMode(PlaceRecogMode energyMode);
+
+       };      /* class VisitDetector */
+
+}      /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_VISIT_DETECTOR_H_ */
diff --git a/src/my-place/user_places/visit_listener_iface.h b/src/my-place/user_places/visit_listener_iface.h
new file mode 100644 (file)
index 0000000..fefc926
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_VISIT_LISTENER_IFACE_H_
+#define _CONTEXT_PLACE_RECOGNITION_VISIT_LISTENER_IFACE_H_
+
+namespace ctx {
+
+       class IVisitListener {
+
+       public:
+               virtual ~IVisitListener() {};
+               virtual void onVisitStart() = 0;
+               virtual void onVisitEnd() = 0;
+
+       };      /* class IVisitListener */
+
+}      /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_VISIT_LISTENER_IFACE_H_ */
diff --git a/src/my-place/user_places/wifi_listener_iface.h b/src/my-place/user_places/wifi_listener_iface.h
new file mode 100644 (file)
index 0000000..3b883d3
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_WIFI_LISTENER_IFACE_H_
+#define _CONTEXT_PLACE_RECOGNITION_WIFI_LISTENER_IFACE_H_
+
+#include "user_places_types.h"
+
+namespace ctx {
+
+       class IWifiListener {
+
+       public:
+               virtual ~IWifiListener() {};
+               virtual void onWifiScan(ctx::MacEvent macEvent) = 0;
+
+       };      /* IWifiListener */
+
+}      /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_WIFI_LISTENER_IFACE_H_ */
diff --git a/src/my-place/user_places/wifi_logger.cpp b/src/my-place/user_places/wifi_logger.cpp
new file mode 100644 (file)
index 0000000..3367276
--- /dev/null
@@ -0,0 +1,475 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <sstream>
+#include <Types.h>
+#include <DatabaseManager.h>
+#include "../place_recognition_types.h"
+#include "debug_utils.h"
+#include "wifi_logger.h"
+
+#define __WIFI_CREATE_TABLE_COLUMNS \
+       WIFI_COLUMN_TIMESTAMP " timestamp NOT NULL, "\
+       WIFI_COLUMN_BSSID " TEXT NOT NULL"
+
+#define __WIFI_ERROR_LOG(error) { \
+       if (error != WIFI_ERROR_NONE) { \
+               _E("ERROR == %s", __wifiError2Str(error)); \
+       } else { \
+               _D("SUCCESS"); \
+       } \
+}
+
+int ctx::WifiLogger::__dbCreateTable()
+{
+       ctx::DatabaseManager dbManager;
+       bool ret = dbManager.createTable(0, WIFI_TABLE_NAME, __WIFI_CREATE_TABLE_COLUMNS, NULL, NULL);
+       _D("Table Creation Request: %s", ret ? "SUCCESS" : "FAIL");
+       return ret;
+}
+
+int ctx::WifiLogger::__dbInsertLogs()
+{
+       if (__logs.size() > 0) {
+               ctx::DatabaseManager dbManager;
+               std::stringstream query;
+               const char* separator = " ";
+               query << "BEGIN TRANSACTION; \
+                               INSERT INTO " WIFI_TABLE_NAME " \
+                               ( " WIFI_COLUMN_BSSID ", " WIFI_COLUMN_TIMESTAMP " ) \
+                               VALUES";
+               for (MacEvent mac_event : __logs) {
+                       query << separator << "( '" << mac_event.mac << "', '" << mac_event.timestamp << "' )";
+                       separator = ", ";
+               }
+               __logs.clear();
+               query << "; \
+                               END TRANSACTION;";
+               bool ret = dbManager.execute(0, query.str().c_str(), NULL);
+               _D("DB insert request: %s", ret ? "SUCCESS" : "FAIL");
+               return ret;
+       }
+       _D("__logs vector empty -> nothing to insert");
+       return 0;
+}
+
+ctx::WifiLogger::WifiLogger(IWifiListener * listener, PlaceRecogMode energyMode, bool testMode) :
+       __timerOn(false),
+       __intervalMinutes(WIFI_LOGGER_INTERVAL_MINUTES_HIGH_ACCURACY),
+       __testMode(testMode),
+       __listener(listener),
+       __lastScanTime(time_t(0)),
+       __lasTimerCallbackTime(time_t(0)),
+       __duringVisit(false),
+       __connectedToWifiAp(false),
+       __started(false),
+       __running(false)
+{
+       _D("CONSTRUCTOR");
+       if (testMode) {
+               return;
+       }
+       __setInterval(energyMode);
+
+       if (WIFI_LOGGER_DATABASE) {
+               __dbCreateTable();
+       }
+
+       __logs = std::vector<MacEvent>();
+
+       __wifiInitializeRequest();
+       __wifiSetDeviceStateChangedCbRequest();
+       if (WIFI_LOGGER_LOW_POWER_MODE) {
+               __wifiSetConnectionStateChangedCbRequest();
+       }
+       wifi_connection_state_e state = __wifiGetConnectionStateRequest();
+       __connectedToWifiAp = (state == WIFI_CONNECTION_STATE_CONNECTED);
+       _D("__connectedToWifiAp = %d, __duringVisit = %d IN CONSTRUCTOR",
+                               static_cast<int>(__connectedToWifiAp),
+                               static_cast<int>(__duringVisit));
+}
+
+ctx::WifiLogger::~WifiLogger()
+{
+       _D("DESTRUCTOR");
+       stopLogging();
+       __wifiDeinitializeRequest();
+}
+
+void ctx::WifiLogger::__wifiDeviceStateChangedCb(wifi_device_state_e state, void *userData)
+{
+       ctx::WifiLogger* wifiLogger = (ctx::WifiLogger *)userData;
+       switch (state) {
+       case WIFI_DEVICE_STATE_DEACTIVATED:
+               _D("WIFI setting OFF");
+               if (wifiLogger->__started) {
+                       wifiLogger->__stopLogging();
+               }
+               break;
+       case WIFI_DEVICE_STATE_ACTIVATED:
+               _D("WIFI setting ON");
+               if (wifiLogger->__started) {
+                       wifiLogger->__startLogging();
+               }
+               break;
+       default:
+               break;
+       }
+}
+
+void ctx::WifiLogger::__wifiConnectionStateChangedCb(wifi_connection_state_e state, wifi_ap_h ap, void *userData)
+{
+       ctx::WifiLogger* wifiLogger = (ctx::WifiLogger *)userData;
+       switch (state) {
+       case WIFI_CONNECTION_STATE_CONNECTED:
+               _D("connected to AP");
+               wifiLogger->__connectedToWifiAp = true;
+               break;
+       default:
+               _D("disconnected from AP -> __lastScansPool.clear()");
+               wifiLogger->__connectedToWifiAp = false;
+               wifiLogger->__lastScansPool.clear();
+               break;
+       }
+       // TODO: Check if AP bssid (MAC Address) will be helpful somehow in LOW_POWER mode
+}
+
+bool ctx::WifiLogger::__wifiFoundApCb(wifi_ap_h ap, void *userData)
+{
+       ctx::WifiLogger* wifiLogger = (ctx::WifiLogger *)userData;
+
+       char *bssid = NULL;
+       int ret = __wifiApGetBssidRequest(ap, &bssid);
+       if (ret != WIFI_ERROR_NONE) {
+               return false;
+       }
+
+       Mac mac;
+       try {
+               mac = Mac(bssid);
+       } catch (std::runtime_error &e) {
+               _E("Cannot create mac_event. Exception: %s", e.what());
+               return false;
+       }
+
+       MacEvent log(wifiLogger->__lastScanTime, mac);
+       if (wifiLogger->__listener) {
+               wifiLogger->__listener->onWifiScan(log);
+               if (WIFI_LOGGER_LOW_POWER_MODE
+                               && (wifiLogger->__connectedToWifiAp || wifiLogger->__duringVisit) ) {
+                       // Add to last scans AP's set
+                       wifiLogger->__lastScansPool.insert(std::string(bssid));
+               }
+       }
+       if (WIFI_LOGGER_DATABASE) {
+               wifiLogger->__logs.push_back(log);
+       }
+
+       return true;
+}
+
+const char* ctx::WifiLogger::__wifiError2Str(int error)
+{
+       switch (error) {
+       case WIFI_ERROR_INVALID_PARAMETER:
+               return "WIFI_ERROR_INVALID_PARAMETER";
+       case WIFI_ERROR_OUT_OF_MEMORY:
+               return "WIFI_ERROR_OUT_OF_MEMORY";
+       case WIFI_ERROR_INVALID_OPERATION:
+               return "WIFI_ERROR_INVALID_OPERATION";
+       case WIFI_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED:
+               return "WIFI_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED";
+       case WIFI_ERROR_OPERATION_FAILED:
+               return "WIFI_ERROR_OPERATION_FAILED";
+       case WIFI_ERROR_NO_CONNECTION:
+               return "WIFI_ERROR_NO_CONNECTION";
+       case WIFI_ERROR_NOW_IN_PROGRESS:
+               return "WIFI_ERROR_NOW_IN_PROGRESS";
+       case WIFI_ERROR_ALREADY_EXISTS:
+               return "WIFI_ERROR_ALREADY_EXISTS";
+       case WIFI_ERROR_OPERATION_ABORTED:
+               return "WIFI_ERROR_OPERATION_ABORTED";
+       case WIFI_ERROR_DHCP_FAILED:
+               return "WIFI_ERROR_DHCP_FAILED";
+       case WIFI_ERROR_INVALID_KEY:
+               return "WIFI_ERROR_INVALID_KEY";
+       case WIFI_ERROR_NO_REPLY:
+               return "WIFI_ERROR_NO_REPLY";
+       case WIFI_ERROR_SECURITY_RESTRICTED:
+               return "WIFI_ERROR_SECURITY_RESTRICTED";
+       case WIFI_ERROR_PERMISSION_DENIED:
+               return "WIFI_ERROR_PERMISSION_DENIED";
+       default:
+               return "unknown wifi error code";
+       }
+}
+
+void ctx::WifiLogger::__wifiScanFinishedCb(wifi_error_e errorCode, void *userData)
+{
+       ctx::WifiLogger* wifiLogger = (ctx::WifiLogger *)userData;
+
+       time_t now = time(nullptr);
+#ifdef TIZEN_ENGINEER_MODE
+       double seconds = 0;
+       if (wifiLogger->__lastScanTime > 0) {
+               seconds = difftime(now, wifiLogger->__lastScanTime);
+       }
+       std::string timeStr = DebugUtils::humanReadableDateTime(now, "%T", 9);
+       _D("__connectedToWifiAp = %d, __duringVisit = %d, __lastScansPool.size() = %d -> scan %s (from last : %.1fs)",
+                       static_cast<int>(wifiLogger->__connectedToWifiAp),
+                       static_cast<int>(wifiLogger->__duringVisit),
+                       wifiLogger->__lastScansPool.size(),
+                       timeStr.c_str(),
+                       seconds);
+#endif /* TIZEN_ENGINEER_MODE */
+       wifiLogger->__lastScanTime = now;
+
+       int ret = __wifiForeachFoundApsRequest(userData);
+       if (ret != WIFI_ERROR_NONE) {
+               return;
+       }
+       if (WIFI_LOGGER_DATABASE) {
+               wifiLogger->__dbInsertLogs();
+       }
+}
+
+bool ctx::WifiLogger::__checkWifiIsActivated()
+{
+       bool wifiActivated = true;
+       int ret = wifi_is_activated(&wifiActivated);
+       __WIFI_ERROR_LOG(ret);
+       _D("Wi-Fi is %s", wifiActivated ? "ON" : "OFF");
+       return wifiActivated;
+}
+
+void ctx::WifiLogger::__wifiScanRequest()
+{
+       int ret = wifi_scan(__wifiScanFinishedCb, this);
+       __WIFI_ERROR_LOG(ret);
+}
+
+int ctx::WifiLogger::__wifiForeachFoundApsRequest(void *userData)
+{
+       int ret = wifi_foreach_found_aps(__wifiFoundApCb, userData);
+       __WIFI_ERROR_LOG(ret);
+       return ret;
+}
+
+wifi_connection_state_e ctx::WifiLogger::__wifiGetConnectionStateRequest()
+{
+       wifi_connection_state_e connectionState;
+       int ret = wifi_get_connection_state(&connectionState);
+       __WIFI_ERROR_LOG(ret);
+       return connectionState;
+}
+
+void ctx::WifiLogger::__wifiSetBackgroundScanCbRequest()
+{
+       int ret = wifi_set_background_scan_cb(__wifiScanFinishedCb, this);
+       __WIFI_ERROR_LOG(ret);
+}
+
+void ctx::WifiLogger::__wifiSetDeviceStateChangedCbRequest()
+{
+       int ret = wifi_set_device_state_changed_cb(__wifiDeviceStateChangedCb, this);
+       __WIFI_ERROR_LOG(ret);
+}
+
+void ctx::WifiLogger::__wifiSetConnectionStateChangedCbRequest()
+{
+       int ret = wifi_set_connection_state_changed_cb(__wifiConnectionStateChangedCb, this);
+       __WIFI_ERROR_LOG(ret);
+}
+
+int ctx::WifiLogger::__wifiApGetBssidRequest(wifi_ap_h ap, char **bssid)
+{
+       int ret = wifi_ap_get_bssid(ap, bssid);
+       __WIFI_ERROR_LOG(ret);
+       return ret;
+}
+
+void ctx::WifiLogger::__wifiInitializeRequest()
+{
+       int ret = wifi_initialize();
+       __WIFI_ERROR_LOG(ret);
+}
+
+void ctx::WifiLogger::__wifiDeinitializeRequest()
+{
+       int ret = wifi_deinitialize();
+       __WIFI_ERROR_LOG(ret);
+}
+
+bool ctx::WifiLogger::__checkTimerId(int id)
+{
+       _D("id == %d, __timerId == %d", id, __timerId);
+       return id == __timerId;
+}
+
+/*
+ * Accepted time from last callback is >= than minimum interval
+ */
+bool ctx::WifiLogger::__checkTimerTime(time_t now)
+{
+       double seconds = 0;
+       if (__lasTimerCallbackTime > 0) {
+               seconds = difftime(now, __lasTimerCallbackTime);
+               if (seconds < WIFI_LOGGER_ACTIVE_SCANNING_MIN_INTERVAL) {
+                       _D("last == %d, now == %d, diff = %.1fs -> Incorrect timer callback", __lasTimerCallbackTime, now, seconds);
+                       return false;
+               } else {
+                       _D("last == %d, now == %d, diff = %.1fs -> Correct timer callback", __lasTimerCallbackTime, now, seconds);
+               }
+       } else {
+               _D("last == %d, now == %d -> First callback", __lasTimerCallbackTime, now);
+       }
+       __lasTimerCallbackTime = now;
+       return true;
+}
+
+bool ctx::WifiLogger::onTimerExpired(int id)
+{
+       time_t now = time(nullptr);
+       _D("");
+       if (__checkTimerId(id) == false) {
+               // Incorrect callback call
+               return false;
+       }
+       if (__checkTimerTime(now) == false) {
+               // Prevention from double callback call bug
+               return __timerOn;
+       }
+       _D("__connectedToWifiAp = %d, __duringVisit = %d, __lastScansPool.size() = %d",
+                       static_cast<int>(__connectedToWifiAp),
+                       static_cast<int>(__duringVisit),
+                       __lastScansPool.size());
+       if (WIFI_LOGGER_LOW_POWER_MODE
+                       && __duringVisit
+                       && __connectedToWifiAp
+                       && __lastScansPool.size() > 0) {
+               _D("trying to send fake scan");
+               if (__listener) {
+                       _D("__listener != false -> CORRECT");
+                       for (std::string bssid : __lastScansPool) {
+                               Mac mac(bssid);
+                               MacEvent scan(now, mac);
+                               _D("send fake scan (%s)", bssid.c_str());
+                               __listener->onWifiScan(scan);
+                       }
+               }
+       } else {
+               __wifiScanRequest();
+       }
+       return __timerOn;
+}
+
+void ctx::WifiLogger::startLogging()
+{
+       _D("");
+       __started = true;
+       __startLogging();
+}
+
+void ctx::WifiLogger::__startLogging()
+{
+       _D("");
+       if (!__checkWifiIsActivated() || __running) {
+               return;
+       }
+       __running = true;
+
+       if (WIFI_LOGGER_ACTIVE_SCANNING) {
+               __timerStart(__intervalMinutes);
+               __wifiScanRequest();
+       }
+       if (WIFI_LOGGER_PASSIVE_SCANNING) {
+               __wifiSetBackgroundScanCbRequest();
+       }
+}
+
+void ctx::WifiLogger::stopLogging()
+{
+       _D("");
+       __started = false;
+       __stopLogging();
+}
+
+void ctx::WifiLogger::__stopLogging()
+{
+       _D("");
+       if (!__running) {
+               return;
+       }
+       if (WIFI_LOGGER_ACTIVE_SCANNING) {
+               // Unset timer
+               __timerOn = false;
+               // Remove timer
+               __timerManager.remove(__timerId);
+       }
+       if (WIFI_LOGGER_PASSIVE_SCANNING) {
+               wifi_unset_background_scan_cb();
+       }
+       __running = false;
+}
+
+void ctx::WifiLogger::__timerStart(time_t minutes)
+{
+       __timerOn = true;
+       __timerId = __timerManager.setFor(minutes, this);
+       _D("%s (minutes=%d)", __timerId >= 0 ? "SUCCESS" : "ERROR", minutes);
+}
+
+void ctx::WifiLogger::onVisitStart()
+{
+       _D("");
+       __duringVisit = true;
+}
+
+void ctx::WifiLogger::onVisitEnd()
+{
+       _D("__lastScansPool.clear()");
+       __duringVisit = false;
+       __lastScansPool.clear();
+}
+
+void ctx::WifiLogger::__setInterval(PlaceRecogMode energyMode)
+{
+       switch (energyMode) {
+       case PLACE_RECOG_LOW_POWER_MODE:
+               __intervalMinutes = WIFI_LOGGER_INTERVAL_MINUTES_LOW_POWER;
+               break;
+       case PLACE_RECOG_HIGH_ACCURACY_MODE:
+               __intervalMinutes = WIFI_LOGGER_INTERVAL_MINUTES_HIGH_ACCURACY;
+               break;
+       default:
+               _E("Incorrect energy mode");
+       }
+}
+
+void ctx::WifiLogger::__timerRestart()
+{
+       __timerManager.remove(__timerId);
+       __timerStart(__intervalMinutes);
+}
+
+void ctx::WifiLogger::setMode(PlaceRecogMode energyMode)
+{
+       _D("");
+       __setInterval(energyMode);
+       if (WIFI_LOGGER_ACTIVE_SCANNING && __timerOn) {
+               __timerRestart();
+       }
+}
diff --git a/src/my-place/user_places/wifi_logger.h b/src/my-place/user_places/wifi_logger.h
new file mode 100644 (file)
index 0000000..9938a2c
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_WIFI_LOGGER_H_
+#define _CONTEXT_PLACE_RECOGNITION_WIFI_LOGGER_H_
+
+#include <wifi.h>
+#include <time.h>
+#include <vector>
+#include <set>
+#include <TimerManager.h>
+#include "wifi_listener_iface.h"
+#include "visit_listener_iface.h"
+#include "user_places_params.h"
+
+/* Database usage flag */
+#define WIFI_LOGGER_DATABASE false
+
+/* Active scanning usage flag */
+#define WIFI_LOGGER_ACTIVE_SCANNING true
+
+/* Passive scanning usage flag */
+#define WIFI_LOGGER_PASSIVE_SCANNING true
+
+/* Active scanning minimum interval in seconds */
+#define WIFI_LOGGER_ACTIVE_SCANNING_MIN_INTERVAL 10
+
+/*
+ * Low power scanning usage flag
+ * (When phone is connected to some WiFi Access Point
+ * last scan data is returned instead of new scan triggering)
+ */
+#define WIFI_LOGGER_LOW_POWER_MODE false
+
+namespace ctx {
+
+       class WifiLogger : public ITimerListener, public IVisitListener {
+
+       public:
+               WifiLogger(IWifiListener * listener = nullptr,
+                               PlaceRecogMode energyMode = PLACE_RECOG_HIGH_ACCURACY_MODE,
+                               bool testMode = false);
+               ~WifiLogger();
+
+               void startLogging();
+               void stopLogging();
+               void setMode(PlaceRecogMode energyMode);
+
+       private:
+               /* INPUT */
+               void onVisitStart();
+               void onVisitEnd();
+
+               bool onTimerExpired(int timerId);
+
+               /* TIMER */
+               bool __timerOn;
+               int __timerId;
+               int __intervalMinutes;
+               TimerManager __timerManager;
+               void __setInterval(PlaceRecogMode energyMode);
+               bool __checkTimerId(int id);
+               bool __checkTimerTime(time_t now);
+               void __timerStart(time_t minutes);
+               void __timerRestart();
+
+               /* DATABASE */
+               static int __dbCreateTable();
+               int __dbInsertLogs();
+
+               /* SYSTEM CAPI WRAPPERS */
+               void __wifiSetBackgroundScanCbRequest();
+               void __wifiSetDeviceStateChangedCbRequest();
+               void __wifiSetConnectionStateChangedCbRequest();
+               static bool __checkWifiIsActivated();
+               void __wifiScanRequest();
+               static int __wifiForeachFoundApsRequest(void *userData);
+               static wifi_connection_state_e __wifiGetConnectionStateRequest();
+               static int __wifiApGetBssidRequest(wifi_ap_h ap, char **bssid);
+               void __wifiInitializeRequest();
+               void __wifiDeinitializeRequest();
+
+               /* SYSTEM CAPI CALLBACKS */
+               static void __wifiDeviceStateChangedCb(wifi_device_state_e state, void *userData);
+               static void __wifiConnectionStateChangedCb(wifi_connection_state_e state, wifi_ap_h ap, void *userData);
+               static bool __wifiFoundApCb(wifi_ap_h ap, void *userData);
+               static void __wifiScanFinishedCb(wifi_error_e errorCode, void *userData);
+
+               bool __testMode;
+               IWifiListener * const __listener;
+               std::vector<MacEvent> __logs;
+               std::set<std::string> __lastScansPool;
+               time_t __lastScanTime;
+               time_t __lasTimerCallbackTime;
+               bool __duringVisit;
+               bool __connectedToWifiAp;
+               bool __started;
+               bool __running;
+
+               void __startLogging();
+               void __stopLogging();
+               static const char* __wifiError2Str(int error);
+
+       };      /* class WifiLogger */
+
+}      /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_WIFI_LOGGER_H_ */
diff --git a/src/place/CMakeLists.txt b/src/place/CMakeLists.txt
deleted file mode 100644 (file)
index 1db79f7..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
-# prvd_cdef, prvd_deps, and prvd_srcs need to be set properly
-
-# Build flag for the place auto detection engine.
-# Set this to "yes" to enable the engine.
-SET(enable_recog_engine "no")
-
-# Common Profile
-FILE(GLOB prvd_srcs *.cpp)
-
-# Mobile Profile
-IF("${PROFILE}" STREQUAL "mobile")
-       FILE(GLOB_RECURSE prvd_srcs ${prvd_srcs} geofence/*.cpp)
-       SET(prvd_deps ${prvd_deps} capi-geofence-manager)
-       IF("${enable_recog_engine}" STREQUAL "yes")
-               FILE(GLOB_RECURSE prvd_srcs ${prvd_srcs} recognition/*.cpp)
-               SET(prvd_deps ${prvd_deps} capi-location-manager)
-               SET(prvd_deps ${prvd_deps} capi-network-wifi)
-       ELSE("${enable_recog_engine}" STREQUAL "yes")
-               SET(prvd_cdef ${prvd_cdef} _DISABLE_RECOG_ENGINE_)
-       ENDIF("${enable_recog_engine}" STREQUAL "yes")
-ENDIF("${PROFILE}" STREQUAL "mobile")
diff --git a/src/place/PlaceContextProvider.cpp b/src/place/PlaceContextProvider.cpp
deleted file mode 100644 (file)
index 349000a..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <Types.h>
-#include <PlaceContextProvider.h>
-
-#ifdef _MOBILE_
-#include "geofence/PlaceGeofenceProvider.h"
-#ifndef _DISABLE_RECOG_ENGINE_
-#include "recognition/place_recognition.h"
-#endif /* _DISABLE_RECOG_ENGINE_ */
-#endif /* _MOBILE_ */
-
-template<typename Provider>
-void registerProvider(const char *subject, const char *privilege)
-{
-       Provider *provider = new(std::nothrow) Provider();
-       IF_FAIL_VOID_TAG(provider, _E, "Memory allocation failed");
-
-       if (!provider->isSupported()) {
-               delete provider;
-               return;
-       }
-
-       provider->registerProvider(privilege, provider);
-       provider->submitTriggerItem();
-}
-
-SO_EXPORT bool ctx::initPlaceContextProvider()
-{
-#ifdef _MOBILE_
-       registerProvider<PlaceGeofenceProvider>(PLACE_SUBJ_GEOFENCE, PLACE_PRIV_GEOFENCE);
-
-#ifndef _DISABLE_RECOG_ENGINE_
-       registerProvider<PlaceRecognitionProvider>(PLACE_SUBJ_RECOGNITION, PLACE_PRIV_RECOGNITION);
-#endif /* _DISABLE_RECOG_ENGINE_ */
-
-#endif /* _MOBILE_ */
-       return true;
-}
diff --git a/src/place/geofence/GeofenceMonitorHandle.cpp b/src/place/geofence/GeofenceMonitorHandle.cpp
deleted file mode 100644 (file)
index 868966a..0000000
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <Types.h>
-#include <Json.h>
-#include "PlaceGeofenceProvider.h"
-#include "GeofenceMonitorHandle.h"
-
-using namespace ctx;
-
-GeofenceMonitorHandle::GeofenceMonitorHandle(PlaceGeofenceProvider *provider) :
-       __provider(provider),
-       __placeId(-1),
-       __prevState(GEOFENCE_STATE_UNCERTAIN),
-       __geoHandle(NULL)
-{
-}
-
-GeofenceMonitorHandle::~GeofenceMonitorHandle()
-{
-       __stopMonitor();
-}
-
-bool GeofenceMonitorHandle::startMonitor(int placeId)
-{
-       _D("Starts to monitor Place-%d", placeId);
-
-       IF_FAIL_RETURN(placeId >= 0, false);
-       IF_FAIL_RETURN_TAG(__geoHandle == NULL, false, _E, "Re-starting MyPlace monitor");
-
-       geofence_manager_create(&__geoHandle);
-       IF_FAIL_RETURN_TAG(__geoHandle, false, _E, "Geofence initialization failed");
-
-       int ret;
-
-       ret = geofence_manager_set_geofence_state_changed_cb(__geoHandle, __fenceStateCb, this);
-       IF_FAIL_CATCH_TAG(ret == GEOFENCE_MANAGER_ERROR_NONE, _E, "Setting state callback failed");
-
-       ret = geofence_manager_set_geofence_event_cb(__geoHandle, __fenceEventCb, this);
-       IF_FAIL_CATCH_TAG(ret == GEOFENCE_MANAGER_ERROR_NONE, _E, "Setting event callback failed");
-
-       ret = geofence_manager_foreach_place_geofence_list(__geoHandle, placeId, __fenceListCb, this);
-       IF_FAIL_CATCH_TAG(ret == GEOFENCE_MANAGER_ERROR_NONE, _E, "Getting fence list failed");
-
-       __placeId = placeId;
-       return true;
-
-CATCH:
-       __stopMonitor();
-       return false;
-}
-
-int GeofenceMonitorHandle::getPlaceId()
-{
-       return __placeId;
-}
-
-void GeofenceMonitorHandle::__stopMonitor()
-{
-       _D("Stops monitoring Place-%d", __placeId);
-
-       //TODO: Do we need to stop all geofences explicitly?
-       if (__geoHandle) {
-               geofence_manager_destroy(__geoHandle);
-               __geoHandle = NULL;
-       }
-
-       __geoStateMap.clear();
-       __placeId = -1;
-       __prevState = GEOFENCE_STATE_UNCERTAIN;
-}
-
-bool GeofenceMonitorHandle::__startFence(int fenceId)
-{
-       int ret;
-
-       ret = geofence_manager_start(__geoHandle, fenceId);
-       IF_FAIL_RETURN_TAG(ret == GEOFENCE_MANAGER_ERROR_NONE, true, _W, "Starting failed");
-
-       geofence_status_h status;
-       ret = geofence_status_create(fenceId, &status);
-       IF_FAIL_RETURN_TAG(ret == GEOFENCE_MANAGER_ERROR_NONE, true, _W, "Getting status failed");
-
-       geofence_state_e state = GEOFENCE_STATE_UNCERTAIN;
-       geofence_status_get_state(status, &state);
-       geofence_status_destroy(status);
-
-       __geoStateMap[fenceId] = state;
-
-       return true;
-}
-
-void GeofenceMonitorHandle::__removeFence(int fenceId)
-{
-       geofence_manager_stop(__geoHandle, fenceId);
-       __geoStateMap.erase(fenceId);
-}
-
-void GeofenceMonitorHandle::__updateFence(int fenceId, geofence_manage_e manage)
-{
-       switch (manage) {
-       case GEOFENCE_MANAGE_PLACE_REMOVED:
-               _W("[Place-%d] Removed", __placeId);
-               __stopMonitor();
-               break;
-       case GEOFENCE_MANAGE_FENCE_ADDED:
-               _I("[Place %d] Fence-%d added", __placeId, fenceId);
-               __startFence(fenceId);
-               __emitStateChange();
-               break;
-       case GEOFENCE_MANAGE_FENCE_REMOVED:
-               _I("[Place-%d] Fence-%d removed", __placeId, fenceId);
-               __removeFence(fenceId);
-               __emitStateChange();
-               break;
-       case GEOFENCE_MANAGE_FENCE_STARTED:
-               _D("[Place-%d] Fence-%d started", __placeId, fenceId);
-               break;
-       case GEOFENCE_MANAGE_FENCE_STOPPED:
-               _D("[Place-%d] Fence-%d stopped", __placeId, fenceId);
-               //TODO: Do we need to restart this?
-               break;
-       default:
-               _D("[Place-%d] Ignoring the manage event %d", __placeId, manage);
-               break;
-       }
-}
-
-void GeofenceMonitorHandle::__updateState(int fenceId, geofence_state_e state)
-{
-       __geoStateMap[fenceId] = state;
-}
-
-void GeofenceMonitorHandle::__emitStateChange()
-{
-       geofence_state_e currentState = GEOFENCE_STATE_UNCERTAIN;
-       int outCount = 0;
-
-       for (auto it = __geoStateMap.begin(); it != __geoStateMap.end(); ++it) {
-               if (it->second == GEOFENCE_STATE_IN) {
-                       currentState = GEOFENCE_STATE_IN;
-                       break;
-               } else if (it->second == GEOFENCE_STATE_OUT) {
-                       ++outCount;
-               }
-       }
-
-       if (currentState != GEOFENCE_STATE_IN && outCount > 0) {
-               currentState = GEOFENCE_STATE_OUT;
-       }
-
-       if (currentState == __prevState) {
-               return;
-       }
-
-       __prevState = currentState;
-
-       Json option;
-       option.set(NULL, PLACE_GEOFENCE_PLACE_ID, __placeId);
-
-       Json data;
-       data.set(NULL, PLACE_GEOFENCE_PLACE_ID, __placeId);
-       data.set(NULL, PLACE_GEOFENCE_EVENT, __getStateString(currentState));
-
-       __provider->publish(option, ERR_NONE, data);
-}
-
-const char* GeofenceMonitorHandle::__getStateString(geofence_state_e state)
-{
-       switch (state) {
-       case GEOFENCE_STATE_IN:
-               return PLACE_GEOFENCE_IN;
-       case GEOFENCE_STATE_OUT:
-               return PLACE_GEOFENCE_OUT;
-       case GEOFENCE_STATE_UNCERTAIN:
-               return PLACE_GEOFENCE_UNCERTAIN;
-       default:
-               return PLACE_GEOFENCE_UNCERTAIN;
-       }
-}
-
-bool GeofenceMonitorHandle::__fenceListCb(int geofenceId, geofence_h fence, int fenceIndex, int fenceCount, void* userData)
-{
-       _D("FenceID: %d, Index: %d, Count: %d", geofenceId, fenceIndex, fenceCount);
-       IF_FAIL_RETURN(fenceCount > 0, false);
-
-       GeofenceMonitorHandle *handle = reinterpret_cast<GeofenceMonitorHandle*>(userData);
-       return handle->__startFence(geofenceId);
-}
-
-void GeofenceMonitorHandle::__fenceEventCb(int placeId, int geofenceId, geofence_manager_error_e error, geofence_manage_e manage, void* userData)
-{
-       IF_FAIL_VOID_TAG(error == GEOFENCE_MANAGER_ERROR_NONE, _W, "Geofence error: %d", error);
-
-       GeofenceMonitorHandle *handle = reinterpret_cast<GeofenceMonitorHandle*>(userData);
-
-       IF_FAIL_VOID_TAG(placeId == handle->getPlaceId(), _W, "Mismatched Place ID");
-
-       handle->__updateFence(geofenceId, manage);
-}
-
-void GeofenceMonitorHandle::__fenceStateCb(int geofenceId, geofence_state_e state, void* userData)
-{
-       GeofenceMonitorHandle *handle = reinterpret_cast<GeofenceMonitorHandle*>(userData);
-       handle->__updateState(geofenceId, state);
-       handle->__emitStateChange();
-}
diff --git a/src/place/geofence/GeofenceMonitorHandle.h b/src/place/geofence/GeofenceMonitorHandle.h
deleted file mode 100644 (file)
index 6bdd301..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_GEOFENCE_MONITOR_HANDLE_H_
-#define _CONTEXT_PLACE_GEOFENCE_MONITOR_HANDLE_H_
-
-#include <string>
-#include <map>
-#include <geofence_manager.h>
-
-namespace ctx {
-
-       class PlaceGeofenceProvider;
-
-       class GeofenceMonitorHandle {
-       public:
-               GeofenceMonitorHandle(PlaceGeofenceProvider *provider);
-               ~GeofenceMonitorHandle();
-
-               bool startMonitor(int placeId);
-               int getPlaceId();
-
-       private:
-               PlaceGeofenceProvider *__provider;
-               int __placeId;
-               geofence_state_e __prevState;
-               geofence_manager_h __geoHandle;
-               std::map<int, geofence_state_e> __geoStateMap;
-
-               void __emitStateChange();
-               void __stopMonitor();
-               bool __startFence(int fenceId);
-               void __removeFence(int fenceId);
-               void __updateFence(int fenceId, geofence_manage_e manage);
-               void __updateState(int fenceId, geofence_state_e state);
-
-               static const char* __getStateString(geofence_state_e state);
-
-               static bool __fenceListCb(int geofenceId, geofence_h fence, int fenceIndex, int fenceCount, void* userData);
-               static void __fenceEventCb(int placeId, int geofenceId, geofence_manager_error_e error, geofence_manage_e manage, void* userData);
-               static void __fenceStateCb(int geofenceId, geofence_state_e state, void* userData);
-       };
-
-}      /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_GEOFENCE_MONITOR_HANDLE_H_ */
diff --git a/src/place/geofence/PlaceGeofenceProvider.cpp b/src/place/geofence/PlaceGeofenceProvider.cpp
deleted file mode 100644 (file)
index e7aff50..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <geofence_manager.h>
-#include "GeofenceMonitorHandle.h"
-#include "PlaceGeofenceProvider.h"
-
-using namespace ctx;
-
-PlaceGeofenceProvider::PlaceGeofenceProvider() :
-       ContextProvider(PLACE_SUBJ_GEOFENCE)
-{
-}
-
-PlaceGeofenceProvider::~PlaceGeofenceProvider()
-{
-       for (auto& it : __handleMap) {
-               delete it.second;
-       }
-
-       __handleMap.clear();
-}
-
-bool PlaceGeofenceProvider::isSupported()
-{
-       bool supported = false;
-       int ret = geofence_manager_is_supported(&supported);
-       IF_FAIL_RETURN_TAG(ret == GEOFENCE_MANAGER_ERROR_NONE, false, _E, "geofence_manager_is_supported() failed");
-       return supported;
-}
-
-void PlaceGeofenceProvider::submitTriggerItem()
-{
-       registerTriggerItem(OPS_SUBSCRIBE,
-                       "{"
-                               "\"Event\":{\"type\":\"string\",\"values\":[\"In\",\"Out\"]}"
-                       "}",
-                       "{"
-                               "\"PlaceId\":{\"type\":\"integer\",\"min\":1}"
-                       "}");
-}
-
-int PlaceGeofenceProvider::subscribe(Json option, Json *requestResult)
-{
-       int placeId = -1;
-       option.get(NULL, PLACE_GEOFENCE_PLACE_ID, &placeId);
-       IF_FAIL_RETURN_TAG(placeId != -1, ERR_INVALID_PARAMETER, _E, "Getting PlaceID failed");
-
-       auto it = __handleMap.find(placeId);
-       if (it != __handleMap.end()) {
-               _D("Place ID %d is being monitored already", placeId);
-               return ERR_NONE;
-       }
-
-       GeofenceMonitorHandle *handle = new(std::nothrow) GeofenceMonitorHandle(this);
-       ASSERT_ALLOC(handle);
-
-       bool ret = handle->startMonitor(placeId);
-       if (!ret) {
-               _E("Monitoring Place ID %d failed", placeId);
-               delete handle;
-               return ERR_OPERATION_FAILED;
-       }
-
-       __handleMap[placeId] = handle;
-
-       return ERR_NONE;
-}
-
-int PlaceGeofenceProvider::unsubscribe(Json option)
-{
-       int placeId = -1;
-       option.get(NULL, PLACE_GEOFENCE_PLACE_ID, &placeId);
-       IF_FAIL_RETURN_TAG(placeId != -1, ERR_INVALID_PARAMETER, _E, "Getting PlaceID failed");
-
-       auto it = __handleMap.find(placeId);
-       if (it == __handleMap.end()) {
-               _D("Place ID %d is not being monitored", placeId);
-               return ERR_NONE;
-       }
-
-       delete it->second;
-       __handleMap.erase(it);
-
-       return ERR_NONE;
-}
diff --git a/src/place/geofence/PlaceGeofenceProvider.h b/src/place/geofence/PlaceGeofenceProvider.h
deleted file mode 100644 (file)
index e6ebf2f..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_GEOFENCE_PROVIDER_H_
-#define _CONTEXT_PLACE_GEOFENCE_PROVIDER_H_
-
-#include <map>
-#include <ContextProvider.h>
-#include "PlaceGeofenceTypes.h"
-
-namespace ctx {
-
-       class GeofenceMonitorHandle;
-
-       class PlaceGeofenceProvider : public ContextProvider {
-       public:
-               PlaceGeofenceProvider();
-               ~PlaceGeofenceProvider();
-
-               int subscribe(Json option, Json *requestResult);
-               int unsubscribe(Json option);
-
-               bool isSupported();
-               void submitTriggerItem();
-
-       private:
-               std::map<int, GeofenceMonitorHandle*> __handleMap;
-       };
-
-}      /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_GEOFENCE_PROVIDER_H_ */
diff --git a/src/place/geofence/PlaceGeofenceTypes.h b/src/place/geofence/PlaceGeofenceTypes.h
deleted file mode 100644 (file)
index fa66a41..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_GEOFENCE_TYPES_H_
-#define _CONTEXT_PLACE_GEOFENCE_TYPES_H_
-
-// Subject
-#define PLACE_SUBJ_GEOFENCE            "place/geofence"
-
-// Privilege
-#define PLACE_PRIV_GEOFENCE            "location"
-
-// Option & Data Key
-#define PLACE_GEOFENCE_PLACE_ID        "PlaceId"
-#define PLACE_GEOFENCE_EVENT   "Event"
-
-// Data Value
-#define        PLACE_GEOFENCE_UNCERTAIN        "Uncertain"
-#define        PLACE_GEOFENCE_IN               "In"
-#define        PLACE_GEOFENCE_OUT              "Out"
-
-#endif /* End of _CONTEXT_PLACE_GEOFENCE_TYPES_H_ */
diff --git a/src/place/recognition/place_recognition.cpp b/src/place/recognition/place_recognition.cpp
deleted file mode 100644 (file)
index b736f1a..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "place_recognition.h"
-#include "user_places/user_places.h"
-
-int ctx::PlaceRecognitionProvider::subscribe(ctx::Json option, ctx::Json* requestResult)
-{
-       return ERR_NOT_SUPPORTED;
-}
-
-int ctx::PlaceRecognitionProvider::unsubscribe(ctx::Json option)
-{
-       return ERR_NOT_SUPPORTED;
-}
-
-int ctx::PlaceRecognitionProvider::read(ctx::Json option, ctx::Json* requestResult)
-{
-       _I(BLUE("Read"));
-       _J("Option", option);
-
-       std::vector<std::shared_ptr<ctx::Place>> places = __engine.getPlaces();
-       Json dataRead = UserPlaces::composeJson(places);
-
-       /*
-        * The below function needs to be called once.
-        * It does not need to be called within this read() function.
-        * In can be called later, in another scope.
-        * Please just be sure that, the 2nd input parameter "option" should be the same to the
-        * "option" parameter received via ctx::PlaceRecognitionProvider::read().
-        */
-       replyToRead(option, ERR_NONE, dataRead);
-
-       return ERR_NONE;
-}
-
-int ctx::PlaceRecognitionProvider::write(ctx::Json data, ctx::Json* requestResult)
-{
-       return ERR_NOT_SUPPORTED;
-}
-
-bool ctx::PlaceRecognitionProvider::isSupported()
-{
-       /* TODO: This function should be implemented properly */
-       return true;
-}
diff --git a/src/place/recognition/place_recognition.h b/src/place/recognition/place_recognition.h
deleted file mode 100644 (file)
index 814bb00..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_H_
-#define _CONTEXT_PLACE_RECOGNITION_H_
-
-#include <ContextProvider.h>
-#include "place_recognition_types.h"
-#include "user_places/user_places.h"
-
-namespace ctx {
-
-       class PlaceRecognitionProvider : public ContextProvider {
-       public:
-               PlaceRecognitionProvider() :
-                       ContextProvider(PLACE_SUBJ_RECOGNITION),
-                       __engine(PLACE_RECOG_HIGH_ACCURACY_MODE) {}
-
-               ~PlaceRecognitionProvider() {}
-
-               int subscribe(ctx::Json option, ctx::Json *requestResult);
-               int unsubscribe(ctx::Json option);
-               int read(ctx::Json option, ctx::Json *requestResult);
-               int write(ctx::Json data, ctx::Json *requestResult);
-
-               bool isSupported();
-               void submitTriggerItem() {}
-
-       private:
-               UserPlaces __engine;
-       };      /* class PlaceRecognitionProvider */
-
-}      /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_H_ */
diff --git a/src/place/recognition/place_recognition_types.h b/src/place/recognition/place_recognition_types.h
deleted file mode 100644 (file)
index 9576331..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_TYPES_
-#define _CONTEXT_PLACE_RECOGNITION_TYPES_
-
-// Context Items
-#define PLACE_SUBJ_RECOGNITION                 "place/pattern/personal_poi"
-
-#define PLACE_PRIV_RECOGNITION                 "location"
-
-// Database
-#define VISIT_TABLE                            "place_status_user_place_visit"
-#define VISIT_COLUMN_START_TIME                "start_time"
-#define VISIT_COLUMN_END_TIME                  "end_time"
-#define VISIT_COLUMN_WIFI_APS                  "wifi_aps"
-#define VISIT_COLUMN_CATEGORY                  "category"
-#ifdef TIZEN_ENGINEER_MODE
-#define VISIT_COLUMN_START_TIME_HUMAN          "start_time_human" // only for debug: human readable time data:
-#define VISIT_COLUMN_END_TIME_HUMAN            "end_time_human" // only for debug: human readable time data:
-#endif /* TIZEN_ENGINEER_MODE */
-#define VISIT_COLUMN_LOCATION_VALID            "geo_valid"
-#define VISIT_COLUMN_LOCATION_LATITUDE         "geo_latitude"
-#define VISIT_COLUMN_LOCATION_LONGITUDE        "geo_longitude"
-#define VISIT_COLUMN_CATEG_HOME                "categ_home"
-#define VISIT_COLUMN_CATEG_WORK                "categ_work"
-#define VISIT_COLUMN_CATEG_OTHER               "categ_other"
-
-#define PLACE_TABLE                            "place_status_user_place"
-#define PLACE_COLUMN_CATEG_ID                  "type_id" // Name inconsistency: "cated_id" vs "type_id" TODO make it consistent
-#define PLACE_COLUMN_CATEG_CONFIDENCE          "type_confidence"
-#define PLACE_COLUMN_NAME                      "name"
-#define PLACE_COLUMN_LOCATION_VALID            "geo_valid"
-#define PLACE_COLUMN_LOCATION_LATITUDE         "geo_latitude"
-#define PLACE_COLUMN_LOCATION_LONGITUDE        "geo_longitude"
-#define PLACE_COLUMN_WIFI_APS                  "wifi_aps"
-#define PLACE_COLUMN_CREATE_DATE               "create_date"
-
-#define WIFI_TABLE_NAME                        "place_status_user_place_wifi"
-#define WIFI_COLUMN_TIMESTAMP                  "timestamp"
-#define WIFI_COLUMN_BSSID                      "bssid"
-
-#define LOCATION_TABLE_NAME                    "place_status_user_place_location"
-#define LOCATION_COLUMN_LATITUDE               "geo_latitude"
-#define LOCATION_COLUMN_LONGITUDE              "geo_longitude"
-#define LOCATION_COLUMN_ACCURACY               "accuracy"
-#define LOCATION_COLUMN_TIMESTAMP              "timestamp"
-#ifdef TIZEN_ENGINEER_MODE
-#define LOCATION_COLUMN_TIMESTAMP_HUMAN        "time_human" // only for debug: human readable time data:
-#define LOCATION_COLUMN_METHOD                 "method"
-#endif /* TIZEN_ENGINEER_MODE */
-
-// Data Key
-#define DATA_READ                              "PlacesList"
-#define PLACE_CATEG_ID                         "TypeId" // Name inconsistency: "cated_id" vs "type_id" TODO make it consistent
-#define PLACE_CATEG_CONFIDENCE                 "TypeConfidence"
-#define PLACE_NAME                             "Name"
-#define PLACE_GEO_LATITUDE                     "GeoLatitude"
-#define PLACE_GEO_LONGITUDE                    "GeoLongitude"
-#define PLACE_WIFI_APS                         "WifiAPs"
-#define PLACE_CREATE_DATE                      "CreateDate"
-
-// Data values
-enum PlaceCategId {
-       PLACE_CATEG_ID_NONE = 0,
-       PLACE_CATEG_ID_HOME = 1,
-       PLACE_CATEG_ID_WORK = 2,
-       PLACE_CATEG_ID_OTHER = 3
-};
-
-enum PlaceRecogMode {
-       PLACE_RECOG_HIGH_ACCURACY_MODE = 0,
-       PLACE_RECOG_LOW_POWER_MODE = 1
-};
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_TYPES_ */
diff --git a/src/place/recognition/user_places/debug_utils.cpp b/src/place/recognition/user_places/debug_utils.cpp
deleted file mode 100644 (file)
index b5fccf2..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "debug_utils.h"
-#include <Types.h>
-
-std::string ctx::DebugUtils::humanReadableDateTime(time_t timestamp, std::string format, size_t size, bool utc)
-{
-       struct tm * timeinfo;
-       if (utc) {
-               format += " UTC";
-               size += 4;
-               timeinfo = gmtime(&timestamp);
-       } else {
-               timeinfo = localtime(&timestamp);
-       }
-       char buffer[size];
-       if (timeinfo) {
-               strftime(buffer, size, format.c_str(), timeinfo);
-       } else {
-               snprintf(buffer, size, "NULL");
-       }
-       return std::string(buffer);
-}
diff --git a/src/place/recognition/user_places/debug_utils.h b/src/place/recognition/user_places/debug_utils.h
deleted file mode 100644 (file)
index dde40bc..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_DEBUG_UTILS_H_
-#define _CONTEXT_PLACE_RECOGNITION_DEBUG_UTILS_H_
-
-#include <string>
-#include <ctime>
-
-namespace ctx {
-
-       class DebugUtils {
-
-       public:
-               static std::string humanReadableDateTime(time_t timestamp, std::string format, size_t size, bool utc = false);
-
-       };      /* class DebugUtils */
-
-}      /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_DEBUG_UTILS_H_ */
diff --git a/src/place/recognition/user_places/gmap.cpp b/src/place/recognition/user_places/gmap.cpp
deleted file mode 100644 (file)
index 845b3cf..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "gmap.h"
-#include <iostream>
-#include <fstream>
-
-const std::string ctx::Gmap::__HTML_HEADER = R"(
-<!DOCTYPE html>
-<html>
-  <head>
-    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
-    <meta charset="utf-8">
-    <title>Simple markers</title>
-    <style>
-      html, body, #map-canvas {
-        height: 100%;
-        margin: 0px;
-        padding: 0px
-      }
-    </style>
-    <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=true"></script>
-    <script>
-function initialize() {
-  var mapOptions = {
-    zoom: 2,
-    center: new google.maps.LatLng(20,60)
-  }
-  var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
-)";
-
-const std::string ctx::Gmap::__HTML_FOOTER = R"(
-}
-
-google.maps.event.addDomListener(window, 'load', initialize);
-
-    </script>
-  </head>
-  <body>
-    <div id="map-canvas"></div>
-  </body>
-</html>
-)";
-
-std::string ctx::Gmap::__iconForCategId(PlaceCategId categId)
-{
-       switch (categId) {
-       case PLACE_CATEG_ID_HOME:  return "markerH.png";
-       case PLACE_CATEG_ID_WORK:  return "markerW.png";
-       case PLACE_CATEG_ID_OTHER: return "markerO.png";
-       case PLACE_CATEG_ID_NONE:  return "markerN.png";
-       default: return "markerD.png";
-       }
-}
-
-void ctx::Gmap::__placeMarker2Stream(const ctx::Place& place, std::ostream& out)
-{
-       if (place.locationValid) {
-               out << "new google.maps.Marker({" << std::endl;
-               out << "    position: new google.maps.LatLng(" << place.location.latitude << "," << place.location.longitude << ")," << std::endl;
-               out << "    map: map," << std::endl;
-               out << "    icon: \"http://maps.google.com/mapfiles/" << __iconForCategId(place.categId)<< "\"" << std::endl;
-               out << "});" << std::endl;
-       }
-}
-
-void ctx::Gmap::__html2Stream(const std::vector<std::shared_ptr<ctx::Place>>& places, std::ostream& out)
-{
-       out << __HTML_HEADER;
-       for (std::shared_ptr<ctx::Place> place : places) {
-               __placeMarker2Stream(*place, out);
-       }
-       out << __HTML_FOOTER;
-}
-
-void ctx::Gmap::writeMap(const std::vector<std::shared_ptr<ctx::Place>>& places)
-{
-       std::ofstream out(GMAP_FILE);
-       __html2Stream(places, out);
-}
diff --git a/src/place/recognition/user_places/gmap.h b/src/place/recognition/user_places/gmap.h
deleted file mode 100644 (file)
index 29eacd2..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_GMAP_H_
-#define _CONTEXT_PLACE_RECOGNITION_GMAP_H_
-
-#include "user_places_types.h"
-#include "../place_recognition_types.h"
-
-#define GMAP_FILE "/opt/usr/media/Others/user_places_map.html"
-
-namespace ctx {
-
-       /*
-        * Class for generating a HTML page with GoogleMaps with all user places.
-        * This class is for test/demo purposes only. TODO: Remove this class from final solution.
-        */
-       class Gmap {
-
-       private:
-               static const std::string __HTML_HEADER;
-               static const std::string __HTML_FOOTER;
-               static std::string __iconForCategId(PlaceCategId categId);
-               static void __placeMarker2Stream(const Place& place, std::ostream& out);
-               static void __html2Stream(const std::vector<std::shared_ptr<Place>>& places, std::ostream& out);
-
-       public:
-               static void writeMap(const std::vector<std::shared_ptr<Place>>& places);
-
-       };      /* class Gmap */
-
-}      /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_GMAP_H_ */
diff --git a/src/place/recognition/user_places/graph.cpp b/src/place/recognition/user_places/graph.cpp
deleted file mode 100644 (file)
index 53daeb3..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <memory>
-#include <queue>
-#include "graph.h"
-
-std::shared_ptr<ctx::graph::Components> ctx::graph::connectedComponents(Graph &graph)
-{
-       std::shared_ptr<Components> ccs = std::make_shared<Components>();
-       std::set<int> fringe;
-
-       for (Node i = 0; i < static_cast<Node>(graph.size()); i++) {
-               if (!graph[i]) {
-                       continue;
-               }
-               // neighbourhood of node i exists (was not removed)
-               std::shared_ptr<Component> c = std::make_shared<Component>();
-               ccs->push_back(c);
-               fringe.insert(i);
-               while (!fringe.empty()) {
-                       Node currNode = *fringe.begin();
-                       fringe.erase(fringe.begin());
-                       c->insert(currNode);
-
-                       std::shared_ptr<NeighbourNodes> currNhood = graph[currNode];
-                       for (Node nhoodNode : *currNhood) {
-                               if (graph[nhoodNode] && fringe.find(nhoodNode) == fringe.end()) {
-                                       fringe.insert(nhoodNode);
-                               }
-                       }
-                       graph[currNode].reset();  // removing current node
-               }
-       }
-       return ccs;
-}
diff --git a/src/place/recognition/user_places/graph.h b/src/place/recognition/user_places/graph.h
deleted file mode 100644 (file)
index 9fedb26..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_GRAPH_H_
-#define _CONTEXT_PLACE_RECOGNITION_GRAPH_H_
-
-#include <memory>
-#include <vector>
-#include <set>
-
-namespace ctx {
-
-namespace graph {
-
-       typedef int Node;
-       typedef std::set<Node> NeighbourNodes;
-       typedef std::vector<std::shared_ptr<NeighbourNodes>> Graph;
-       typedef std::set<Node> Component;
-       typedef std::vector<std::shared_ptr<Component>> Components;
-
-       /*
-        * make connected components of a given graph
-        * caution: the graph will be changed (its nodes will be cleared)
-        */
-       std::shared_ptr<Components> connectedComponents(Graph &graph);
-
-}      /* namespace graph */
-
-}      /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_GRAPH_H_ */
diff --git a/src/place/recognition/user_places/location_listener_iface.h b/src/place/recognition/user_places/location_listener_iface.h
deleted file mode 100644 (file)
index 914e022..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_LOCATION_LISTENER_IFACE_H_
-#define _CONTEXT_PLACE_RECOGNITION_LOCATION_LISTENER_IFACE_H_
-
-#include "user_places_types.h"
-
-namespace ctx {
-
-       class ILocationListener {
-
-       public:
-               virtual ~ILocationListener() {};
-               virtual void onNewLocation(LocationEvent location) = 0;
-
-       };      /* class ILocationListener */
-
-}      /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_LOCATION_LISTENER_IFACE_H_ */
diff --git a/src/place/recognition/user_places/location_logger.cpp b/src/place/recognition/user_places/location_logger.cpp
deleted file mode 100644 (file)
index 0994734..0000000
+++ /dev/null
@@ -1,617 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <sstream>
-#include <Types.h>
-#include <Json.h>
-#include <DatabaseManager.h>
-#include "../place_recognition_types.h"
-#include "user_places_params.h"
-#include "debug_utils.h"
-#include "location_logger.h"
-
-#ifdef TIZEN_ENGINEER_MODE
-#define __LOCATION_CREATE_TABLE_COLUMNS \
-       LOCATION_COLUMN_LATITUDE " REAL NOT NULL, "\
-       LOCATION_COLUMN_LONGITUDE " REAL NOT NULL, "\
-       LOCATION_COLUMN_ACCURACY " REAL, "\
-       LOCATION_COLUMN_TIMESTAMP " timestamp NOT NULL, "\
-       LOCATION_COLUMN_TIMESTAMP_HUMAN " TEXT, "\
-       LOCATION_COLUMN_METHOD " INTEGER "
-#else /* TIZEN_ENGINEER_MODE */
-#define __LOCATION_CREATE_TABLE_COLUMNS \
-       LOCATION_COLUMN_LATITUDE " REAL NOT NULL, "\
-       LOCATION_COLUMN_LONGITUDE " REAL NOT NULL, "\
-       LOCATION_COLUMN_ACCURACY " REAL, "\
-       LOCATION_COLUMN_TIMESTAMP " timestamp NOT NULL "
-#endif /* TIZEN_ENGINEER_MODE */
-
-#define __LOCATION_ERROR_LOG(error) { \
-       if (error != LOCATIONS_ERROR_NONE) { \
-               _E("ERROR == %s", __locationError2Str(error)); \
-       } else { \
-               _D("SUCCESS"); \
-       } \
-}
-
-void ctx::LocationLogger::__locationServiceStateChangedCb(location_service_state_e state, void *userData)
-{
-       ctx::LocationLogger* locationLogger = (ctx::LocationLogger *)userData;
-       locationLogger->__locationServiceState = state;
-       if (state == LOCATIONS_SERVICE_ENABLED) {
-               _D("LOCATIONS_SERVICE_ENABLED");
-               switch (locationLogger->__timerPurpose) {
-               case LOCATION_LOGGER_WAITING_FOR_SERVICE_START:
-                       _D("Waiting for location service start FINISHED");
-                       locationLogger->__timerStop();
-                       locationLogger->__locationRequest();
-                       break;
-               case LOCATION_LOGGER_WAITING_FOR_ACTIVE_REQUEST:
-               case LOCATION_LOGGER_WAITING_FOR_LOCATION_METHOD_SETTING_ON:
-               case LOCATION_LOGGER_WAITING_FOR_ACTIVE_INTERVAL:
-               case LOCATION_LOGGER_WAITING_FOR_PASSIVE_INTERVAL:
-               default:
-                       // Do nothing
-                       break;
-               }
-       } else {
-               _D("LOCATIONS_SERVICE_DISABLED");
-//             locationLogger->__timerStop();
-       }
-}
-
-void ctx::LocationLogger::__locationSettingChangedCb(location_method_e method, bool enable, void *userData)
-{
-       ctx::LocationLogger* locationLogger = (ctx::LocationLogger *)userData;
-       locationLogger->__locationMethodState = enable;
-       if (method == locationLogger->__locationMethod) {
-               if (enable) {
-                       _D("Location method settings ON");
-                       switch (locationLogger->__timerPurpose) {
-                       case LOCATION_LOGGER_WAITING_FOR_LOCATION_METHOD_SETTING_ON:
-                               _D("Waiting for location method settings on FINISHED");
-                               if (locationLogger->__locationServiceState == LOCATIONS_SERVICE_ENABLED) {
-                                       locationLogger->__timerStop();
-                                       locationLogger->__locationRequest();
-                               } else {
-                                       locationLogger->__locationManagerStart();
-                               }
-                               break;
-                       case LOCATION_LOGGER_WAITING_FOR_SERVICE_START:
-                       case LOCATION_LOGGER_WAITING_FOR_ACTIVE_REQUEST:
-                       case LOCATION_LOGGER_WAITING_FOR_ACTIVE_INTERVAL:
-                       case LOCATION_LOGGER_WAITING_FOR_PASSIVE_INTERVAL:
-                       default:
-                               // Do nothing
-                               break;
-                       }
-               } else {
-                       _D("Location method settings OFF");
-//                     locationLogger->__timerStop();
-               }
-       }
-}
-
-void ctx::LocationLogger::__positionUpdatedCb(double latitude, double longitude,
-               double altitude, time_t timestamp, void *userData)
-{
-       _D("");
-       ctx::LocationLogger* locationLogger = (ctx::LocationLogger *)userData;
-       double horizontal = locationLogger->__locationManagerGetHorizontalAccuracy();
-#ifdef TIZEN_ENGINEER_MODE
-       ctx::LocationEvent location(latitude, longitude, horizontal, timestamp, LOCATION_METHOD_REQUEST);
-#else /* TIZEN_ENGINEER_MODE */
-       ctx::LocationEvent location(latitude, longitude, horizontal, timestamp);
-#endif /* TIZEN_ENGINEER_MODE */
-       locationLogger->__broadcast(location);
-       locationLogger->__onActiveRequestSucceeded();
-}
-
-void ctx::LocationLogger::__locationUpdatedCb(location_error_e error, double latitude, double longitude,
-               double altitude, time_t timestamp, double speed, double direction, double climb, void *userData)
-{
-       _D("");
-       __positionUpdatedCb(latitude, longitude, altitude, timestamp, userData);
-}
-
-const char* ctx::LocationLogger::__locationError2Str(int error)
-{
-       switch (error) {
-       case LOCATIONS_ERROR_NONE:
-               return "LOCATIONS_ERROR_NONE";
-       case LOCATIONS_ERROR_OUT_OF_MEMORY:
-               return "LOCATIONS_ERROR_OUT_OF_MEMORY";
-       case LOCATIONS_ERROR_INVALID_PARAMETER:
-               return "LOCATIONS_ERROR_INVALID_PARAMETER";
-       case LOCATIONS_ERROR_ACCESSIBILITY_NOT_ALLOWED:
-               return "LOCATIONS_ERROR_ACCESSIBILITY_NOT_ALLOWED";
-       case LOCATIONS_ERROR_NOT_SUPPORTED:
-               return "LOCATIONS_ERROR_NOT_SUPPORTED";
-       case LOCATIONS_ERROR_INCORRECT_METHOD:
-               return "LOCATIONS_ERROR_INCORRECT_METHOD";
-       case LOCATIONS_ERROR_NETWORK_FAILED:
-               return "LOCATIONS_ERROR_NETWORK_FAILED";
-       case LOCATIONS_ERROR_SERVICE_NOT_AVAILABLE:
-               return "LOCATIONS_ERROR_SERVICE_NOT_AVAILABLE";
-       case LOCATIONS_ERROR_GPS_SETTING_OFF:
-               return "LOCATIONS_ERROR_GPS_SETTING_OFF";
-       case LOCATIONS_ERROR_SECURITY_RESTRICTED:
-               return "LOCATIONS_ERROR_SECURITY_RESTRICTED";
-       default:
-               return "unknown location error code";
-       }
-}
-
-
-void ctx::LocationLogger::__log(location_accessibility_state_e state)
-{
-       switch (state) {
-       case LOCATIONS_ACCESS_STATE_NONE : // Access state is not determined
-               _D("LOCATIONS_ACCESS_STATE_NONE ");
-               break;
-       case LOCATIONS_ACCESS_STATE_DENIED: // Access denied
-               _D("LOCATIONS_ACCESS_STATE_DENIED");
-               break;
-       case LOCATIONS_ACCESS_STATE_ALLOWED: // Access authorized
-               _D("LOCATIONS_ACCESS_STATE_ALLOWED");
-               break;
-       default:
-               break;
-       }
-}
-
-int ctx::LocationLogger::__dbCreateTable()
-{
-       ctx::DatabaseManager dbManager;
-       bool ret = dbManager.createTable(0, LOCATION_TABLE_NAME, __LOCATION_CREATE_TABLE_COLUMNS, NULL, NULL);
-       _D("%s -> Table Creation Request", ret ? "SUCCESS" : "FAIL");
-       return 0;
-}
-
-int ctx::LocationLogger::__dbInsertLog(LocationEvent locationEvent)
-{
-       Json data;
-       data.set(NULL, LOCATION_COLUMN_LATITUDE, locationEvent.coordinates.latitude);
-       data.set(NULL, LOCATION_COLUMN_LONGITUDE, locationEvent.coordinates.longitude);
-       data.set(NULL, LOCATION_COLUMN_ACCURACY, locationEvent.coordinates.accuracy);
-       data.set(NULL, LOCATION_COLUMN_TIMESTAMP, static_cast<int>(locationEvent.timestamp));
-#ifdef TIZEN_ENGINEER_MODE
-       std::string timeHuman = DebugUtils::humanReadableDateTime(locationEvent.timestamp, "%F %T", 80);
-       data.set(NULL, LOCATION_COLUMN_TIMESTAMP_HUMAN, timeHuman);
-       data.set(NULL, LOCATION_COLUMN_METHOD, static_cast<int>(locationEvent.method));
-#endif /* TIZEN_ENGINEER_MODE */
-
-       ctx::DatabaseManager dbManager;
-       int64_t rowId;
-       bool ret = dbManager.insertSync(LOCATION_TABLE_NAME, data, &rowId);
-       _D("%s -> DB: location table insert result", ret ? "SUCCESS" : "FAIL");
-       return ret;
-}
-
-ctx::LocationLogger::LocationLogger(ILocationListener *listener, bool testMode) :
-       __listener(listener),
-       __testMode(testMode),
-       __activeRequestAttempts(0),
-       __activeAttempts(0),
-       __allAttempts(0),
-       __locationCount(0),
-       __activeRequestSucceeded(false),
-       __activeLocationSucceeded(false),
-       __timerId(-1),
-       __timerTimestamp(0),
-       __timerPurpose(LOCATION_LOGGER_WAITING_FOR_PASSIVE_INTERVAL),
-       __locationServiceState(LOCATIONS_SERVICE_DISABLED),
-       __locationMethod(LOCATION_LOGGER_METHOD),
-       __locationMethodState(false)
-{
-       _D("CONSTRUCTOR");
-
-       __locationManagerCreate();
-
-       if (__testMode) {
-               return;
-       }
-       if (LOCATION_LOGGER_DATABASE) {
-               __dbCreateTable();
-       }
-
-       __locationManagerSetServiceStateChangedCb();
-       __locationManagerSetSettingChangedCb();
-       __locationMethodState = __locationManagerIsEnabledMethod(__locationMethod);
-}
-
-ctx::LocationLogger::~LocationLogger()
-{
-       _D("DESTRUCTOR");
-       __stopLogging();
-       __locationManagerUnsetServiceStateChangedCb();
-       __locationManagerUnsetSettingChangedCb();
-       __locationManagerDestroy();
-}
-
-void ctx::LocationLogger::__locationManagerCreate()
-{
-       int ret = location_manager_create(__locationMethod, &__locationManager);
-       __LOCATION_ERROR_LOG(ret);
-}
-
-void ctx::LocationLogger::__locationManagerDestroy()
-{
-       int ret = location_manager_destroy(__locationManager);
-       __LOCATION_ERROR_LOG(ret);
-}
-
-void ctx::LocationLogger::__locationManagerSetServiceStateChangedCb()
-{
-       int ret = location_manager_set_service_state_changed_cb(__locationManager, __locationServiceStateChangedCb, this);
-       __LOCATION_ERROR_LOG(ret);
-}
-
-void ctx::LocationLogger::__locationManagerUnsetServiceStateChangedCb()
-{
-       int ret = location_manager_unset_service_state_changed_cb(__locationManager);
-       __LOCATION_ERROR_LOG(ret);
-}
-
-void ctx::LocationLogger::__locationManagerStart()
-{
-       int ret = location_manager_start(__locationManager);
-       __LOCATION_ERROR_LOG(ret);
-       __startServiceTimerStart();
-}
-
-void ctx::LocationLogger::__locationManagerStop()
-{
-       int ret = location_manager_stop(__locationManager);
-       __LOCATION_ERROR_LOG(ret);
-}
-
-double ctx::LocationLogger::__locationManagerGetHorizontalAccuracy()
-{
-       location_accuracy_level_e accuracyLevel;
-       double horizontal, vertical;
-       int ret = location_manager_get_accuracy(__locationManager, &accuracyLevel, &horizontal, &vertical);
-       __LOCATION_ERROR_LOG(ret);
-       return horizontal;
-}
-
-location_accessibility_state_e ctx::LocationLogger::__locationManagerGetAccessibilityState()
-{
-       location_accessibility_state_e state;
-       int ret = location_manager_get_accessibility_state(&state);
-       __LOCATION_ERROR_LOG(ret);
-       return state;
-}
-
-void ctx::LocationLogger::__locationManagerSetSettingChangedCb()
-{
-       int ret = location_manager_set_setting_changed_cb(__locationMethod, __locationSettingChangedCb, this);
-       __LOCATION_ERROR_LOG(ret);
-}
-
-void ctx::LocationLogger::__locationManagerUnsetSettingChangedCb()
-{
-       int ret = location_manager_unset_setting_changed_cb(__locationMethod);
-       __LOCATION_ERROR_LOG(ret);
-}
-
-bool ctx::LocationLogger::__locationManagerRequestSingleLocation()
-{
-       int ret = location_manager_request_single_location(__locationManager,
-                       LOCATION_LOGGER_ACTIVE_REQUEST_TIMEOUT_SECONDS, __locationUpdatedCb, this);
-       _D("%s (seconds=%d) ----- ATTEMPTS: REQ[%d/%d], ACT[%d/%d], ALL[%d/%d]; ----- LOCATIONS:[%d/%d]",
-                       ret == LOCATIONS_ERROR_NONE ? "SUCCESS" : "ERROR",
-                       LOCATION_LOGGER_ACTIVE_REQUEST_TIMEOUT_SECONDS,
-                       __activeRequestAttempts,
-                       LOCATION_LOGGER_MAX_ACTIVE_REQUEST_ATTEMPTS,
-                       __activeAttempts,
-                       LOCATION_LOGGER_MAX_ACTIVE_LOCATION_ATTEMPTS,
-                       __allAttempts,
-                       LOCATION_LOGGER_MAX_LOCATION_ATTEMPTS,
-                       __locationCount,
-                       LOCATION_LOGGER_MAX_LOCATION_COUNT);
-       __LOCATION_ERROR_LOG(ret);
-       __activeRequestAttempts++;
-       __activeAttempts++;
-       __allAttempts++;
-       if (ret == LOCATIONS_ERROR_NONE) {
-               __activeRequestTimerStart();
-               return true;
-       } else {
-               return false;
-       }
-}
-
-bool ctx::LocationLogger::__locationManagerGetLocation()
-{
-       double altitude, latitude, longitude, climb, direction, speed, horizontal, vertical;
-       location_accuracy_level_e level;
-       time_t timestamp;
-       int ret = location_manager_get_location(__locationManager, &altitude, &latitude, &longitude,
-                       &climb, &direction, &speed, &level, &horizontal, &vertical, &timestamp);
-       _D("%s ----- ATTEMPTS: REQ[%d/%d], ACT[%d/%d], ALL[%d/%d]; ----- LOCATIONS:[%d/%d]",
-                       ret == LOCATIONS_ERROR_NONE ? "SUCCESS" : "ERROR",
-                       __activeRequestAttempts,
-                       LOCATION_LOGGER_MAX_ACTIVE_REQUEST_ATTEMPTS,
-                       __activeAttempts,
-                       LOCATION_LOGGER_MAX_ACTIVE_LOCATION_ATTEMPTS,
-                       __allAttempts,
-                       LOCATION_LOGGER_MAX_LOCATION_ATTEMPTS,
-                       __locationCount,
-                       LOCATION_LOGGER_MAX_LOCATION_COUNT);
-       __LOCATION_ERROR_LOG(ret);
-       __activeAttempts++;
-       __allAttempts++;
-       if (ret == LOCATIONS_ERROR_NONE) {
-#ifdef TIZEN_ENGINEER_MODE
-               ctx::LocationEvent location(latitude, longitude, horizontal, timestamp, LOCATION_METHOD_GET_LOCATION);
-#else /* TIZEN_ENGINEER_MODE */
-               ctx::LocationEvent location(latitude, longitude, horizontal, timestamp);
-#endif /* TIZEN_ENGINEER_MODE */
-               __broadcast(location);
-               __onActiveLocationSucceeded();
-               return true;
-       } else {
-               return false;
-       }
-}
-
-void ctx::LocationLogger::__locationManagerGetLastLocation()
-{
-       double altitude, latitude, longitude, climb, direction, speed, horizontal, vertical;
-       location_accuracy_level_e level;
-       time_t timestamp;
-       int ret = location_manager_get_last_location(__locationManager, &altitude, &latitude, &longitude,
-                       &climb, &direction, &speed, &level, &horizontal, &vertical, &timestamp);
-       _D("%s ----- ATTEMPTS: REQ[%d/%d], ACT[%d/%d], ALL[%d/%d]; ----- LOCATIONS:[%d/%d]",
-                       ret == LOCATIONS_ERROR_NONE ? "SUCCESS" : "ERROR",
-                       __activeRequestAttempts,
-                       LOCATION_LOGGER_MAX_ACTIVE_REQUEST_ATTEMPTS,
-                       __activeAttempts,
-                       LOCATION_LOGGER_MAX_ACTIVE_LOCATION_ATTEMPTS,
-                       __allAttempts,
-                       LOCATION_LOGGER_MAX_LOCATION_ATTEMPTS,
-                       __locationCount,
-                       LOCATION_LOGGER_MAX_LOCATION_COUNT);
-       __LOCATION_ERROR_LOG(ret);
-       __allAttempts++;
-       if (ret == LOCATIONS_ERROR_NONE) {
-#ifdef TIZEN_ENGINEER_MODE
-               ctx::LocationEvent location(latitude, longitude, horizontal, timestamp, LOCATION_METHOD_GET_LAST_LOCATION);
-#else /* TIZEN_ENGINEER_MODE */
-               ctx::LocationEvent location(latitude, longitude, horizontal, timestamp);
-#endif /* TIZEN_ENGINEER_MODE */
-               __broadcast(location);
-       }
-}
-
-bool ctx::LocationLogger::__locationManagerIsEnabledMethod(location_method_e method)
-{
-       bool enable;
-       int ret = location_manager_is_enabled_method(method, &enable);
-       __LOCATION_ERROR_LOG(ret);
-       return enable;
-}
-
-bool ctx::LocationLogger::__checkGeneralLimits()
-{
-       return (__locationCount < LOCATION_LOGGER_MAX_LOCATION_COUNT
-                       && __allAttempts < LOCATION_LOGGER_MAX_LOCATION_ATTEMPTS);
-}
-
-bool ctx::LocationLogger::__checkActiveLimits()
-{
-       return (!__activeLocationSucceeded
-                       && __activeAttempts < LOCATION_LOGGER_MAX_ACTIVE_LOCATION_ATTEMPTS);
-}
-
-bool ctx::LocationLogger::__checkActiveRequestLimits()
-{
-       return (!__activeRequestSucceeded
-                       && __activeRequestAttempts < LOCATION_LOGGER_MAX_ACTIVE_REQUEST_ATTEMPTS);
-}
-
-void ctx::LocationLogger::__locationRequest()
-{
-       _D("");
-       bool requestSingleLocationRet = false;
-       bool getLocationRet = false;
-       if (__checkGeneralLimits() && __checkActiveLimits() && __checkActiveRequestLimits()) {
-               requestSingleLocationRet = __locationManagerRequestSingleLocation();
-       }
-       if (__checkGeneralLimits() && __checkActiveLimits() && !requestSingleLocationRet) {
-               getLocationRet = __locationManagerGetLocation();
-       }
-       if (__checkGeneralLimits() && !requestSingleLocationRet && !getLocationRet
-                       && __activeAttempts >= LOCATION_LOGGER_MAX_ACTIVE_LOCATION_ATTEMPTS) {
-               __locationManagerGetLastLocation();
-       }
-       if (!requestSingleLocationRet) {
-               __locationManagerStop();
-               __setNextTimer();
-       }
-}
-
-void ctx::LocationLogger::__setNextTimer()
-{
-       _D("ATTEMPTS: REQ[%d/%d], ACT[%d/%d], ALL[%d/%d]; ----- LOCATIONS:[%d/%d])",
-                       __activeRequestAttempts,
-                       LOCATION_LOGGER_MAX_ACTIVE_REQUEST_ATTEMPTS,
-                       __activeAttempts,
-                       LOCATION_LOGGER_MAX_ACTIVE_LOCATION_ATTEMPTS,
-                       __allAttempts,
-                       LOCATION_LOGGER_MAX_LOCATION_ATTEMPTS,
-                       __locationCount,
-                       LOCATION_LOGGER_MAX_LOCATION_COUNT);
-       if (__checkGeneralLimits()) {
-               if (__checkActiveLimits()) {
-                       __activeIntervalTimerStart();
-               } else {
-                       __passiveIntervalTimerStart();
-               }
-       }
-}
-
-void ctx::LocationLogger::__onActiveRequestSucceeded()
-{
-       _D("");
-       __locationManagerStop();
-       __activeRequestSucceeded = true;
-       __onActiveLocationSucceeded();
-}
-
-void ctx::LocationLogger::__onActiveLocationSucceeded()
-{
-       _D("");
-       __activeLocationSucceeded = true;
-}
-
-void ctx::LocationLogger::__broadcast(ctx::LocationEvent locationEvent)
-{
-       _D("");
-       __locationCount++;
-       if (__listener) {
-               __listener->onNewLocation(locationEvent);
-       }
-       if (LOCATION_LOGGER_DATABASE) {
-               __dbInsertLog(locationEvent);
-       }
-}
-
-bool ctx::LocationLogger::onTimerExpired(int id)
-{
-       time_t now = time(nullptr);
-       double seconds = difftime(now, __timerTimestamp);
-
-       switch (__timerPurpose) {
-       case LOCATION_LOGGER_WAITING_FOR_ACTIVE_REQUEST:
-               _D("Active request FAILED, timerId = %d[%d], from start = %.1fs", id, __timerId, seconds);
-               __locationManagerStop();
-               __setNextTimer();
-               return false;
-       case LOCATION_LOGGER_WAITING_FOR_SERVICE_START:
-               _D("Service start in timeout time FAILED, timerId = %d[%d], from start = %.1fs", id, __timerId, seconds);
-               // Waiting for service start FAILURE is also some kind of active request attempt
-               __activeRequestAttempts++;
-               __activeAttempts++;
-               __allAttempts++;
-               __locationManagerStop();
-               __setNextTimer();
-               return false;
-       case LOCATION_LOGGER_WAITING_FOR_LOCATION_METHOD_SETTING_ON:
-               _D("Still waiting for Location method settings on, timerId = %d[%d], from start = %.1fs", id, __timerId, seconds);
-               // Do nothing
-               return false;
-       case LOCATION_LOGGER_WAITING_FOR_ACTIVE_INTERVAL:
-               _D("Active interval time expired, timerId = %d[%d], from start = %.1fs", id, __timerId, seconds);
-               break;
-       case LOCATION_LOGGER_WAITING_FOR_PASSIVE_INTERVAL:
-               _D("Passive interval time expired, timerId = %d[%d], from start = %.1fs", id, __timerId, seconds);
-               break;
-       default:
-               _D("Do nothing, timerId = %d[%d], from start = %.1fs", id, __timerId, seconds);
-               return false;
-       }
-       if (__locationMethodState) {
-               __locationManagerStart();
-       } else {
-               __timerPurpose = LOCATION_LOGGER_WAITING_FOR_LOCATION_METHOD_SETTING_ON;
-               _D("LOCATION_LOGGER_WAITING_FOR_LOCATION_METHOD_SETTING_ON");
-       }
-       return false;
-}
-
-void ctx::LocationLogger::__activeRequestTimerStart()
-{
-       int minutes = LOCATION_LOGGER_ACTIVE_REQUEST_TIMEOUT_SECONDS / 60;
-       if (LOCATION_LOGGER_ACTIVE_REQUEST_TIMEOUT_SECONDS % 60) {
-               minutes++;
-       }
-       __timerPurpose = LOCATION_LOGGER_WAITING_FOR_ACTIVE_REQUEST;
-       _D("LOCATION_LOGGER_WAITING_FOR_ACTIVE_REQUEST (minutes=%d)", minutes);
-       __timerStart(minutes);
-}
-
-void ctx::LocationLogger::__startServiceTimerStart()
-{
-       __timerPurpose = LOCATION_LOGGER_WAITING_FOR_SERVICE_START;
-       _D("LOCATION_LOGGER_WAITING_FOR_SERVICE_START");
-       __timerStart(LOCATION_LOGGER_SERVICE_START_TIMEOUT_MINUTES);
-}
-
-void ctx::LocationLogger::__activeIntervalTimerStart()
-{
-       __timerPurpose = LOCATION_LOGGER_WAITING_FOR_ACTIVE_INTERVAL;
-       _D("LOCATION_LOGGER_WAITING_FOR_ACTIVE_INTERVAL");
-       __timerStart(LOCATION_LOGGER_ACTIVE_INTERVAL_MINUTES);
-}
-
-void ctx::LocationLogger::__passiveIntervalTimerStart()
-{
-       __timerPurpose = LOCATION_LOGGER_WAITING_FOR_PASSIVE_INTERVAL;
-       _D("LOCATION_LOGGER_WAITING_FOR_PASSIVE_INTERVAL");
-       __timerStart(LOCATION_LOGGER_PASSIVE_INTERVAL_MINUTES);
-}
-
-void ctx::LocationLogger::__timerStart(time_t minutes)
-{
-       __timerTimestamp = time(nullptr);
-       __timerId = __timerManager.setFor(minutes, this);
-       _D("%s (minutes=%d) timerId = %d", __timerId >= 0 ? "SUCCESS" : "ERROR", minutes, __timerId);
-}
-
-void ctx::LocationLogger::__timerStop()
-{
-       _D("");
-       __timerManager.remove(__timerId);
-}
-
-void ctx::LocationLogger::__startLogging()
-{
-       _D("");
-       __activeRequestAttempts = 0;
-       __activeAttempts = 0;
-       __allAttempts = 0;
-       __locationCount = 0;
-       __activeRequestSucceeded = false;;
-       __activeLocationSucceeded = false;
-       __locationManagerStart();
-}
-
-void ctx::LocationLogger::__stopLogging()
-{
-       _D("");
-       __timerStop();
-       __locationManagerStop();
-}
-
-void ctx::LocationLogger::onVisitStart()
-{
-       _D("");
-       if (!__testMode) {
-               __startLogging();
-       }
-}
-
-void ctx::LocationLogger::onVisitEnd()
-{
-       _D("");
-       if (!__testMode) {
-               __stopLogging();
-       }
-}
-
-#undef __LOCATION_ERROR_LOG
diff --git a/src/place/recognition/user_places/location_logger.h b/src/place/recognition/user_places/location_logger.h
deleted file mode 100644 (file)
index ae4c9bd..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_LOCATION_LOGGER_H_
-#define _CONTEXT_PLACE_RECOGNITION_LOCATION_LOGGER_H_
-
-#include <locations.h>
-#include <TimerManager.h>
-#include "visit_listener_iface.h"
-#include "location_listener_iface.h"
-
-/* Database usage flag */
-#define LOCATION_LOGGER_DATABASE false // TODO: false in final solution
-
-/* Locations measure method */
-#define LOCATION_LOGGER_METHOD LOCATIONS_METHOD_HYBRID
-
-/* TIMEOUTS: Location active measure request timeout (in seconds). */
-#define LOCATION_LOGGER_ACTIVE_REQUEST_TIMEOUT_SECONDS 100
-
-/* TIMEOUTS: Location service start timeout (in minutes). */
-#define LOCATION_LOGGER_SERVICE_START_TIMEOUT_MINUTES 2
-
-/* FREQUENCIES/INTERVALS: "Active" measure attempts frequency (in minutes) */
-#define LOCATION_LOGGER_ACTIVE_INTERVAL_MINUTES 5
-
-/* FREQUENCIES/INTERVALS: "Passive" measure attempts frequency (in minutes) */
-#define LOCATION_LOGGER_PASSIVE_INTERVAL_MINUTES 30
-
-/* ATTEMTS LIMITS: "Active" request attempts limit (must be <= than active location attempts) */
-#define LOCATION_LOGGER_MAX_ACTIVE_REQUEST_ATTEMPTS 0
-
-/* ATTEMTS LIMITS: "Active" measures attempts limit (must be <= than all attempts limit) */
-#define LOCATION_LOGGER_MAX_ACTIVE_LOCATION_ATTEMPTS 2
-
-/* ATTEMTS LIMITS: All attempts ("active" + "passive") limit */
-#define LOCATION_LOGGER_MAX_LOCATION_ATTEMPTS 3
-
-/* LOCATION LIMIT: Location count limit per visit */
-#define LOCATION_LOGGER_MAX_LOCATION_COUNT 3
-
-namespace ctx {
-
-       enum TimerPurpose {
-               LOCATION_LOGGER_WAITING_FOR_ACTIVE_REQUEST = 0,
-               LOCATION_LOGGER_WAITING_FOR_SERVICE_START = 1,
-               LOCATION_LOGGER_WAITING_FOR_LOCATION_METHOD_SETTING_ON = 2,
-               LOCATION_LOGGER_WAITING_FOR_ACTIVE_INTERVAL = 3,
-               LOCATION_LOGGER_WAITING_FOR_PASSIVE_INTERVAL = 4
-       };
-
-       class LocationLogger : public ITimerListener, public IVisitListener {
-
-       public:
-               LocationLogger(ILocationListener *listener = nullptr, bool testMode = false);
-               ~LocationLogger();
-
-       private:
-               /* INPUT */
-               void onVisitStart();
-               void onVisitEnd();
-
-               /* OUTPUT */
-               ILocationListener * const __listener;
-               void __broadcast(LocationEvent locationEvent);
-
-               /* INTERNAL */
-               bool __testMode;
-               void __startLogging();
-               void __stopLogging();
-               void __locationRequest();
-               void __onActiveRequestSucceeded();
-               void __onActiveLocationSucceeded();
-
-               /* INTERNAL : COUNTERS (LIMITS) */
-               int __activeRequestAttempts;
-               int __activeAttempts;
-               int __allAttempts;
-               int __locationCount;
-               bool __checkGeneralLimits();
-               bool __checkActiveLimits();
-               bool __checkActiveRequestLimits();
-
-               /* INTERNAL : FLAGS */
-               bool __activeRequestSucceeded;
-               bool __activeLocationSucceeded;
-
-               /* TIMER */
-               int __timerId;
-               time_t __timerTimestamp;
-               TimerManager __timerManager;
-               TimerPurpose __timerPurpose;
-               void __setNextTimer();
-               void __activeRequestTimerStart();
-               void __startServiceTimerStart();
-               void __activeIntervalTimerStart();
-               void __passiveIntervalTimerStart();
-               void __timerStart(time_t minutes);
-               void __timerStop();
-               bool onTimerExpired(int timerId);
-
-               /* DATABASE */
-               static int __dbCreateTable();
-               int __dbInsertLog(LocationEvent locationEvent);
-
-               /* DEBUG */
-               static const char* __locationError2Str(int error);
-               static void __log(location_accessibility_state_e state);
-
-               /* LOCATION MANAGER */
-               location_manager_h __locationManager;
-               void __locationManagerCreate();
-               void __locationManagerDestroy();
-               void __locationManagerStart();
-               void __locationManagerStop();
-               location_accessibility_state_e __locationManagerGetAccessibilityState();
-
-               /* LOCATION MANAGER : LOCATION SERVICE STATE */
-               location_service_state_e __locationServiceState;
-               static void __locationServiceStateChangedCb(location_service_state_e state, void *userData);
-               void __locationManagerSetServiceStateChangedCb();
-               void __locationManagerUnsetServiceStateChangedCb();
-
-               /* LOCATION MANAGER : LOCATION METHOD SETTINGS */
-               location_method_e __locationMethod;
-               bool __locationMethodState;
-               bool __locationManagerIsEnabledMethod(location_method_e method);
-               static void __locationSettingChangedCb(location_method_e method, bool enable, void *userData);
-               void __locationManagerSetSettingChangedCb();
-               void __locationManagerUnsetSettingChangedCb();
-
-               /* LOCATION MANAGER : LOCATION */
-               double __locationManagerGetHorizontalAccuracy();
-
-               /* LOCATION MANAGER : LOCATION : SYNCHRONOUS */
-               bool __locationManagerGetLocation();
-               void __locationManagerGetLastLocation();
-
-               /* LOCATION MANAGER : LOCATION : ASYNCHRONOUS */
-               static void __positionUpdatedCb(double latitude, double longitude,
-                               double altitude, time_t timestamp, void *userData);
-               static void __locationUpdatedCb(location_error_e error, double latitude,
-                               double longitude, double altitude, time_t timestamp, double speed,
-                               double direction, double climb, void *userData);
-               bool __locationManagerRequestSingleLocation();
-
-       };      /* class LocationLogger */
-
-}      /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_LOCATION_LOGGER_H_ */
diff --git a/src/place/recognition/user_places/mahal.cpp b/src/place/recognition/user_places/mahal.cpp
deleted file mode 100644 (file)
index ccc7f9f..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "mahal.h"
-#include <math.h>
-#include <Types.h>
-
-ctx::num_t ctx::MahalModel::distance(const std::vector<num_t> &v1, const std::vector<num_t> &v2, const std::vector<num_t> &m)
-{
-       size_t n = v1.size();
-       if (m.size() != n * n) {
-               _E("m.size() != n * n");
-               return 0.0; // this value does not make any sense
-       }
-
-       std::vector<num_t> diff(n);
-       for (size_t i = 0; i < n; i++) {
-               diff[i] = v2[i] - v1[i];
-       }
-
-       num_t dist2 = 0; // squared distance
-       for (size_t j = 0; j < n; j++) {
-               for (size_t i = 0; i < n; i++) {
-                       dist2 += m[i * n + j] * diff[i] * diff[j];
-               }
-       }
-       return sqrt(dist2);
-}
-
-ctx::num_t ctx::MahalModel::distance(const std::vector<ctx::num_t> &v)
-{
-       return distance(v, __mean, __sigma);
-}
diff --git a/src/place/recognition/user_places/mahal.h b/src/place/recognition/user_places/mahal.h
deleted file mode 100644 (file)
index 9e733c7..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_MAHAL_H_
-#define _CONTEXT_PLACE_RECOGNITION_MAHAL_H_
-
-#include <vector>
-#include "user_places_types.h"
-
-namespace ctx {
-
-       /*
-        * Class for Mahalanobis distance computation.
-        */
-       class MahalModel {
-
-       private:
-               std::vector<num_t> __mean;
-               std::vector<num_t> __sigma; // represents square matrix row-wise
-
-       public:
-               static num_t distance(const std::vector<num_t> &v1, const std::vector<num_t> &v2, const std::vector<num_t> &m);
-               MahalModel(std::vector<num_t> mean, std::vector<num_t> sigma) :
-                       __mean(mean),
-                       __sigma(sigma) { }
-               num_t distance(const std::vector<num_t> &v);
-
-       };      /* class MahalModel */
-
-}      /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_MAHAL_H_ */
diff --git a/src/place/recognition/user_places/median.cpp b/src/place/recognition/user_places/median.cpp
deleted file mode 100644 (file)
index f0463b3..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <algorithm>
-#include <Types.h>
-#include "median.h"
-
-ctx::num_t ctx::median(std::vector<ctx::num_t> &v)
-{
-       if (v.empty()) {
-               _E("Median of empty set");
-               return 0; // this value does not make any sense
-       }
-       size_t n = v.size() / 2;
-       std::nth_element(v.begin(), v.begin() + n, v.end());
-       num_t vn = v[n];
-       if (v.size() % 2 == 1) {
-               return vn;
-       } else {
-               std::nth_element(v.begin(), v.begin() + n - 1, v.end());
-               return 0.5 * (vn + v[n - 1]);
-       }
-}
diff --git a/src/place/recognition/user_places/median.h b/src/place/recognition/user_places/median.h
deleted file mode 100644 (file)
index 70461ae..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_MEDIAN_
-#define _CONTEXT_PLACE_RECOGNITION_MEDIAN_
-
-#include "user_places_types.h"
-#include <vector>
-#include "../place_recognition_types.h"
-
-namespace ctx {
-
-       num_t median(std::vector<num_t> &values); // caution: the input vector will be sorted
-
-} /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_MEDIAN_ */
diff --git a/src/place/recognition/user_places/piecewise_lin.cpp b/src/place/recognition/user_places/piecewise_lin.cpp
deleted file mode 100644 (file)
index 638af66..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "piecewise_lin.h"
-#include <Types.h>
-
-ctx::PiecewiseLin::PiecewiseLin(std::vector<num_t> xs, std::vector<num_t> vs) :
-       __xs(xs),
-       __vs(vs),
-       __n(xs.size())
-{
-       if (xs.size() != vs.size()) {
-               _E("Input arguments have different sizes");
-               return;
-       }
-}
-
-ctx::num_t ctx::PiecewiseLin::value(num_t x)
-{
-       if (x <= __xs[0]) {
-               return __vs[0];
-       } else if (x >= __xs[__n-1]) {
-               return __vs[__n - 1];
-       } else {
-               num_t xp = __xs[0];
-               for (size_t i = 1; i < __n; i++) {
-                       num_t xn = __xs[i];
-                       if (x <= xn) {
-                               num_t d = xn - xp;
-                               num_t dxp = x - xp;
-                               num_t dxn = xn - x;
-                               return (dxn * __vs[i-1] + dxp * __vs[i]) / d;
-                       }
-                       xp = xn;
-               }
-       }
-       _E("Function should return result earlier");
-       return 0.0; // this value does not make any sense
-}
diff --git a/src/place/recognition/user_places/piecewise_lin.h b/src/place/recognition/user_places/piecewise_lin.h
deleted file mode 100644 (file)
index 0ef4bff..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_PIECEWISE_LIN_
-#define _CONTEXT_PLACE_RECOGNITION_PIECEWISE_LIN_
-
-#include "user_places_types.h"
-
-namespace ctx {
-
-       /*
-        * Piecewise linear function. Used for approximation.
-        */
-       class PiecewiseLin {
-
-       private:
-               std::vector<num_t> __xs; // nodes
-               std::vector<num_t> __vs; // values in nodes
-               size_t __n;
-
-       public:
-               PiecewiseLin(std::vector<num_t> xs, std::vector<num_t> vs);
-               num_t value(num_t x);
-
-       };      /* PiecewiseLin */
-
-}      /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_PIECEWISE_LIN_ */
diff --git a/src/place/recognition/user_places/place_categer.cpp b/src/place/recognition/user_places/place_categer.cpp
deleted file mode 100644 (file)
index 1b4c975..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "place_categer.h"
-#include "median.h"
-#include "../place_recognition_types.h"
-#include "user_places_params.h"
-#include "user_places_types.h"
-#include <algorithm>
-#include <Types.h>
-
-void ctx::PlaceCateger::reduceOutliers(ctx::Visits &visits)
-{
-       int size = visits.size();
-       visits.erase(std::remove_if(
-                                       visits.begin(),
-                                       visits.end(),
-                                       [](Visit v)->bool {
-                                               return v.categs[PLACE_CATEG_ID_HOME] < PLACES_CATEGER_MIN_VISITS_SCORE
-                                                               && v.categs[PLACE_CATEG_ID_WORK] < PLACES_CATEGER_MIN_VISITS_SCORE
-                                                               && v.categs[PLACE_CATEG_ID_OTHER] < PLACES_CATEGER_MIN_VISITS_SCORE;
-                                       }),
-                               visits.end());
-       int newSize = visits.size();
-       if (size != newSize) {
-               _D("Visits number from %d to %d (visits min scores checking)", size, newSize);
-       }
-}
-
-/*
- * Change category if home or work has to few visits
- */
-bool ctx::PlaceCateger::__reduceCategory(const PlaceCategId &categId, const ctx::Visits &visits)
-{
-       return (categId == PLACE_CATEG_ID_HOME && visits.size() < PLACES_CATEGER_MIN_VISITS_PER_HOME)
-               || (categId == PLACE_CATEG_ID_WORK && visits.size() < PLACES_CATEGER_MIN_VISITS_PER_WORK);
-}
-
-void ctx::PlaceCateger::categorize(ctx::Visits &visits, ctx::Place &place)
-{
-       reduceOutliers(visits);
-
-       place.categId = PLACE_CATEG_ID_NONE;
-       place.categConfidence = 0.0;
-
-       if (!visits.empty()) {
-               const std::vector<PlaceCategId> categIds = {
-                       PLACE_CATEG_ID_HOME,
-                       PLACE_CATEG_ID_WORK,
-                       PLACE_CATEG_ID_OTHER
-               };
-               num_t sumScore = 0.0;
-               num_t maxScore = 0.0;
-               for (PlaceCategId categId : categIds) {
-                       std::vector<num_t> categVector = categVectorFromVisits(visits, categId);
-                       num_t score = median(categVector);
-                       sumScore += score;
-                       if (score > maxScore) {
-                               maxScore = score;
-                               place.categId = categId;
-                       }
-               }
-               if (sumScore > 0) {
-                       place.categConfidence = maxScore / sumScore;
-               }
-               if (__reduceCategory(place.categId, visits)) {
-                       place.categId = PLACE_CATEG_ID_OTHER;
-                       place.categConfidence = 0.0;
-               }
-       }
-
-       place.name = categId2Name(place.categId);
-}
-
-std::vector<ctx::num_t> ctx::PlaceCateger::categVectorFromVisits(const ctx::Visits &visits, PlaceCategId categId)
-{
-       std::vector<ctx::num_t> vec;
-       for (auto &visit : visits) {
-               auto search = visit.categs.find(categId);
-               if (search != visit.categs.end()) {
-                       vec.push_back(search->second);
-               }
-       }
-       return vec;
-}
-
-std::string ctx::PlaceCateger::categId2Name(PlaceCategId categId) {
-       switch (categId) {
-       case PLACE_CATEG_ID_HOME:
-               return "home";
-       case PLACE_CATEG_ID_WORK:
-               return "work";
-       case PLACE_CATEG_ID_OTHER:
-               return "other";
-       case PLACE_CATEG_ID_NONE:
-               return "none";
-       default:
-               return "";
-       }
-}
diff --git a/src/place/recognition/user_places/place_categer.h b/src/place/recognition/user_places/place_categer.h
deleted file mode 100644 (file)
index 0d127b1..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_PLACE_CATEGER_
-#define _CONTEXT_PLACE_RECOGNITION_PLACE_CATEGER_
-
-#include "user_places_types.h"
-#include <utility>
-#include <vector>
-#include <string>
-#include "../place_recognition_types.h"
-
-namespace ctx {
-
-       class PlaceCateger {
-
-       private:
-               static bool __reduceCategory(const PlaceCategId &categId, const ctx::Visits &visits);
-
-       public:
-               static void reduceOutliers(Visits &visits); // TODO: move to private
-               static std::vector<ctx::num_t> categVectorFromVisits(const ctx::Visits &visits, PlaceCategId categId); // TODO: move to private
-               static void categorize(ctx::Visits &visits, ctx::Place &place);
-               static std::string categId2Name(PlaceCategId categId); // TODO: move to private
-
-       };      /* class PlaceCateger */
-
-}      /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_PLACE_CATEGER_ */
diff --git a/src/place/recognition/user_places/places_detector.cpp b/src/place/recognition/user_places/places_detector.cpp
deleted file mode 100644 (file)
index a48e395..0000000
+++ /dev/null
@@ -1,431 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <sstream>
-#include <Types.h>
-#include <Json.h>
-#include "similarity.h"
-#include "places_detector.h"
-#include "place_categer.h"
-#include "graph.h"
-#include "median.h"
-#ifdef TIZEN_ENGINEER_MODE
-#include "gmap.h"
-#endif /* TIZEN_ENGINEER_MODE */
-#include "../place_recognition_types.h"
-#include <fstream>
-#include <algorithm>
-#include "user_places_params.h"
-
-#define __DELETE_PLACES_QUERY "DELETE FROM " PLACE_TABLE
-
-#ifdef TIZEN_ENGINEER_MODE
-#define __USER_PLACES_FILE "/opt/usr/media/Others/user_places.txt" // TODO: Only for debug purposes -> Remove in final solution
-#endif /* TIZEN_ENGINEER_MODE */
-
-#define __GET_VISITS_QUERY "SELECT "\
-       VISIT_COLUMN_END_TIME ", "\
-       VISIT_COLUMN_START_TIME ", "\
-       VISIT_COLUMN_WIFI_APS ", "\
-       VISIT_COLUMN_LOCATION_VALID ", "\
-       VISIT_COLUMN_LOCATION_LATITUDE ", "\
-       VISIT_COLUMN_LOCATION_LONGITUDE ", " \
-       VISIT_COLUMN_CATEG_HOME ", "\
-       VISIT_COLUMN_CATEG_WORK ", "\
-       VISIT_COLUMN_CATEG_OTHER \
-       " FROM " VISIT_TABLE
-
-#define __GET_PLACES_QUERY "SELECT "\
-       PLACE_COLUMN_CATEG_ID ", "\
-       PLACE_COLUMN_CATEG_CONFIDENCE ", "\
-       PLACE_COLUMN_NAME ", "\
-       PLACE_COLUMN_LOCATION_VALID ", "\
-       PLACE_COLUMN_LOCATION_LATITUDE ", "\
-       PLACE_COLUMN_LOCATION_LONGITUDE ", " \
-       PLACE_COLUMN_WIFI_APS ", "\
-       PLACE_COLUMN_CREATE_DATE \
-       " FROM " PLACE_TABLE
-
-#define __PLACE_TABLE_COLUMNS \
-       PLACE_COLUMN_CATEG_ID " INTEGER, "\
-       PLACE_COLUMN_CATEG_CONFIDENCE " REAL, "\
-       PLACE_COLUMN_NAME " TEXT, "\
-       PLACE_COLUMN_LOCATION_VALID " INTEGER, "\
-       PLACE_COLUMN_LOCATION_LATITUDE " REAL, "\
-       PLACE_COLUMN_LOCATION_LONGITUDE " REAL, "\
-       PLACE_COLUMN_WIFI_APS " STRING, "\
-       PLACE_COLUMN_CREATE_DATE " timestamp"
-
-bool ctx::PlacesDetector::onTimerExpired(int timerId)
-{
-       _D("");
-       __dbDeletePlaces();
-       __dbDeleteOldVisits();
-       std::vector<Json> records = __dbGetVisits();
-       Visits visits = __visitsFromJsons(records);
-       __processVisits(visits);
-       return true;
-}
-
-std::vector<ctx::Json> ctx::PlacesDetector::__dbGetVisits()
-{
-       std::vector<Json> records;
-       bool ret = __dbManager.executeSync(__GET_VISITS_QUERY, &records);
-       _D("load visits execute query result: %s", ret ? "SUCCESS" : "FAIL");
-       return records;
-}
-
-std::vector<ctx::Json> ctx::PlacesDetector::__dbGetPlaces()
-{
-       std::vector<Json> records;
-       bool ret = __dbManager.executeSync(__GET_PLACES_QUERY, &records);
-       _D("load places execute query result: %s", ret ? "SUCCESS" : "FAIL");
-       return records;
-}
-
-double ctx::PlacesDetector::__doubleValueFromJson(Json &row, const char* key)
-{
-       double value;
-       row.get(NULL, key, &value);
-       _D("__doubleValueFromJson, key:%s, value: %lf", key, value);
-       return value;
-}
-
-ctx::Categs ctx::PlacesDetector::__visitCategsFromJson(Json &row)
-{
-       Categs categs;
-       categs[PLACE_CATEG_ID_HOME] = __doubleValueFromJson(row, VISIT_COLUMN_CATEG_HOME);
-       categs[PLACE_CATEG_ID_WORK] = __doubleValueFromJson(row, VISIT_COLUMN_CATEG_WORK);
-       categs[PLACE_CATEG_ID_OTHER] = __doubleValueFromJson(row, VISIT_COLUMN_CATEG_OTHER);
-       return categs;
-}
-
-ctx::Visit ctx::PlacesDetector::__visitFromJson(Json &row)
-{
-       int startTime;
-       int endTime;
-       std::string str;
-       row.get(NULL, VISIT_COLUMN_START_TIME, &startTime);
-       row.get(NULL, VISIT_COLUMN_END_TIME, &endTime);
-       row.get(NULL, VISIT_COLUMN_WIFI_APS, &str);
-
-       std::stringstream ss;
-       ss << str;
-       std::shared_ptr<MacSet> macSet = std::make_shared<MacSet>();
-       ss >> *macSet;
-
-       Interval interval(startTime, endTime);
-       Categs categs = __visitCategsFromJson(row);
-
-       Visit visit(interval, macSet, categs);
-
-       { // location
-               int locationValidInt;
-               row.get(NULL, VISIT_COLUMN_LOCATION_VALID, &locationValidInt);
-               visit.locationValid = (bool) locationValidInt;
-               row.get(NULL, VISIT_COLUMN_LOCATION_LATITUDE, &(visit.location.latitude));
-               row.get(NULL, VISIT_COLUMN_LOCATION_LONGITUDE, &(visit.location.longitude));
-       }
-
-       return visit;
-}
-
-ctx::Visits ctx::PlacesDetector::__visitsFromJsons(std::vector<Json>& records)
-{
-       Visits visits;
-       _D("db_result: number of all visits: %d", records.size());
-
-       for (Json &row : records) {
-               Visit visit = __visitFromJson(row);
-               visits.push_back(visit);
-       }
-       _D("number of all visits in vector: %d", visits.size());
-       return visits;
-}
-
-std::shared_ptr<ctx::Place> ctx::PlacesDetector::__placeFromJson(Json &row)
-{
-       std::shared_ptr<Place> place = std::make_shared<Place>();
-       { // category
-               int categId;
-               row.get(NULL, PLACE_COLUMN_CATEG_ID, &categId);
-               // This is due to the fact the JSON module API interface doesn't handle enum
-               place->categId = static_cast<PlaceCategId>(categId);
-       }
-       row.get(NULL, PLACE_COLUMN_NAME, &(place->name));
-       row.get(NULL, PLACE_COLUMN_WIFI_APS, &(place->wifiAps));
-       { // location
-               int locationValidInt;
-               row.get(NULL, PLACE_COLUMN_LOCATION_VALID, &locationValidInt);
-               place->locationValid = (bool) locationValidInt;
-               row.get(NULL, PLACE_COLUMN_LOCATION_LATITUDE, &(place->location.latitude));
-               row.get(NULL, PLACE_COLUMN_LOCATION_LONGITUDE, &(place->location.longitude));
-       }
-       { // createDate
-               int createDate;
-               row.get(NULL, PLACE_COLUMN_CREATE_DATE, &(createDate));
-               // This is due to the fact the JSON module API interface doesn't handle time_t
-               place->createDate = static_cast<time_t>(createDate);
-       }
-       _D("db_result: categId: %d; place: name: %s; wifiAps: %s; locationValid: %d; latitude: %lf, longitude: %lf, createDate: %d", place->categId, place->name.c_str(), place->wifiAps.c_str(), place->locationValid, place->location.latitude, place->location.longitude, place->createDate);
-       return place;
-}
-
-std::vector<std::shared_ptr<ctx::Place>> ctx::PlacesDetector::__placesFromJsons(std::vector<Json>& records)
-{
-       std::vector<std::shared_ptr<Place>> places;
-       _D("db_result: number of all places: %d", records.size());
-
-       for (Json &row : records) {
-               std::shared_ptr<Place> place = __placeFromJson(row);
-               places.push_back(place);
-       }
-       _D("number of all places in vector: %d", places.size());
-       return places;
-}
-
-void ctx::PlacesDetector::reduceOutliers(ctx::Visits &visits)
-{
-       int size = visits.size();
-       visits.erase(std::remove_if(
-                                       visits.begin(),
-                                       visits.end(),
-                                       [](Visit v)->bool {
-                                               int minutes = (v.interval.end - v.interval.start) / 60;
-                                               return (minutes < PLACES_DETECTOR_MIN_VISIT_DURATION_MINUTES)
-                                                               || (minutes > PLACES_DETECTOR_MAX_VISIT_DURATION_MINUTES);
-                                       }),
-                               visits.end());
-       int newSize = visits.size();
-       if (size != newSize) {
-               _D("Visits number from %d to %d (to short and to long reduction)", size, newSize);
-       }
-}
-
-void ctx::PlacesDetector::__processVisits(ctx::Visits &visits)
-{
-       reduceOutliers(visits);
-
-       _D("__testMode = %d", __testMode);
-       auto components = __mergeVisits(visits);
-       std::vector<std::shared_ptr<Place>> newDetectedPlaces;
-#ifdef TIZEN_ENGINEER_MODE
-       std::vector<Visits> placesVisits; // TODO: remove from final solution.
-#endif /* TIZEN_ENGINEER_MODE */
-       for (std::shared_ptr<graph::Component> component : *components) {
-               // Small places outliers reduction
-               if (!__testMode && component->size() < PLACES_DETECTOR_MIN_VISITS_PER_BIG_PLACE) {
-                       continue;
-               }
-
-               std::shared_ptr<Visits> merged = std::make_shared<Visits>();
-               for (graph::Node i : *component) {
-                       merged->push_back(visits[i]);
-               }
-               std::shared_ptr<Place> place = __placeFromMergedVisits(*merged);
-               if (place->categId == PLACE_CATEG_ID_NONE) {
-                       continue;
-               }
-               newDetectedPlaces.push_back(place);
-               if (!__testMode) {
-                       __dbInsertPlace(*place);
-               }
-
-#ifdef TIZEN_ENGINEER_MODE
-               { // TODO: Only for debug -> remove in final solution
-                       Visits placeVisits;
-                       for (graph::Node i : *component) {
-                               placeVisits.push_back(visits[i]);
-                       }
-                       placesVisits.push_back(placeVisits);
-               }
-#endif /* TIZEN_ENGINEER_MODE */
-       }
-
-       __detectedPlacesUpdate(newDetectedPlaces);
-
-#ifdef TIZEN_ENGINEER_MODE
-       { // Print to file TODO: Only for debug -> remove in final solution
-               std::ofstream out(__USER_PLACES_FILE);
-               for (size_t i = 0; i < newDetectedPlaces.size(); i++) {
-                       newDetectedPlaces[i]->print2Stream(out);
-                       Visits placeVisits = placesVisits[i];
-                       for (Visit visit : placeVisits) {
-                               visit.printShort2Stream(out);
-                       }
-               }
-               out.close();
-               Gmap::writeMap(newDetectedPlaces);
-       }
-#endif /* TIZEN_ENGINEER_MODE */
-}
-
-/*
- * Replace old places by new ones.
- */
-void ctx::PlacesDetector::__detectedPlacesUpdate(std::vector<std::shared_ptr<Place>> &newPlaces)
-{
-       _D("");
-       // XXX: In case of thread safety issues use std::mutex to protect places list.
-       __detectedPlaces = newPlaces;
-}
-
-void ctx::PlacesDetector::__mergeLocation(const Visits &visits, Place &place)
-{
-       place.locationValid = false;
-       std::vector<double> latitudes;
-       std::vector<double> longitudes;
-       for (const Visit& visit : visits) {
-               if (visit.locationValid) {
-                       latitudes.push_back(visit.location.latitude);
-                       longitudes.push_back(visit.location.longitude);
-                       place.locationValid = true;
-               }
-       }
-       if (place.locationValid) {
-               place.location.latitude = median(latitudes);
-               place.location.longitude = median(longitudes);
-       }
-}
-
-std::shared_ptr<ctx::Place> ctx::PlacesDetector::__placeFromMergedVisits(Visits &mergedVisits)
-{
-       std::shared_ptr<Place> place = std::make_shared<Place>();
-       place->createDate = std::time(nullptr);
-       std::vector<std::shared_ptr<MacSet>> macSets;
-       for (const Visit &visit : mergedVisits) {
-               macSets.push_back(visit.macSet);
-       }
-       std::shared_ptr<MacSet> allMacs = macSetsUnion(macSets);
-       std::stringstream ss;
-       ss << *allMacs;
-       place->wifiAps = ss.str();
-
-       __mergeLocation(mergedVisits, *place);
-
-       PlaceCateger::categorize(mergedVisits, *place);
-
-       return place;
-}
-
-void ctx::PlacesDetector::reduceOutliers(std::shared_ptr<ctx::graph::Components> &cc)
-{
-       int size = cc->size();
-       cc->erase(std::remove_if(cc->begin(),
-                                                        cc->end(),
-                                                        [](std::shared_ptr<graph::Component> &c)->bool {
-                                                                return c->size() < PLACES_DETECTOR_MIN_VISITS_PER_PLACE;
-                                                        }),
-                         cc->end());
-       int newSize = cc->size();
-       if (size != newSize) {
-               _D("Connected components from %d to %d (min visit per place)", size, newSize);
-       }
-}
-
-std::shared_ptr<ctx::graph::Components> ctx::PlacesDetector::__mergeVisits(const std::vector<Visit> &visits)
-{
-       auto graph = __graphFromVisits(visits);
-       auto cc = graph::connectedComponents(*graph);
-       reduceOutliers(cc);
-       return cc;
-}
-
-std::shared_ptr<ctx::graph::Graph> ctx::PlacesDetector::__graphFromVisits(const std::vector<Visit> &visits)
-{
-       std::shared_ptr<graph::Graph> graph = std::make_shared<graph::Graph>();
-       graph->resize(visits.size());
-       for (size_t i = 0; i < visits.size(); i++) {
-               (*graph)[i] = std::make_shared<graph::NeighbourNodes>();
-               for (size_t j = 0; j < i; j++) {
-                       if (similarity::isJoint(*visits[i].macSet, *visits[j].macSet)) {
-                               (*graph)[i]->insert(j);
-                               (*graph)[j]->insert(i);
-                       }
-               }
-       }
-       return graph;
-}
-
-void ctx::PlacesDetector::__dbDeletePlaces()
-{
-       std::vector<Json> records;
-       bool ret = __dbManager.executeSync(__DELETE_PLACES_QUERY, &records);
-       _D("delete places execute query result: %s", ret ? "SUCCESS" : "FAIL");
-}
-
-void ctx::PlacesDetector::__dbDeleteOldVisits()
-{
-       time_t currentTime;
-       time(&currentTime);
-       time_t thresholdTime = currentTime - PLACES_DETECTOR_RETENTION_SECONDS;
-       __dbDeleteOlderVisitsThan(thresholdTime);
-}
-
-void ctx::PlacesDetector::__dbDeleteOlderVisitsThan(time_t threshold)
-{
-       _D("deleting vistits older than: %d", threshold);
-       std::stringstream query;
-       query << "DELETE FROM " << VISIT_TABLE;
-       query << " WHERE " << VISIT_COLUMN_END_TIME << " < " << threshold;
-       // query << " AND 0"; // XXX: Always false condition. Uncomment it for not deleting any visit during development.
-       std::vector<Json> records;
-       bool ret = __dbManager.executeSync(query.str().c_str(), &records);
-       _D("delete old visits execute query result: %s", ret ? "SUCCESS" : "FAIL");
-}
-
-ctx::PlacesDetector::PlacesDetector(bool testMode) :
-       __testMode(testMode)
-{
-       if (testMode) {
-               return;
-       }
-       __dbCreateTable();
-       std::vector<Json> records = __dbGetPlaces();
-       std::vector<std::shared_ptr<Place>> dbPlaces = __placesFromJsons(records);
-       __detectedPlacesUpdate(dbPlaces);
-}
-
-void ctx::PlacesDetector::__dbCreateTable()
-{
-       bool ret = __dbManager.createTable(0, PLACE_TABLE, __PLACE_TABLE_COLUMNS);
-       _D("db: place Table Creation Result: %s", ret ? "SUCCESS" : "FAIL");
-}
-
-void ctx::PlacesDetector::__dbInsertPlace(const Place &place)
-{
-       Json data;
-       data.set(NULL, PLACE_COLUMN_CATEG_ID, place.categId);
-       data.set(NULL, PLACE_COLUMN_CATEG_CONFIDENCE, place.categConfidence);
-       data.set(NULL, PLACE_COLUMN_NAME, place.name);
-
-       data.set(NULL, PLACE_COLUMN_LOCATION_VALID, place.locationValid);
-       data.set(NULL, PLACE_COLUMN_LOCATION_LATITUDE, place.location.latitude);
-       data.set(NULL, PLACE_COLUMN_LOCATION_LONGITUDE, place.location.longitude);
-
-       data.set(NULL, PLACE_COLUMN_WIFI_APS, place.wifiAps);
-       data.set(NULL, PLACE_COLUMN_CREATE_DATE, static_cast<int>(place.createDate));
-
-       int64_t rowId;
-       bool ret = __dbManager.insertSync(PLACE_TABLE, data, &rowId);
-       _D("insert place execute query result: %s", ret ? "SUCCESS" : "FAIL");
-}
-
-std::vector<std::shared_ptr<ctx::Place>> ctx::PlacesDetector::getPlaces()
-{
-       // XXX: In case of thread safety issues use std::mutex to protect places list.
-       return __detectedPlaces;
-}
diff --git a/src/place/recognition/user_places/places_detector.h b/src/place/recognition/user_places/places_detector.h
deleted file mode 100644 (file)
index 6444539..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_PLACES_DETECTOR_
-#define _CONTEXT_PLACE_RECOGNITION_PLACES_DETECTOR_
-
-#include <vector>
-#include <cstdint>
-#include <ITimerListener.h>
-#include <DatabaseManager.h>
-#include "visit_detector.h"
-#include "user_places_types.h"
-
-namespace ctx {
-
-       class PlacesDetector : public ITimerListener {
-
-       private:
-               bool __testMode;
-               DatabaseManager __dbManager;
-
-               double __doubleValueFromJson(Json &row, const char* key);
-               Categs __visitCategsFromJson(Json &row);
-               Visit __visitFromJson(Json &row);
-               Visits __visitsFromJsons(std::vector<Json>& records);
-               std::shared_ptr<ctx::Place> __placeFromJson(Json &row);
-               std::vector<std::shared_ptr<Place>> __placesFromJsons(std::vector<Json>& records);
-
-               std::shared_ptr<graph::Graph> __graphFromVisits(const std::vector<Visit> &visits);
-
-               void __dbCreateTable();
-               void __dbDeletePlaces();
-               void __dbDeleteOldVisits();
-               void __dbDeleteOlderVisitsThan(time_t threshold);
-               std::vector<Json> __dbGetVisits();
-               std::vector<Json> __dbGetPlaces();
-               void __dbInsertPlace(const Place &place);
-
-               std::shared_ptr<Place> __placeFromMergedVisits(Visits &mergedVisits);
-               std::vector<std::shared_ptr<Place>> __detectedPlaces;
-               void __detectedPlacesUpdate(std::vector<std::shared_ptr<Place>> &newPlaces);
-               void __processVisits(Visits &visits);
-               static void __mergeLocation(const Visits &mergedVisits, Place &place);
-               std::shared_ptr<graph::Components> __mergeVisits(const std::vector<Visit> &visits);
-
-               bool onTimerExpired(int timerId);
-
-       public:
-               PlacesDetector(bool testMode = false);
-               static void reduceOutliers(Visits &visits); // TODO: move to private
-               static void reduceOutliers(std::shared_ptr<graph::Components> &cc); // TODO: move to private
-               std::vector<std::shared_ptr<Place>> getPlaces();
-
-       };  /* class PlacesDetector */
-
-}      /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_PLACES_DETECTOR_ */
diff --git a/src/place/recognition/user_places/prob_features_model.h b/src/place/recognition/user_places/prob_features_model.h
deleted file mode 100644 (file)
index d30f548..0000000
+++ /dev/null
@@ -1,30291 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_FEATURES_MODEL_H_
-#define _CONTEXT_PLACE_RECOGNITION_FEATURES_MODEL_H_
-
-namespace ctx {
-
-namespace prob_features {
-
-       /*
-        * Probabilities for whole week <monday Ã· sunday> with minutes resolution
-        * from beginning of the week (sunday -> monday midnight) <0, 10080).
-        * Key is PlaceCategId:
-        *     PLACE_CATEG_ID_HOME
-        *     PLACE_CATEG_ID_WORK
-        *     PLACE_CATEG_ID_OTHER
-        */
-       std::map<PlaceCategId, std::vector<num_t>> weekModel {
-               { PLACE_CATEG_ID_HOME,
-                       {
-                               0.9824561403508770,
-                               0.9824561403508770,
-                               0.9824561403508770,
-                               0.9824561403508770,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9833333333333330,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9830508474576270,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9827586206896550,
-                               0.9824561403508770,
-                               0.9824561403508770,
-                               0.9824561403508770,
-                               0.9824561403508770,
-                               0.9824561403508770,
-                               0.9824561403508770,
-                               0.9824561403508770,
-                               0.9824561403508770,
-                               0.9824561403508770,
-                               0.9824561403508770,
-                               0.9824561403508770,
-                               0.9824561403508770,
-                               0.9824561403508770,
-                               0.9824561403508770,
-                               0.9824561403508770,
-                               0.9824561403508770,
-                               0.9824561403508770,
-                               0.9824561403508770,
-                               0.9824561403508770,
-                               0.9824561403508770,
-                               0.9824561403508770,
-                               0.9821428571428570,
-                               0.9821428571428570,
-                               0.9821428571428570,
-                               0.9824561403508770,
-                               0.9824561403508770,
-                               0.9824561403508770,
-                               0.9824561403508770,
-                               0.9824561403508770,
-                               0.9824561403508770,
-                               0.9824561403508770,
-                               0.9821428571428570,
-                               0.9821428571428570,
-                               0.9821428571428570,
-                               0.9821428571428570,
-                               0.9821428571428570,
-                               0.9649122807017540,
-                               0.9649122807017540,
-                               0.9649122807017540,
-                               0.9649122807017540,
-                               0.9649122807017540,
-                               0.9649122807017540,
-                               0.9649122807017540,
-                               0.9636363636363640,
-                               0.9636363636363640,
-                               0.9642857142857140,
-                               0.9642857142857140,
-                               0.9642857142857140,
-                               0.9642857142857140,
-                               0.9629629629629630,
-                               0.9629629629629630,
-                               0.9629629629629630,
-                               0.9629629629629630,
-                               0.9629629629629630,
-                               0.9629629629629630,
-                               0.9454545454545450,
-                               0.9454545454545450,
-                               0.9285714285714290,
-                               0.9285714285714290,
-                               0.9285714285714290,
-                               0.9122807017543860,
-                               0.9122807017543860,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9074074074074070,
-                               0.9074074074074070,
-                               0.9074074074074070,
-                               0.9074074074074070,
-                               0.9074074074074070,
-                               0.9074074074074070,
-                               0.9074074074074070,
-                               0.9074074074074070,
-                               0.9245283018867930,
-                               0.9074074074074070,
-                               0.9074074074074070,
-                               0.9074074074074070,
-                               0.9038461538461540,
-                               0.9038461538461540,
-                               0.9038461538461540,
-                               0.9038461538461540,
-                               0.9215686274509800,
-                               0.9215686274509800,
-                               0.9038461538461540,
-                               0.9038461538461540,
-                               0.9038461538461540,
-                               0.8823529411764710,
-                               0.8823529411764710,
-                               0.8823529411764710,
-                               0.8653846153846150,
-                               0.8653846153846150,
-                               0.8653846153846150,
-                               0.8653846153846150,
-                               0.8653846153846150,
-                               0.8653846153846150,
-                               0.8653846153846150,
-                               0.8653846153846150,
-                               0.8653846153846150,
-                               0.8490566037735850,
-                               0.8490566037735850,
-                               0.8490566037735850,
-                               0.8490566037735850,
-                               0.8461538461538460,
-                               0.8461538461538460,
-                               0.8461538461538460,
-                               0.8461538461538460,
-                               0.8461538461538460,
-                               0.8461538461538460,
-                               0.8461538461538460,
-                               0.8148148148148150,
-                               0.8148148148148150,
-                               0.8148148148148150,
-                               0.8148148148148150,
-                               0.8148148148148150,
-                               0.8113207547169810,
-                               0.7962962962962960,
-                               0.7962962962962960,
-                               0.7962962962962960,
-                               0.7924528301886790,
-                               0.7924528301886790,
-                               0.7924528301886790,
-                               0.7735849056603770,
-                               0.7735849056603770,
-                               0.7735849056603770,
-                               0.7735849056603770,
-                               0.7735849056603770,
-                               0.7735849056603770,
-                               0.7735849056603770,
-                               0.7735849056603770,
-                               0.7735849056603770,
-                               0.7735849056603770,
-                               0.7735849056603770,
-                               0.7692307692307690,
-                               0.7547169811320760,
-                               0.7547169811320760,
-                               0.7547169811320760,
-                               0.7547169811320760,
-                               0.7547169811320760,
-                               0.7272727272727270,
-                               0.7272727272727270,
-                               0.7272727272727270,
-                               0.7272727272727270,
-                               0.7272727272727270,
-                               0.7272727272727270,
-                               0.7169811320754720,
-                               0.7169811320754720,
-                               0.7169811320754720,
-                               0.7115384615384620,
-                               0.7000000000000000,
-                               0.7000000000000000,
-                               0.6875000000000000,
-                               0.6808510638297870,
-                               0.6808510638297870,
-                               0.6808510638297870,
-                               0.6808510638297870,
-                               0.6666666666666670,
-                               0.6400000000000000,
-                               0.6274509803921570,
-                               0.6153846153846150,
-                               0.6153846153846150,
-                               0.6153846153846150,
-                               0.6153846153846150,
-                               0.6078431372549020,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.5882352941176470,
-                               0.5882352941176470,
-                               0.5882352941176470,
-                               0.5882352941176470,
-                               0.5882352941176470,
-                               0.5769230769230770,
-                               0.5769230769230770,
-                               0.5600000000000000,
-                               0.5490196078431370,
-                               0.5208333333333330,
-                               0.5208333333333330,
-                               0.5208333333333330,
-                               0.5208333333333330,
-                               0.5208333333333330,
-                               0.5102040816326530,
-                               0.4893617021276600,
-                               0.4893617021276600,
-                               0.4893617021276600,
-                               0.4893617021276600,
-                               0.4444444444444440,
-                               0.4347826086956520,
-                               0.4347826086956520,
-                               0.4347826086956520,
-                               0.4347826086956520,
-                               0.4347826086956520,
-                               0.4347826086956520,
-                               0.4255319148936170,
-                               0.4130434782608700,
-                               0.4130434782608700,
-                               0.3913043478260870,
-                               0.3913043478260870,
-                               0.3913043478260870,
-                               0.3913043478260870,
-                               0.3777777777777780,
-                               0.3777777777777780,
-                               0.3777777777777780,
-                               0.3478260869565220,
-                               0.3478260869565220,
-                               0.3478260869565220,
-                               0.3478260869565220,
-                               0.3478260869565220,
-                               0.3181818181818180,
-                               0.3181818181818180,
-                               0.3181818181818180,
-                               0.3181818181818180,
-                               0.3111111111111110,
-                               0.3111111111111110,
-                               0.2790697674418600,
-                               0.2727272727272730,
-                               0.2727272727272730,
-                               0.2727272727272730,
-                               0.2666666666666670,
-                               0.2666666666666670,
-                               0.2666666666666670,
-                               0.2500000000000000,
-                               0.2500000000000000,
-                               0.2500000000000000,
-                               0.2244897959183670,
-                               0.2244897959183670,
-                               0.2200000000000000,
-                               0.2156862745098040,
-                               0.2156862745098040,
-                               0.2156862745098040,
-                               0.2075471698113210,
-                               0.2075471698113210,
-                               0.1923076923076920,
-                               0.1923076923076920,
-                               0.1886792452830190,
-                               0.1886792452830190,
-                               0.1886792452830190,
-                               0.1886792452830190,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1481481481481480,
-                               0.1481481481481480,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1379310344827590,
-                               0.1379310344827590,
-                               0.1186440677966100,
-                               0.1186440677966100,
-                               0.1186440677966100,
-                               0.1186440677966100,
-                               0.1186440677966100,
-                               0.1186440677966100,
-                               0.1186440677966100,
-                               0.1186440677966100,
-                               0.1034482758620690,
-                               0.1034482758620690,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0666666666666667,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0666666666666667,
-                               0.0677966101694915,
-                               0.0666666666666667,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0819672131147541,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0847457627118644,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0847457627118644,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0819672131147541,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0689655172413793,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.1034482758620690,
-                               0.1034482758620690,
-                               0.1034482758620690,
-                               0.1052631578947370,
-                               0.1052631578947370,
-                               0.1052631578947370,
-                               0.1071428571428570,
-                               0.1071428571428570,
-                               0.1071428571428570,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1090909090909090,
-                               0.1111111111111110,
-                               0.1090909090909090,
-                               0.1111111111111110,
-                               0.1132075471698110,
-                               0.1153846153846150,
-                               0.1153846153846150,
-                               0.1153846153846150,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1346153846153850,
-                               0.1509433962264150,
-                               0.1509433962264150,
-                               0.1509433962264150,
-                               0.1481481481481480,
-                               0.1636363636363640,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1578947368421050,
-                               0.1724137931034480,
-                               0.1724137931034480,
-                               0.1754385964912280,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1818181818181820,
-                               0.1851851851851850,
-                               0.1851851851851850,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.1785714285714290,
-                               0.1851851851851850,
-                               0.1851851851851850,
-                               0.1818181818181820,
-                               0.1964285714285710,
-                               0.1818181818181820,
-                               0.1818181818181820,
-                               0.1964285714285710,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.2105263157894740,
-                               0.2142857142857140,
-                               0.2321428571428570,
-                               0.2280701754385960,
-                               0.2280701754385960,
-                               0.2321428571428570,
-                               0.2321428571428570,
-                               0.2500000000000000,
-                               0.2545454545454540,
-                               0.2545454545454540,
-                               0.2545454545454540,
-                               0.2545454545454540,
-                               0.2500000000000000,
-                               0.2500000000000000,
-                               0.2545454545454540,
-                               0.2545454545454540,
-                               0.2545454545454540,
-                               0.2545454545454540,
-                               0.2545454545454540,
-                               0.2592592592592590,
-                               0.2545454545454540,
-                               0.2545454545454540,
-                               0.2592592592592590,
-                               0.2592592592592590,
-                               0.2592592592592590,
-                               0.2777777777777780,
-                               0.2777777777777780,
-                               0.2641509433962260,
-                               0.2692307692307690,
-                               0.2692307692307690,
-                               0.2745098039215690,
-                               0.2830188679245280,
-                               0.2884615384615380,
-                               0.2941176470588230,
-                               0.2941176470588230,
-                               0.2941176470588230,
-                               0.2884615384615380,
-                               0.2941176470588230,
-                               0.2884615384615380,
-                               0.2884615384615380,
-                               0.3000000000000000,
-                               0.3061224489795920,
-                               0.3061224489795920,
-                               0.3061224489795920,
-                               0.3061224489795920,
-                               0.3000000000000000,
-                               0.3061224489795920,
-                               0.3061224489795920,
-                               0.3061224489795920,
-                               0.3265306122448980,
-                               0.3265306122448980,
-                               0.3200000000000000,
-                               0.3404255319148940,
-                               0.3404255319148940,
-                               0.3404255319148940,
-                               0.3404255319148940,
-                               0.3404255319148940,
-                               0.3404255319148940,
-                               0.3478260869565220,
-                               0.3695652173913040,
-                               0.3695652173913040,
-                               0.3695652173913040,
-                               0.4130434782608700,
-                               0.4130434782608700,
-                               0.4255319148936170,
-                               0.4255319148936170,
-                               0.4255319148936170,
-                               0.4489795918367350,
-                               0.4888888888888890,
-                               0.5000000000000000,
-                               0.5000000000000000,
-                               0.5000000000000000,
-                               0.5000000000000000,
-                               0.5116279069767440,
-                               0.5116279069767440,
-                               0.5116279069767440,
-                               0.5238095238095240,
-                               0.5238095238095240,
-                               0.5365853658536590,
-                               0.5365853658536590,
-                               0.5348837209302320,
-                               0.5348837209302320,
-                               0.5227272727272730,
-                               0.5348837209302320,
-                               0.5348837209302320,
-                               0.5348837209302320,
-                               0.5227272727272730,
-                               0.5227272727272730,
-                               0.5000000000000000,
-                               0.5000000000000000,
-                               0.5111111111111110,
-                               0.5111111111111110,
-                               0.5227272727272730,
-                               0.5227272727272730,
-                               0.4893617021276600,
-                               0.5000000000000000,
-                               0.5102040816326530,
-                               0.5102040816326530,
-                               0.5200000000000000,
-                               0.5306122448979590,
-                               0.5200000000000000,
-                               0.5294117647058820,
-                               0.5294117647058820,
-                               0.5294117647058820,
-                               0.5192307692307690,
-                               0.5094339622641510,
-                               0.5094339622641510,
-                               0.5094339622641510,
-                               0.5294117647058820,
-                               0.5384615384615380,
-                               0.5471698113207550,
-                               0.5471698113207550,
-                               0.5471698113207550,
-                               0.5555555555555560,
-                               0.5555555555555560,
-                               0.5555555555555560,
-                               0.5636363636363640,
-                               0.5535714285714290,
-                               0.5535714285714290,
-                               0.5535714285714290,
-                               0.5636363636363640,
-                               0.5714285714285710,
-                               0.5892857142857140,
-                               0.5892857142857140,
-                               0.5892857142857140,
-                               0.5892857142857140,
-                               0.5892857142857140,
-                               0.5892857142857140,
-                               0.5892857142857140,
-                               0.5892857142857140,
-                               0.5925925925925930,
-                               0.5925925925925930,
-                               0.5925925925925930,
-                               0.5925925925925930,
-                               0.5818181818181820,
-                               0.5925925925925930,
-                               0.6808510638297870,
-                               0.6808510638297870,
-                               0.6808510638297870,
-                               0.6808510638297870,
-                               0.6956521739130430,
-                               0.7111111111111110,
-                               0.7111111111111110,
-                               0.7111111111111110,
-                               0.7272727272727270,
-                               0.7272727272727270,
-                               0.7333333333333330,
-                               0.7333333333333330,
-                               0.7333333333333330,
-                               0.7333333333333330,
-                               0.7608695652173910,
-                               0.7608695652173910,
-                               0.7608695652173910,
-                               0.7826086956521740,
-                               0.7826086956521740,
-                               0.7826086956521740,
-                               0.7872340425531920,
-                               0.7872340425531920,
-                               0.7872340425531920,
-                               0.7708333333333330,
-                               0.7400000000000000,
-                               0.7400000000000000,
-                               0.7551020408163260,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7200000000000000,
-                               0.7200000000000000,
-                               0.7200000000000000,
-                               0.7058823529411760,
-                               0.7058823529411760,
-                               0.7115384615384620,
-                               0.7115384615384620,
-                               0.7115384615384620,
-                               0.7169811320754720,
-                               0.7169811320754720,
-                               0.7307692307692310,
-                               0.7307692307692310,
-                               0.7450980392156860,
-                               0.7450980392156860,
-                               0.7450980392156860,
-                               0.7450980392156860,
-                               0.7600000000000000,
-                               0.7600000000000000,
-                               0.7647058823529410,
-                               0.7647058823529410,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7800000000000000,
-                               0.7800000000000000,
-                               0.7692307692307690,
-                               0.7647058823529410,
-                               0.7647058823529410,
-                               0.7800000000000000,
-                               0.8125000000000000,
-                               0.8125000000000000,
-                               0.8200000000000000,
-                               0.8200000000000000,
-                               0.8039215686274510,
-                               0.8039215686274510,
-                               0.8039215686274510,
-                               0.8039215686274510,
-                               0.8235294117647060,
-                               0.8076923076923080,
-                               0.7924528301886790,
-                               0.7924528301886790,
-                               0.7924528301886790,
-                               0.7884615384615380,
-                               0.8076923076923080,
-                               0.8076923076923080,
-                               0.8076923076923080,
-                               0.8113207547169810,
-                               0.8113207547169810,
-                               0.8148148148148150,
-                               0.8181818181818180,
-                               0.8181818181818180,
-                               0.8181818181818180,
-                               0.8148148148148150,
-                               0.8181818181818180,
-                               0.8181818181818180,
-                               0.8181818181818180,
-                               0.8181818181818180,
-                               0.8333333333333330,
-                               0.8518518518518520,
-                               0.8545454545454550,
-                               0.8545454545454550,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8596491228070170,
-                               0.8596491228070170,
-                               0.8524590163934430,
-                               0.8524590163934430,
-                               0.8524590163934430,
-                               0.8500000000000000,
-                               0.8500000000000000,
-                               0.8500000000000000,
-                               0.8500000000000000,
-                               0.8500000000000000,
-                               0.8644067796610170,
-                               0.8644067796610170,
-                               0.8644067796610170,
-                               0.8644067796610170,
-                               0.8644067796610170,
-                               0.8644067796610170,
-                               0.8644067796610170,
-                               0.8500000000000000,
-                               0.8500000000000000,
-                               0.8644067796610170,
-                               0.8644067796610170,
-                               0.8644067796610170,
-                               0.8644067796610170,
-                               0.8793103448275860,
-                               0.8771929824561400,
-                               0.8771929824561400,
-                               0.8771929824561400,
-                               0.8771929824561400,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8771929824561400,
-                               0.8793103448275860,
-                               0.8813559322033900,
-                               0.8813559322033900,
-                               0.8965517241379310,
-                               0.8965517241379310,
-                               0.8965517241379310,
-                               0.8965517241379310,
-                               0.8965517241379310,
-                               0.8965517241379310,
-                               0.8983050847457630,
-                               0.8983050847457630,
-                               0.8983050847457630,
-                               0.8833333333333330,
-                               0.8833333333333330,
-                               0.8833333333333330,
-                               0.8833333333333330,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8709677419354840,
-                               0.8709677419354840,
-                               0.8709677419354840,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8793103448275860,
-                               0.8813559322033900,
-                               0.8813559322033900,
-                               0.8813559322033900,
-                               0.8813559322033900,
-                               0.8813559322033900,
-                               0.8813559322033900,
-                               0.8813559322033900,
-                               0.8813559322033900,
-                               0.8983050847457630,
-                               0.8983050847457630,
-                               0.8983050847457630,
-                               0.9000000000000000,
-                               0.9152542372881350,
-                               0.9152542372881350,
-                               0.9152542372881350,
-                               0.9152542372881350,
-                               0.9152542372881350,
-                               0.9137931034482760,
-                               0.9137931034482760,
-                               0.9137931034482760,
-                               0.9137931034482760,
-                               0.9137931034482760,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9016393442622950,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9062500000000000,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9062500000000000,
-                               0.9062500000000000,
-                               0.9062500000000000,
-                               0.9062500000000000,
-                               0.9062500000000000,
-                               0.9062500000000000,
-                               0.9062500000000000,
-                               0.9062500000000000,
-                               0.9062500000000000,
-                               0.9062500000000000,
-                               0.9062500000000000,
-                               0.9062500000000000,
-                               0.9062500000000000,
-                               0.9062500000000000,
-                               0.9206349206349210,
-                               0.9206349206349210,
-                               0.9206349206349210,
-                               0.9206349206349210,
-                               0.9206349206349210,
-                               0.9354838709677420,
-                               0.9354838709677420,
-                               0.9354838709677420,
-                               0.9508196721311470,
-                               0.9508196721311470,
-                               0.9508196721311470,
-                               0.9508196721311470,
-                               0.9516129032258060,
-                               0.9516129032258060,
-                               0.9523809523809520,
-                               0.9523809523809520,
-                               0.9531250000000000,
-                               0.9531250000000000,
-                               0.9531250000000000,
-                               0.9531250000000000,
-                               0.9531250000000000,
-                               0.9531250000000000,
-                               0.9531250000000000,
-                               0.9531250000000000,
-                               0.9531250000000000,
-                               0.9531250000000000,
-                               0.9531250000000000,
-                               0.9523809523809520,
-                               0.9523809523809520,
-                               0.9523809523809520,
-                               0.9523809523809520,
-                               0.9523809523809520,
-                               0.9523809523809520,
-                               0.9523809523809520,
-                               0.9677419354838710,
-                               0.9677419354838710,
-                               0.9677419354838710,
-                               0.9677419354838710,
-                               0.9677419354838710,
-                               0.9677419354838710,
-                               0.9677419354838710,
-                               0.9677419354838710,
-                               0.9677419354838710,
-                               0.9677419354838710,
-                               0.9677419354838710,
-                               0.9677419354838710,
-                               0.9677419354838710,
-                               0.9677419354838710,
-                               0.9677419354838710,
-                               0.9677419354838710,
-                               0.9677419354838710,
-                               0.9677419354838710,
-                               0.9682539682539680,
-                               0.9682539682539680,
-                               0.9682539682539680,
-                               0.9838709677419350,
-                               0.9838709677419350,
-                               0.9838709677419350,
-                               0.9838709677419350,
-                               0.9838709677419350,
-                               0.9838709677419350,
-                               0.9838709677419350,
-                               0.9838709677419350,
-                               0.9836065573770490,
-                               0.9836065573770490,
-                               0.9836065573770490,
-                               0.9836065573770490,
-                               0.9838709677419350,
-                               0.9838709677419350,
-                               0.9838709677419350,
-                               0.9838709677419350,
-                               0.9838709677419350,
-                               0.9838709677419350,
-                               0.9838709677419350,
-                               0.9838709677419350,
-                               0.9838709677419350,
-                               0.9838709677419350,
-                               0.9838709677419350,
-                               0.9838709677419350,
-                               0.9838709677419350,
-                               0.9838709677419350,
-                               0.9841269841269840,
-                               0.9841269841269840,
-                               0.9841269841269840,
-                               0.9841269841269840,
-                               0.9841269841269840,
-                               0.9841269841269840,
-                               0.9843750000000000,
-                               0.9843750000000000,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9848484848484850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9846153846153850,
-                               0.9843750000000000,
-                               0.9843750000000000,
-                               0.9843750000000000,
-                               0.9843750000000000,
-                               0.9843750000000000,
-                               0.9843750000000000,
-                               0.9843750000000000,
-                               0.9843750000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                                       1.0000000000000000,
-                               0.9661016949152540,
-                               0.9642857142857140,
-                               0.9642857142857140,
-                               0.9642857142857140,
-                               0.9642857142857140,
-                               0.9642857142857140,
-                               0.9642857142857140,
-                               0.9473684210526320,
-                               0.9473684210526320,
-                               0.9473684210526320,
-                               0.9473684210526320,
-                               0.9473684210526320,
-                               0.9473684210526320,
-                               0.9473684210526320,
-                               0.9473684210526320,
-                               0.9473684210526320,
-                               0.9473684210526320,
-                               0.9298245614035090,
-                               0.9298245614035090,
-                               0.9298245614035090,
-                               0.9298245614035090,
-                               0.9298245614035090,
-                               0.9298245614035090,
-                               0.9298245614035090,
-                               0.9137931034482760,
-                               0.9122807017543860,
-                               0.9122807017543860,
-                               0.9122807017543860,
-                               0.9122807017543860,
-                               0.9107142857142860,
-                               0.9272727272727270,
-                               0.9107142857142860,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.8947368421052630,
-                               0.9107142857142860,
-                               0.9107142857142860,
-                               0.9107142857142860,
-                               0.9107142857142860,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8727272727272730,
-                               0.8888888888888890,
-                               0.8679245283018870,
-                               0.8679245283018870,
-                               0.8679245283018870,
-                               0.8490566037735850,
-                               0.8490566037735850,
-                               0.8333333333333330,
-                               0.8333333333333330,
-                               0.8333333333333330,
-                               0.8333333333333330,
-                               0.8301886792452830,
-                               0.8301886792452830,
-                               0.8301886792452830,
-                               0.8301886792452830,
-                               0.8301886792452830,
-                               0.8301886792452830,
-                               0.8000000000000000,
-                               0.7962962962962960,
-                               0.7962962962962960,
-                               0.7962962962962960,
-                               0.7962962962962960,
-                               0.7962962962962960,
-                               0.7818181818181820,
-                               0.7777777777777780,
-                               0.7454545454545450,
-                               0.7454545454545450,
-                               0.7407407407407410,
-                               0.7407407407407410,
-                               0.7358490566037730,
-                               0.7358490566037730,
-                               0.7358490566037730,
-                               0.7307692307692310,
-                               0.7254901960784310,
-                               0.7254901960784310,
-                               0.7254901960784310,
-                               0.7254901960784310,
-                               0.7058823529411760,
-                               0.7000000000000000,
-                               0.7000000000000000,
-                               0.7000000000000000,
-                               0.6800000000000000,
-                               0.6800000000000000,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6600000000000000,
-                               0.6600000000000000,
-                               0.6600000000000000,
-                               0.6470588235294120,
-                               0.6346153846153850,
-                               0.6037735849056600,
-                               0.6037735849056600,
-                               0.5961538461538460,
-                               0.5769230769230770,
-                               0.5576923076923080,
-                               0.5576923076923080,
-                               0.5576923076923080,
-                               0.5471698113207550,
-                               0.5471698113207550,
-                               0.5471698113207550,
-                               0.5471698113207550,
-                               0.5471698113207550,
-                               0.5471698113207550,
-                               0.5294117647058820,
-                               0.5294117647058820,
-                               0.5294117647058820,
-                               0.5294117647058820,
-                               0.5200000000000000,
-                               0.5098039215686270,
-                               0.5098039215686270,
-                               0.5098039215686270,
-                               0.5098039215686270,
-                               0.5098039215686270,
-                               0.5098039215686270,
-                               0.5098039215686270,
-                               0.5200000000000000,
-                               0.5200000000000000,
-                               0.5200000000000000,
-                               0.5200000000000000,
-                               0.5200000000000000,
-                               0.5200000000000000,
-                               0.5098039215686270,
-                               0.5098039215686270,
-                               0.5098039215686270,
-                               0.5098039215686270,
-                               0.5098039215686270,
-                               0.5000000000000000,
-                               0.4814814814814810,
-                               0.4814814814814810,
-                               0.4814814814814810,
-                               0.4814814814814810,
-                               0.4509803921568630,
-                               0.4600000000000000,
-                               0.4285714285714290,
-                               0.4285714285714290,
-                               0.4285714285714290,
-                               0.4285714285714290,
-                               0.3958333333333330,
-                               0.3958333333333330,
-                               0.3617021276595740,
-                               0.3617021276595740,
-                               0.3617021276595740,
-                               0.3617021276595740,
-                               0.3617021276595740,
-                               0.3541666666666670,
-                               0.3333333333333330,
-                               0.3265306122448980,
-                               0.3265306122448980,
-                               0.3061224489795920,
-                               0.3000000000000000,
-                               0.2941176470588230,
-                               0.2941176470588230,
-                               0.2800000000000000,
-                               0.2800000000000000,
-                               0.2800000000000000,
-                               0.2340425531914890,
-                               0.2340425531914890,
-                               0.2391304347826090,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2045454545454550,
-                               0.1956521739130430,
-                               0.1914893617021280,
-                               0.1875000000000000,
-                               0.1632653061224490,
-                               0.1632653061224490,
-                               0.1600000000000000,
-                               0.1568627450980390,
-                               0.1568627450980390,
-                               0.1568627450980390,
-                               0.1568627450980390,
-                               0.1568627450980390,
-                               0.1481481481481480,
-                               0.1481481481481480,
-                               0.1481481481481480,
-                               0.1481481481481480,
-                               0.1403508771929820,
-                               0.1403508771929820,
-                               0.1379310344827590,
-                               0.1379310344827590,
-                               0.1379310344827590,
-                               0.1379310344827590,
-                               0.1166666666666670,
-                               0.1166666666666670,
-                               0.1166666666666670,
-                               0.1166666666666670,
-                               0.1166666666666670,
-                               0.1166666666666670,
-                               0.1147540983606560,
-                               0.1147540983606560,
-                               0.1129032258064520,
-                               0.1129032258064520,
-                               0.1129032258064520,
-                               0.1129032258064520,
-                               0.1129032258064520,
-                               0.1129032258064520,
-                               0.1129032258064520,
-                               0.1129032258064520,
-                               0.1129032258064520,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.1093750000000000,
-                               0.0952380952380952,
-                               0.0952380952380952,
-                               0.0952380952380952,
-                               0.0937500000000000,
-                               0.0937500000000000,
-                               0.0937500000000000,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0781250000000000,
-                               0.0781250000000000,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0666666666666667,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0500000000000000,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0483870967741936,
-                               0.0476190476190476,
-                               0.0468750000000000,
-                               0.0468750000000000,
-                               0.0468750000000000,
-                               0.0468750000000000,
-                               0.0468750000000000,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0468750000000000,
-                               0.0476190476190476,
-                               0.0468750000000000,
-                               0.0468750000000000,
-                               0.0468750000000000,
-                               0.0468750000000000,
-                               0.0468750000000000,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0476190476190476,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0333333333333333,
-                               0.0344827586206897,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0357142857142857,
-                               0.0363636363636364,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0363636363636364,
-                               0.0370370370370370,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0333333333333333,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0350877192982456,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0350877192982456,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0344827586206897,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0327868852459016,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0327868852459016,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0338983050847458,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0303030303030303,
-                               0.0303030303030303,
-                               0.0303030303030303,
-                               0.0303030303030303,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0322580645161290,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0322580645161290,
-                               0.0317460317460317,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0937500000000000,
-                               0.0952380952380952,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.1000000000000000,
-                               0.1147540983606560,
-                               0.1147540983606560,
-                               0.1290322580645160,
-                               0.1290322580645160,
-                               0.1290322580645160,
-                               0.1290322580645160,
-                               0.1311475409836070,
-                               0.1333333333333330,
-                               0.1355932203389830,
-                               0.1355932203389830,
-                               0.1333333333333330,
-                               0.1333333333333330,
-                               0.1290322580645160,
-                               0.1269841269841270,
-                               0.1406250000000000,
-                               0.1538461538461540,
-                               0.1538461538461540,
-                               0.1538461538461540,
-                               0.1538461538461540,
-                               0.1562500000000000,
-                               0.1538461538461540,
-                               0.1538461538461540,
-                               0.1538461538461540,
-                               0.1538461538461540,
-                               0.1562500000000000,
-                               0.1562500000000000,
-                               0.1587301587301590,
-                               0.1587301587301590,
-                               0.1587301587301590,
-                               0.1587301587301590,
-                               0.1587301587301590,
-                               0.1562500000000000,
-                               0.1562500000000000,
-                               0.1562500000000000,
-                               0.1562500000000000,
-                               0.1562500000000000,
-                               0.1718750000000000,
-                               0.1718750000000000,
-                               0.1718750000000000,
-                               0.1718750000000000,
-                               0.1718750000000000,
-                               0.1718750000000000,
-                               0.1718750000000000,
-                               0.1846153846153850,
-                               0.1875000000000000,
-                               0.1875000000000000,
-                               0.1875000000000000,
-                               0.1846153846153850,
-                               0.1846153846153850,
-                               0.1846153846153850,
-                               0.1904761904761900,
-                               0.1774193548387100,
-                               0.1803278688524590,
-                               0.1803278688524590,
-                               0.1803278688524590,
-                               0.1864406779661020,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1929824561403510,
-                               0.2000000000000000,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.2000000000000000,
-                               0.2037037037037040,
-                               0.2037037037037040,
-                               0.2037037037037040,
-                               0.2115384615384620,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2181818181818180,
-                               0.2181818181818180,
-                               0.2142857142857140,
-                               0.2142857142857140,
-                               0.2142857142857140,
-                               0.2241379310344830,
-                               0.2241379310344830,
-                               0.2280701754385960,
-                               0.2321428571428570,
-                               0.2363636363636360,
-                               0.2321428571428570,
-                               0.2321428571428570,
-                               0.2321428571428570,
-                               0.2321428571428570,
-                               0.2407407407407410,
-                               0.2592592592592590,
-                               0.2745098039215690,
-                               0.2745098039215690,
-                               0.2884615384615380,
-                               0.3000000000000000,
-                               0.3265306122448980,
-                               0.3265306122448980,
-                               0.3400000000000000,
-                               0.3400000000000000,
-                               0.3400000000000000,
-                               0.3400000000000000,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3469387755102040,
-                               0.3469387755102040,
-                               0.3469387755102040,
-                               0.3541666666666670,
-                               0.3541666666666670,
-                               0.3400000000000000,
-                               0.3469387755102040,
-                               0.3469387755102040,
-                               0.3469387755102040,
-                               0.3469387755102040,
-                               0.3653846153846150,
-                               0.3888888888888890,
-                               0.4107142857142860,
-                               0.4107142857142860,
-                               0.4107142857142860,
-                               0.4181818181818180,
-                               0.4181818181818180,
-                               0.4181818181818180,
-                               0.4385964912280700,
-                               0.4285714285714290,
-                               0.4285714285714290,
-                               0.4285714285714290,
-                               0.4285714285714290,
-                               0.4285714285714290,
-                               0.4464285714285710,
-                               0.4545454545454550,
-                               0.4444444444444440,
-                               0.4444444444444440,
-                               0.4444444444444440,
-                               0.4705882352941180,
-                               0.5000000000000000,
-                               0.5098039215686270,
-                               0.5098039215686270,
-                               0.5192307692307690,
-                               0.5098039215686270,
-                               0.5098039215686270,
-                               0.5098039215686270,
-                               0.5000000000000000,
-                               0.5000000000000000,
-                               0.4905660377358490,
-                               0.4814814814814810,
-                               0.4814814814814810,
-                               0.4814814814814810,
-                               0.4727272727272730,
-                               0.4727272727272730,
-                               0.4727272727272730,
-                               0.4727272727272730,
-                               0.4727272727272730,
-                               0.4807692307692310,
-                               0.4807692307692310,
-                               0.4807692307692310,
-                               0.4905660377358490,
-                               0.5000000000000000,
-                               0.5000000000000000,
-                               0.4909090909090910,
-                               0.4909090909090910,
-                               0.5192307692307690,
-                               0.5370370370370370,
-                               0.5370370370370370,
-                               0.5370370370370370,
-                               0.5576923076923080,
-                               0.5576923076923080,
-                               0.5918367346938780,
-                               0.5918367346938780,
-                               0.5918367346938780,
-                               0.5918367346938780,
-                               0.5918367346938780,
-                               0.6170212765957450,
-                               0.6304347826086960,
-                               0.6304347826086960,
-                               0.6666666666666670,
-                               0.6739130434782610,
-                               0.6808510638297870,
-                               0.6458333333333330,
-                               0.6595744680851060,
-                               0.6595744680851060,
-                               0.6595744680851060,
-                               0.6595744680851060,
-                               0.6458333333333330,
-                               0.6458333333333330,
-                               0.6530612244897960,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6875000000000000,
-                               0.6938775510204080,
-                               0.7083333333333330,
-                               0.7234042553191490,
-                               0.7083333333333330,
-                               0.7083333333333330,
-                               0.7083333333333330,
-                               0.7083333333333330,
-                               0.7083333333333330,
-                               0.6938775510204080,
-                               0.6938775510204080,
-                               0.7000000000000000,
-                               0.7000000000000000,
-                               0.7058823529411760,
-                               0.7058823529411760,
-                               0.6923076923076920,
-                               0.6923076923076920,
-                               0.6981132075471700,
-                               0.7169811320754720,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7090909090909090,
-                               0.7090909090909090,
-                               0.7090909090909090,
-                               0.7090909090909090,
-                               0.7090909090909090,
-                               0.7090909090909090,
-                               0.7222222222222220,
-                               0.7222222222222220,
-                               0.7222222222222220,
-                               0.7358490566037730,
-                               0.7407407407407410,
-                               0.7547169811320760,
-                               0.7142857142857140,
-                               0.7142857142857140,
-                               0.7142857142857140,
-                               0.7272727272727270,
-                               0.7454545454545450,
-                               0.7321428571428570,
-                               0.7321428571428570,
-                               0.7321428571428570,
-                               0.7321428571428570,
-                               0.7368421052631580,
-                               0.7368421052631580,
-                               0.7241379310344830,
-                               0.7241379310344830,
-                               0.7241379310344830,
-                               0.7241379310344830,
-                               0.7288135593220340,
-                               0.7377049180327870,
-                               0.7377049180327870,
-                               0.7377049180327870,
-                               0.7377049180327870,
-                               0.7377049180327870,
-                               0.7377049180327870,
-                               0.7377049180327870,
-                               0.7377049180327870,
-                               0.7377049180327870,
-                               0.7333333333333330,
-                               0.7333333333333330,
-                               0.7333333333333330,
-                               0.7213114754098360,
-                               0.7258064516129030,
-                               0.7377049180327870,
-                               0.7377049180327870,
-                               0.7377049180327870,
-                               0.7419354838709680,
-                               0.7419354838709680,
-                               0.7419354838709680,
-                               0.7666666666666670,
-                               0.7666666666666670,
-                               0.7666666666666670,
-                               0.7666666666666670,
-                               0.7666666666666670,
-                               0.7796610169491530,
-                               0.8214285714285710,
-                               0.8070175438596490,
-                               0.8070175438596490,
-                               0.8070175438596490,
-                               0.8070175438596490,
-                               0.8070175438596490,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8070175438596490,
-                               0.8070175438596490,
-                               0.8070175438596490,
-                               0.8070175438596490,
-                               0.8035714285714290,
-                               0.8035714285714290,
-                               0.8035714285714290,
-                               0.7758620689655170,
-                               0.7758620689655170,
-                               0.7796610169491530,
-                               0.7833333333333330,
-                               0.7868852459016390,
-                               0.8000000000000000,
-                               0.7868852459016390,
-                               0.7868852459016390,
-                               0.7868852459016390,
-                               0.7903225806451610,
-                               0.7903225806451610,
-                               0.7903225806451610,
-                               0.7903225806451610,
-                               0.8032786885245900,
-                               0.8032786885245900,
-                               0.7903225806451610,
-                               0.7903225806451610,
-                               0.7936507936507940,
-                               0.7846153846153850,
-                               0.7846153846153850,
-                               0.7846153846153850,
-                               0.7846153846153850,
-                               0.7968750000000000,
-                               0.7968750000000000,
-                               0.7968750000000000,
-                               0.7846153846153850,
-                               0.7846153846153850,
-                               0.7846153846153850,
-                               0.7846153846153850,
-                               0.8000000000000000,
-                               0.8000000000000000,
-                               0.8000000000000000,
-                               0.8000000000000000,
-                               0.8125000000000000,
-                               0.8225806451612900,
-                               0.8225806451612900,
-                               0.8644067796610170,
-                               0.8644067796610170,
-                               0.8644067796610170,
-                               0.8644067796610170,
-                               0.8793103448275860,
-                               0.8793103448275860,
-                               0.8833333333333330,
-                               0.8833333333333330,
-                               0.8833333333333330,
-                               0.8833333333333330,
-                               0.8833333333333330,
-                               0.8833333333333330,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8906250000000000,
-                               0.8906250000000000,
-                               0.8769230769230770,
-                               0.8769230769230770,
-                               0.8769230769230770,
-                               0.8769230769230770,
-                               0.8769230769230770,
-                               0.8769230769230770,
-                               0.8769230769230770,
-                               0.8769230769230770,
-                               0.8769230769230770,
-                               0.8769230769230770,
-                               0.8730158730158730,
-                               0.8888888888888890,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9193548387096770,
-                               0.9193548387096770,
-                               0.9193548387096770,
-                               0.9193548387096770,
-                               0.9206349206349210,
-                               0.9206349206349210,
-                               0.9206349206349210,
-                               0.9206349206349210,
-                               0.9206349206349210,
-                               0.9206349206349210,
-                               0.9206349206349210,
-                               0.9354838709677420,
-                               0.9354838709677420,
-                               0.9354838709677420,
-                               0.9354838709677420,
-                               0.9365079365079360,
-                               0.9365079365079360,
-                               0.9365079365079360,
-                               0.9365079365079360,
-                               0.9365079365079360,
-                               0.9354838709677420,
-                               0.9354838709677420,
-                               0.9354838709677420,
-                               0.9354838709677420,
-                               0.9365079365079360,
-                               0.9365079365079360,
-                               0.9365079365079360,
-                               0.9365079365079360,
-                               0.9365079365079360,
-                               0.9365079365079360,
-                               0.9218750000000000,
-                               0.9218750000000000,
-                               0.9218750000000000,
-                               0.9218750000000000,
-                               0.9230769230769230,
-                               0.9230769230769230,
-                               0.9230769230769230,
-                               0.9230769230769230,
-                               0.9230769230769230,
-                               0.9230769230769230,
-                               0.9242424242424240,
-                               0.9242424242424240,
-                               0.9242424242424240,
-                               0.9242424242424240,
-                               0.9242424242424240,
-                               0.9242424242424240,
-                               0.9242424242424240,
-                               0.9242424242424240,
-                               0.9242424242424240,
-                               0.9242424242424240,
-                               0.9253731343283580,
-                               0.9264705882352940,
-                               0.9264705882352940,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9285714285714290,
-                               0.9285714285714290,
-                               0.9285714285714290,
-                               0.9285714285714290,
-                               0.9285714285714290,
-                               0.9285714285714290,
-                               0.9285714285714290,
-                               0.9285714285714290,
-                               0.9420289855072460,
-                               0.9420289855072460,
-                               0.9420289855072460,
-                               0.9420289855072460,
-                               0.9420289855072460,
-                               0.9420289855072460,
-                               0.9420289855072460,
-                               0.9420289855072460,
-                               0.9420289855072460,
-                               0.9420289855072460,
-                               0.9420289855072460,
-                               0.9420289855072460,
-                               0.9420289855072460,
-                               0.9420289855072460,
-                               0.9420289855072460,
-                               0.9420289855072460,
-                               0.9420289855072460,
-                               0.9420289855072460,
-                               0.9428571428571430,
-                               0.9428571428571430,
-                               0.9428571428571430,
-                               0.9428571428571430,
-                               0.9428571428571430,
-                               0.9428571428571430,
-                               0.9428571428571430,
-                               0.9428571428571430,
-                               0.9428571428571430,
-                               0.9428571428571430,
-                               0.9428571428571430,
-                               0.9428571428571430,
-                               0.9428571428571430,
-                               0.9428571428571430,
-                               0.9428571428571430,
-                               0.9428571428571430,
-                               0.9428571428571430,
-                               0.9428571428571430,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9565217391304350,
-                               0.9705882352941180,
-                               0.9705882352941180,
-                               0.9705882352941180,
-                               0.9705882352941180,
-                               0.9705882352941180,
-                               0.9705882352941180,
-                               0.9705882352941180,
-                               0.9705882352941180,
-                               0.9705882352941180,
-                               0.9705882352941180,
-                               0.9705882352941180,
-                               0.9705882352941180,
-                               0.9705882352941180,
-                               0.9701492537313430,
-                               0.9701492537313430,
-                               0.9701492537313430,
-                               0.9701492537313430,
-                               0.9701492537313430,
-                               0.9701492537313430,
-                               0.9701492537313430,
-                               0.9701492537313430,
-                               0.9701492537313430,
-                               0.9701492537313430,
-                               0.9701492537313430,
-                               0.9701492537313430,
-                               0.9701492537313430,
-                               0.9701492537313430,
-                               0.9701492537313430,
-                               0.9701492537313430,
-                               0.9701492537313430,
-                               0.9701492537313430,
-                               0.9701492537313430,
-                               0.9701492537313430,
-                               0.9701492537313430,
-                               0.9701492537313430,
-                               0.9701492537313430,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9687500000000000,
-                               0.9687500000000000,
-                               0.9687500000000000,
-                               0.9687500000000000,
-                               0.9687500000000000,
-                               0.9687500000000000,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9696969696969700,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9692307692307690,
-                               0.9687500000000000,
-                               0.9687500000000000,
-                               0.9687500000000000,
-                               0.9687500000000000,
-                               0.9687500000000000,
-                               0.9692307692307690,
-                               0.9687500000000000,
-                               0.9687500000000000,
-                               0.9687500000000000,
-                               0.9687500000000000,
-                               0.9687500000000000,
-                               0.9538461538461540,
-                               0.9538461538461540,
-                               0.9538461538461540,
-                               0.9538461538461540,
-                               0.9538461538461540,
-                               0.9538461538461540,
-                               0.9538461538461540,
-                               0.9538461538461540,
-                               0.9538461538461540,
-                               0.9538461538461540,
-                               0.9538461538461540,
-                               0.9538461538461540,
-                               0.9538461538461540,
-                               0.9365079365079360,
-                               0.9365079365079360,
-                               0.9365079365079360,
-                               0.9365079365079360,
-                               0.9365079365079360,
-                               0.9365079365079360,
-                               0.9218750000000000,
-                               0.9218750000000000,
-                               0.9218750000000000,
-                               0.9218750000000000,
-                               0.9218750000000000,
-                               0.9218750000000000,
-                               0.9218750000000000,
-                               0.9206349206349210,
-                               0.9206349206349210,
-                               0.9206349206349210,
-                               0.9206349206349210,
-                               0.9193548387096770,
-                               0.9193548387096770,
-                               0.9180327868852460,
-                               0.9180327868852460,
-                               0.9180327868852460,
-                               0.9180327868852460,
-                               0.9180327868852460,
-                               0.9333333333333330,
-                               0.9322033898305080,
-                               0.9322033898305080,
-                               0.9322033898305080,
-                               0.9322033898305080,
-                               0.9166666666666670,
-                               0.9322033898305080,
-                               0.8870967741935480,
-                               0.8870967741935480,
-                               0.8870967741935480,
-                               0.8870967741935480,
-                               0.8870967741935480,
-                               0.8870967741935480,
-                               0.8870967741935480,
-                               0.8870967741935480,
-                               0.8852459016393440,
-                               0.8833333333333330,
-                               0.8833333333333330,
-                               0.8833333333333330,
-                               0.8813559322033900,
-                               0.8813559322033900,
-                               0.8813559322033900,
-                               0.8813559322033900,
-                               0.8793103448275860,
-                               0.8793103448275860,
-                               0.8793103448275860,
-                               0.8793103448275860,
-                               0.8793103448275860,
-                               0.8644067796610170,
-                               0.8666666666666670,
-                               0.8524590163934430,
-                               0.8500000000000000,
-                               0.8500000000000000,
-                               0.8500000000000000,
-                               0.8500000000000000,
-                               0.8474576271186440,
-                               0.8196721311475410,
-                               0.8196721311475410,
-                               0.8196721311475410,
-                               0.8196721311475410,
-                               0.8166666666666670,
-                               0.8103448275862070,
-                               0.8103448275862070,
-                               0.8103448275862070,
-                               0.8035714285714290,
-                               0.8035714285714290,
-                               0.8035714285714290,
-                               0.8000000000000000,
-                               0.7857142857142860,
-                               0.7857142857142860,
-                               0.7857142857142860,
-                               0.7857142857142860,
-                               0.7636363636363640,
-                               0.7592592592592590,
-                               0.7547169811320760,
-                               0.7547169811320760,
-                               0.7547169811320760,
-                               0.7500000000000000,
-                               0.7450980392156860,
-                               0.7346938775510200,
-                               0.7200000000000000,
-                               0.7200000000000000,
-                               0.7058823529411760,
-                               0.7000000000000000,
-                               0.6862745098039220,
-                               0.6730769230769230,
-                               0.6730769230769230,
-                               0.6730769230769230,
-                               0.6730769230769230,
-                               0.6730769230769230,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6538461538461540,
-                               0.6470588235294120,
-                               0.6346153846153850,
-                               0.6346153846153850,
-                               0.6346153846153850,
-                               0.6346153846153850,
-                               0.6346153846153850,
-                               0.6346153846153850,
-                               0.6346153846153850,
-                               0.6226415094339620,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.5818181818181820,
-                               0.5818181818181820,
-                               0.5818181818181820,
-                               0.5714285714285710,
-                               0.5714285714285710,
-                               0.5614035087719300,
-                               0.5517241379310340,
-                               0.5272727272727270,
-                               0.5272727272727270,
-                               0.5272727272727270,
-                               0.5272727272727270,
-                               0.5178571428571430,
-                               0.5178571428571430,
-                               0.4909090909090910,
-                               0.4821428571428570,
-                               0.4821428571428570,
-                               0.4736842105263160,
-                               0.4482758620689660,
-                               0.4482758620689660,
-                               0.4385964912280700,
-                               0.4385964912280700,
-                               0.4385964912280700,
-                               0.4385964912280700,
-                               0.4385964912280700,
-                               0.4385964912280700,
-                               0.3962264150943400,
-                               0.3962264150943400,
-                               0.3962264150943400,
-                               0.3962264150943400,
-                               0.3962264150943400,
-                               0.3888888888888890,
-                               0.3818181818181820,
-                               0.3818181818181820,
-                               0.3703703703703700,
-                               0.3636363636363640,
-                               0.3636363636363640,
-                               0.3636363636363640,
-                               0.3636363636363640,
-                               0.3636363636363640,
-                               0.3518518518518520,
-                               0.3137254901960780,
-                               0.2941176470588230,
-                               0.2800000000000000,
-                               0.2653061224489800,
-                               0.2653061224489800,
-                               0.2500000000000000,
-                               0.2500000000000000,
-                               0.2500000000000000,
-                               0.2500000000000000,
-                               0.2400000000000000,
-                               0.2400000000000000,
-                               0.2200000000000000,
-                               0.2156862745098040,
-                               0.2156862745098040,
-                               0.2156862745098040,
-                               0.2115384615384620,
-                               0.2115384615384620,
-                               0.2075471698113210,
-                               0.2075471698113210,
-                               0.2075471698113210,
-                               0.2075471698113210,
-                               0.1886792452830190,
-                               0.1886792452830190,
-                               0.1886792452830190,
-                               0.1886792452830190,
-                               0.1851851851851850,
-                               0.1851851851851850,
-                               0.1754385964912280,
-                               0.1754385964912280,
-                               0.1754385964912280,
-                               0.1724137931034480,
-                               0.1724137931034480,
-                               0.1724137931034480,
-                               0.1694915254237290,
-                               0.1694915254237290,
-                               0.1639344262295080,
-                               0.1639344262295080,
-                               0.1639344262295080,
-                               0.1612903225806450,
-                               0.1406250000000000,
-                               0.1406250000000000,
-                               0.1384615384615380,
-                               0.1384615384615380,
-                               0.1406250000000000,
-                               0.1406250000000000,
-                               0.1384615384615380,
-                               0.1384615384615380,
-                               0.1363636363636360,
-                               0.1363636363636360,
-                               0.1363636363636360,
-                               0.1343283582089550,
-                               0.1343283582089550,
-                               0.1343283582089550,
-                               0.1323529411764710,
-                               0.1304347826086960,
-                               0.1304347826086960,
-                               0.1323529411764710,
-                               0.1323529411764710,
-                               0.1323529411764710,
-                               0.1323529411764710,
-                               0.1323529411764710,
-                               0.1285714285714290,
-                               0.1267605633802820,
-                               0.1142857142857140,
-                               0.1142857142857140,
-                               0.1159420289855070,
-                               0.1159420289855070,
-                               0.1159420289855070,
-                               0.1029411764705880,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0869565217391304,
-                               0.0869565217391304,
-                               0.0869565217391304,
-                               0.0869565217391304,
-                               0.0869565217391304,
-                               0.0869565217391304,
-                               0.0869565217391304,
-                               0.0869565217391304,
-                               0.0869565217391304,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0869565217391304,
-                               0.0857142857142857,
-                               0.0857142857142857,
-                               0.0857142857142857,
-                               0.0857142857142857,
-                               0.0857142857142857,
-                               0.0857142857142857,
-                               0.0857142857142857,
-                               0.0857142857142857,
-                               0.0857142857142857,
-                               0.0857142857142857,
-                               0.0857142857142857,
-                               0.0857142857142857,
-                               0.0857142857142857,
-                               0.0857142857142857,
-                               0.0857142857142857,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0735294117647059,
-                               0.0724637681159420,
-                               0.0735294117647059,
-                               0.0746268656716418,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0781250000000000,
-                               0.0769230769230769,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0769230769230769,
-                               0.0781250000000000,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0625000000000000,
-                               0.0625000000000000,
-                               0.0615384615384615,
-                               0.0615384615384615,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0645161290322581,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0625000000000000,
-                               0.0625000000000000,
-                               0.0625000000000000,
-                               0.0625000000000000,
-                               0.0625000000000000,
-                               0.0625000000000000,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0666666666666667,
-                               0.0645161290322581,
-                               0.0625000000000000,
-                               0.0625000000000000,
-                               0.0625000000000000,
-                               0.0625000000000000,
-                               0.0597014925373134,
-                               0.0597014925373134,
-                               0.0597014925373134,
-                               0.0597014925373134,
-                               0.0597014925373134,
-                               0.0606060606060606,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0571428571428571,
-                               0.0571428571428571,
-                               0.0571428571428571,
-                               0.0571428571428571,
-                               0.0571428571428571,
-                               0.0571428571428571,
-                               0.0571428571428571,
-                               0.0571428571428571,
-                               0.0563380281690141,
-                               0.0563380281690141,
-                               0.0571428571428571,
-                               0.0579710144927536,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0597014925373134,
-                               0.0606060606060606,
-                               0.0597014925373134,
-                               0.0588235294117647,
-                               0.0579710144927536,
-                               0.0571428571428571,
-                               0.0571428571428571,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0597014925373134,
-                               0.0597014925373134,
-                               0.0597014925373134,
-                               0.0735294117647059,
-                               0.0735294117647059,
-                               0.0746268656716418,
-                               0.0735294117647059,
-                               0.0735294117647059,
-                               0.0735294117647059,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0704225352112676,
-                               0.0694444444444444,
-                               0.0694444444444444,
-                               0.0694444444444444,
-                               0.0684931506849315,
-                               0.0684931506849315,
-                               0.0684931506849315,
-                               0.0684931506849315,
-                               0.0684931506849315,
-                               0.0684931506849315,
-                               0.0684931506849315,
-                               0.0684931506849315,
-                               0.0684931506849315,
-                               0.0684931506849315,
-                               0.0684931506849315,
-                               0.0684931506849315,
-                               0.0694444444444444,
-                               0.0694444444444444,
-                               0.0694444444444444,
-                               0.0694444444444444,
-                               0.0694444444444444,
-                               0.0694444444444444,
-                               0.0704225352112676,
-                               0.0704225352112676,
-                               0.0704225352112676,
-                               0.0704225352112676,
-                               0.0704225352112676,
-                               0.0704225352112676,
-                               0.0704225352112676,
-                               0.0694444444444444,
-                               0.0694444444444444,
-                               0.0563380281690141,
-                               0.0563380281690141,
-                               0.0563380281690141,
-                               0.0563380281690141,
-                               0.0563380281690141,
-                               0.0563380281690141,
-                               0.0563380281690141,
-                               0.0563380281690141,
-                               0.0563380281690141,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0563380281690141,
-                               0.0571428571428571,
-                               0.0571428571428571,
-                               0.0571428571428571,
-                               0.0571428571428571,
-                               0.0571428571428571,
-                               0.0571428571428571,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0422535211267606,
-                               0.0428571428571429,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0422535211267606,
-                               0.0422535211267606,
-                               0.0422535211267606,
-                               0.0422535211267606,
-                               0.0422535211267606,
-                               0.0422535211267606,
-                               0.0422535211267606,
-                               0.0428571428571429,
-                               0.0434782608695652,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0447761194029851,
-                               0.0447761194029851,
-                               0.0447761194029851,
-                               0.0447761194029851,
-                               0.0447761194029851,
-                               0.0447761194029851,
-                               0.0447761194029851,
-                               0.0447761194029851,
-                               0.0447761194029851,
-                               0.0597014925373134,
-                               0.0597014925373134,
-                               0.0597014925373134,
-                               0.0597014925373134,
-                               0.0597014925373134,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0735294117647059,
-                               0.0735294117647059,
-                               0.0724637681159420,
-                               0.0735294117647059,
-                               0.0724637681159420,
-                               0.0857142857142857,
-                               0.0857142857142857,
-                               0.0985915492957746,
-                               0.0985915492957746,
-                               0.1000000000000000,
-                               0.1014492753623190,
-                               0.1029411764705880,
-                               0.1029411764705880,
-                               0.1029411764705880,
-                               0.1029411764705880,
-                               0.1029411764705880,
-                               0.1029411764705880,
-                               0.1029411764705880,
-                               0.1044776119402990,
-                               0.1044776119402990,
-                               0.1044776119402990,
-                               0.1044776119402990,
-                               0.1194029850746270,
-                               0.1194029850746270,
-                               0.1194029850746270,
-                               0.1194029850746270,
-                               0.1194029850746270,
-                               0.1194029850746270,
-                               0.1323529411764710,
-                               0.1323529411764710,
-                               0.1323529411764710,
-                               0.1323529411764710,
-                               0.1323529411764710,
-                               0.1323529411764710,
-                               0.1323529411764710,
-                               0.1470588235294120,
-                               0.1449275362318840,
-                               0.1449275362318840,
-                               0.1449275362318840,
-                               0.1470588235294120,
-                               0.1470588235294120,
-                               0.1449275362318840,
-                               0.1323529411764710,
-                               0.1323529411764710,
-                               0.1323529411764710,
-                               0.1323529411764710,
-                               0.1343283582089550,
-                               0.1212121212121210,
-                               0.1194029850746270,
-                               0.1194029850746270,
-                               0.1212121212121210,
-                               0.1194029850746270,
-                               0.1194029850746270,
-                               0.1343283582089550,
-                               0.1343283582089550,
-                               0.1343283582089550,
-                               0.1343283582089550,
-                               0.1343283582089550,
-                               0.1470588235294120,
-                               0.1492537313432840,
-                               0.1515151515151520,
-                               0.1515151515151520,
-                               0.1515151515151520,
-                               0.1515151515151520,
-                               0.1515151515151520,
-                               0.1538461538461540,
-                               0.1538461538461540,
-                               0.1666666666666670,
-                               0.1666666666666670,
-                               0.1791044776119400,
-                               0.1791044776119400,
-                               0.1818181818181820,
-                               0.1875000000000000,
-                               0.1746031746031750,
-                               0.1746031746031750,
-                               0.1746031746031750,
-                               0.1746031746031750,
-                               0.1746031746031750,
-                               0.1774193548387100,
-                               0.1639344262295080,
-                               0.1639344262295080,
-                               0.1639344262295080,
-                               0.1639344262295080,
-                               0.1666666666666670,
-                               0.1803278688524590,
-                               0.1803278688524590,
-                               0.1803278688524590,
-                               0.1833333333333330,
-                               0.1833333333333330,
-                               0.2131147540983610,
-                               0.2166666666666670,
-                               0.2166666666666670,
-                               0.2131147540983610,
-                               0.2258064516129030,
-                               0.2258064516129030,
-                               0.2258064516129030,
-                               0.2258064516129030,
-                               0.2258064516129030,
-                               0.2295081967213110,
-                               0.2295081967213110,
-                               0.2333333333333330,
-                               0.2333333333333330,
-                               0.2333333333333330,
-                               0.2333333333333330,
-                               0.2333333333333330,
-                               0.2333333333333330,
-                               0.2333333333333330,
-                               0.2333333333333330,
-                               0.2333333333333330,
-                               0.2333333333333330,
-                               0.2372881355932200,
-                               0.2456140350877190,
-                               0.2363636363636360,
-                               0.2631578947368420,
-                               0.2631578947368420,
-                               0.2586206896551720,
-                               0.2631578947368420,
-                               0.2631578947368420,
-                               0.2678571428571430,
-                               0.2727272727272730,
-                               0.2857142857142860,
-                               0.2857142857142860,
-                               0.2857142857142860,
-                               0.2909090909090910,
-                               0.2962962962962960,
-                               0.2830188679245280,
-                               0.3076923076923080,
-                               0.3076923076923080,
-                               0.3076923076923080,
-                               0.3207547169811320,
-                               0.3207547169811320,
-                               0.3207547169811320,
-                               0.3750000000000000,
-                               0.3750000000000000,
-                               0.3750000000000000,
-                               0.3958333333333330,
-                               0.3958333333333330,
-                               0.3958333333333330,
-                               0.3877551020408160,
-                               0.3958333333333330,
-                               0.3958333333333330,
-                               0.4081632653061220,
-                               0.4038461538461540,
-                               0.4074074074074070,
-                               0.4035087719298250,
-                               0.3965517241379310,
-                               0.3965517241379310,
-                               0.4067796610169490,
-                               0.4166666666666670,
-                               0.4166666666666670,
-                               0.4166666666666670,
-                               0.4237288135593220,
-                               0.4237288135593220,
-                               0.4237288135593220,
-                               0.4310344827586210,
-                               0.4310344827586210,
-                               0.4237288135593220,
-                               0.4237288135593220,
-                               0.4237288135593220,
-                               0.4333333333333330,
-                               0.4426229508196720,
-                               0.4426229508196720,
-                               0.4516129032258060,
-                               0.4516129032258060,
-                               0.4375000000000000,
-                               0.4375000000000000,
-                               0.4375000000000000,
-                               0.4375000000000000,
-                               0.4531250000000000,
-                               0.4461538461538460,
-                               0.4461538461538460,
-                               0.4285714285714290,
-                               0.4354838709677420,
-                               0.4262295081967210,
-                               0.4482758620689660,
-                               0.4482758620689660,
-                               0.4406779661016950,
-                               0.4406779661016950,
-                               0.4406779661016950,
-                               0.4576271186440680,
-                               0.4590163934426230,
-                               0.4677419354838710,
-                               0.4915254237288140,
-                               0.4915254237288140,
-                               0.4915254237288140,
-                               0.5000000000000000,
-                               0.5081967213114750,
-                               0.5081967213114750,
-                               0.5081967213114750,
-                               0.5081967213114750,
-                               0.5166666666666670,
-                               0.5166666666666670,
-                               0.5166666666666670,
-                               0.5166666666666670,
-                               0.5081967213114750,
-                               0.5081967213114750,
-                               0.5081967213114750,
-                               0.5000000000000000,
-                               0.5084745762711860,
-                               0.5084745762711860,
-                               0.5000000000000000,
-                               0.5000000000000000,
-                               0.5081967213114750,
-                               0.5161290322580650,
-                               0.5076923076923080,
-                               0.5156250000000000,
-                               0.5238095238095240,
-                               0.5238095238095240,
-                               0.5238095238095240,
-                               0.5245901639344260,
-                               0.5333333333333330,
-                               0.5245901639344260,
-                               0.5500000000000000,
-                               0.5500000000000000,
-                               0.5573770491803280,
-                               0.5645161290322580,
-                               0.5645161290322580,
-                               0.5645161290322580,
-                               0.5645161290322580,
-                               0.5645161290322580,
-                               0.5645161290322580,
-                               0.5645161290322580,
-                               0.5645161290322580,
-                               0.5645161290322580,
-                               0.5625000000000000,
-                               0.5538461538461540,
-                               0.5454545454545450,
-                               0.5454545454545450,
-                               0.5454545454545450,
-                               0.5454545454545450,
-                               0.5384615384615380,
-                               0.5384615384615380,
-                               0.5384615384615380,
-                               0.5454545454545450,
-                               0.5588235294117650,
-                               0.5588235294117650,
-                               0.5671641791044780,
-                               0.5588235294117650,
-                               0.5588235294117650,
-                               0.5588235294117650,
-                               0.5757575757575760,
-                               0.5757575757575760,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6290322580645160,
-                               0.6290322580645160,
-                               0.6290322580645160,
-                               0.6393442622950820,
-                               0.6393442622950820,
-                               0.6393442622950820,
-                               0.6271186440677970,
-                               0.6271186440677970,
-                               0.6271186440677970,
-                               0.6206896551724140,
-                               0.6206896551724140,
-                               0.6206896551724140,
-                               0.6428571428571430,
-                               0.6428571428571430,
-                               0.6315789473684210,
-                               0.6428571428571430,
-                               0.6428571428571430,
-                               0.6363636363636360,
-                               0.6363636363636360,
-                               0.6363636363636360,
-                               0.6363636363636360,
-                               0.6363636363636360,
-                               0.6481481481481480,
-                               0.6481481481481480,
-                               0.6296296296296300,
-                               0.6296296296296300,
-                               0.6415094339622640,
-                               0.6296296296296300,
-                               0.6415094339622640,
-                               0.6226415094339620,
-                               0.6181818181818180,
-                               0.6296296296296300,
-                               0.6181818181818180,
-                               0.6181818181818180,
-                               0.6181818181818180,
-                               0.6181818181818180,
-                               0.6315789473684210,
-                               0.6428571428571430,
-                               0.6545454545454550,
-                               0.6607142857142860,
-                               0.6607142857142860,
-                               0.6607142857142860,
-                               0.6724137931034480,
-                               0.6724137931034480,
-                               0.6779661016949150,
-                               0.6779661016949150,
-                               0.6833333333333330,
-                               0.6833333333333330,
-                               0.7000000000000000,
-                               0.7000000000000000,
-                               0.7166666666666670,
-                               0.7166666666666670,
-                               0.7118644067796610,
-                               0.7118644067796610,
-                               0.7241379310344830,
-                               0.7241379310344830,
-                               0.7368421052631580,
-                               0.7368421052631580,
-                               0.7368421052631580,
-                               0.7118644067796610,
-                               0.7118644067796610,
-                               0.7118644067796610,
-                               0.7118644067796610,
-                               0.7118644067796610,
-                               0.7118644067796610,
-                               0.7118644067796610,
-                               0.7166666666666670,
-                               0.7049180327868850,
-                               0.7049180327868850,
-                               0.7049180327868850,
-                               0.7049180327868850,
-                               0.6935483870967740,
-                               0.6935483870967740,
-                               0.6935483870967740,
-                               0.7096774193548390,
-                               0.7096774193548390,
-                               0.7096774193548390,
-                               0.7096774193548390,
-                               0.7096774193548390,
-                               0.7096774193548390,
-                               0.6923076923076920,
-                               0.6923076923076920,
-                               0.6969696969696970,
-                               0.6969696969696970,
-                               0.7076923076923080,
-                               0.7076923076923080,
-                               0.6969696969696970,
-                               0.6969696969696970,
-                               0.6865671641791040,
-                               0.6865671641791040,
-                               0.6865671641791040,
-                               0.6911764705882350,
-                               0.6911764705882350,
-                               0.6911764705882350,
-                               0.6911764705882350,
-                               0.7014925373134330,
-                               0.7058823529411760,
-                               0.7058823529411760,
-                               0.7164179104477610,
-                               0.7164179104477610,
-                               0.7164179104477610,
-                               0.7164179104477610,
-                               0.7164179104477610,
-                               0.7164179104477610,
-                               0.7246376811594200,
-                               0.7246376811594200,
-                               0.7352941176470590,
-                               0.7352941176470590,
-                               0.7352941176470590,
-                               0.7352941176470590,
-                               0.7352941176470590,
-                               0.7352941176470590,
-                               0.7352941176470590,
-                               0.7462686567164180,
-                               0.7462686567164180,
-                               0.7575757575757580,
-                               0.7611940298507460,
-                               0.7611940298507460,
-                               0.7647058823529410,
-                               0.7681159420289850,
-                               0.7681159420289850,
-                               0.7681159420289850,
-                               0.7681159420289850,
-                               0.7681159420289850,
-                               0.7681159420289850,
-                               0.7826086956521740,
-                               0.7941176470588230,
-                               0.8059701492537310,
-                               0.8059701492537310,
-                               0.8059701492537310,
-                               0.8059701492537310,
-                               0.8059701492537310,
-                               0.8059701492537310,
-                               0.8059701492537310,
-                               0.8059701492537310,
-                               0.8059701492537310,
-                               0.8059701492537310,
-                               0.8181818181818180,
-                               0.8307692307692310,
-                               0.8307692307692310,
-                               0.8437500000000000,
-                               0.8437500000000000,
-                               0.8437500000000000,
-                               0.8461538461538460,
-                               0.8461538461538460,
-                               0.8484848484848480,
-                               0.8484848484848480,
-                               0.8484848484848480,
-                               0.8484848484848480,
-                               0.8507462686567160,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8695652173913040,
-                               0.8695652173913040,
-                               0.8695652173913040,
-                               0.8695652173913040,
-                               0.8695652173913040,
-                               0.8695652173913040,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8656716417910450,
-                               0.8636363636363640,
-                               0.8636363636363640,
-                               0.8636363636363640,
-                               0.8636363636363640,
-                               0.8636363636363640,
-                               0.8636363636363640,
-                               0.8656716417910450,
-                               0.8656716417910450,
-                               0.8695652173913040,
-                               0.8695652173913040,
-                               0.8695652173913040,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8636363636363640,
-                               0.8636363636363640,
-                               0.8769230769230770,
-                               0.8769230769230770,
-                               0.8769230769230770,
-                               0.8769230769230770,
-                               0.8769230769230770,
-                               0.8769230769230770,
-                               0.8906250000000000,
-                               0.8906250000000000,
-                               0.8906250000000000,
-                               0.8923076923076920,
-                               0.8923076923076920,
-                               0.8923076923076920,
-                               0.8923076923076920,
-                               0.8939393939393940,
-                               0.8939393939393940,
-                               0.8939393939393940,
-                               0.8939393939393940,
-                               0.8939393939393940,
-                               0.8939393939393940,
-                               0.8939393939393940,
-                               0.8939393939393940,
-                               0.8939393939393940,
-                               0.8939393939393940,
-                               0.8955223880597010,
-                               0.8955223880597010,
-                               0.8955223880597010,
-                               0.8955223880597010,
-                               0.8955223880597010,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9014084507042250,
-                               0.9014084507042250,
-                               0.9014084507042250,
-                               0.9014084507042250,
-                               0.9014084507042250,
-                               0.9014084507042250,
-                               0.9014084507042250,
-                               0.9142857142857140,
-                               0.9142857142857140,
-                               0.9142857142857140,
-                               0.9142857142857140,
-                               0.9142857142857140,
-                               0.9154929577464790,
-                               0.9154929577464790,
-                               0.9154929577464790,
-                               0.9154929577464790,
-                               0.9154929577464790,
-                               0.9154929577464790,
-                               0.9154929577464790,
-                               0.9166666666666670,
-                               0.9166666666666670,
-                               0.9166666666666670,
-                               0.9166666666666670,
-                               0.9166666666666670,
-                               0.9166666666666670,
-                               0.9166666666666670,
-                               0.9166666666666670,
-                               0.9295774647887320,
-                               0.9295774647887320,
-                               0.9295774647887320,
-                               0.9295774647887320,
-                               0.9295774647887320,
-                               0.9295774647887320,
-                               0.9295774647887320,
-                               0.9295774647887320,
-                               0.9295774647887320,
-                               0.9295774647887320,
-                               0.9295774647887320,
-                               0.9295774647887320,
-                               0.9295774647887320,
-                               0.9305555555555560,
-                               0.9305555555555560,
-                               0.9305555555555560,
-                               0.9305555555555560,
-                               0.9305555555555560,
-                               0.9315068493150680,
-                               0.9315068493150680,
-                               0.9315068493150680,
-                               0.9315068493150680,
-                               0.9315068493150680,
-                               0.9315068493150680,
-                               0.9315068493150680,
-                               0.9315068493150680,
-                               0.9315068493150680,
-                               0.9315068493150680,
-                               0.9315068493150680,
-                               0.9315068493150680,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9324324324324320,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9459459459459460,
-                               0.9459459459459460,
-                               0.9459459459459460,
-                               0.9459459459459460,
-                               0.9459459459459460,
-                               0.9459459459459460,
-                               0.9459459459459460,
-                               0.9459459459459460,
-                               0.9459459459459460,
-                               0.9459459459459460,
-                               0.9459459459459460,
-                               0.9459459459459460,
-                               0.9459459459459460,
-                               0.9459459459459460,
-                               0.9459459459459460,
-                               0.9459459459459460,
-                               0.9459459459459460,
-                               0.9459459459459460,
-                               0.9459459459459460,
-                               0.9459459459459460,
-                               0.9459459459459460,
-                               0.9459459459459460,
-                               0.9459459459459460,
-                               0.9459459459459460,
-                               0.9459459459459460,
-                               0.9459459459459460,
-                               0.9459459459459460,
-                               0.9459459459459460,
-                               0.9459459459459460,
-                               0.9459459459459460,
-                               0.9459459459459460,
-                               0.9459459459459460,
-                               0.9459459459459460,
-                               0.9459459459459460,
-                               0.9459459459459460,
-                               0.9459459459459460,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9452054794520550,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9577464788732390,
-                               0.9577464788732390,
-                               0.9577464788732390,
-                               0.9577464788732390,
-                               0.9577464788732390,
-                               0.9577464788732390,
-                               0.9577464788732390,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9571428571428570,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9558823529411760,
-                               0.9545454545454550,
-                               0.9545454545454550,
-                               0.9545454545454550,
-                               0.9545454545454550,
-                               0.9538461538461540,
-                               0.9538461538461540,
-                               0.9531250000000000,
-                               0.9531250000000000,
-                               0.9531250000000000,
-                               0.9531250000000000,
-                               0.9682539682539680,
-                               0.9682539682539680,
-                               0.9682539682539680,
-                               0.9682539682539680,
-                               0.9682539682539680,
-                               0.9682539682539680,
-                               0.9682539682539680,
-                               0.9682539682539680,
-                               0.9682539682539680,
-                               0.9672131147540980,
-                               0.9672131147540980,
-                               0.9672131147540980,
-                               0.9672131147540980,
-                               0.9672131147540980,
-                               0.9672131147540980,
-                               0.9666666666666670,
-                               0.9661016949152540,
-                               0.9661016949152540,
-                               0.9655172413793100,
-                               0.9655172413793100,
-                               0.9655172413793100,
-                               0.9491525423728810,
-                               0.9491525423728810,
-                               0.9491525423728810,
-                               0.9333333333333330,
-                               0.9333333333333330,
-                               0.9322033898305080,
-                               0.9310344827586210,
-                               0.9310344827586210,
-                               0.9310344827586210,
-                               0.9137931034482760,
-                               0.9137931034482760,
-                               0.9137931034482760,
-                               0.8983050847457630,
-                               0.8983050847457630,
-                               0.8965517241379310,
-                               0.8813559322033900,
-                               0.8813559322033900,
-                               0.8793103448275860,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8448275862068960,
-                               0.8448275862068960,
-                               0.8448275862068960,
-                               0.8448275862068960,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.7868852459016390,
-                               0.7868852459016390,
-                               0.7868852459016390,
-                               0.7833333333333330,
-                               0.7833333333333330,
-                               0.7833333333333330,
-                               0.7833333333333330,
-                               0.7704918032786880,
-                               0.7704918032786880,
-                               0.7704918032786880,
-                               0.7704918032786880,
-                               0.7704918032786880,
-                               0.7580645161290320,
-                               0.7540983606557380,
-                               0.7419354838709680,
-                               0.7377049180327870,
-                               0.7377049180327870,
-                               0.7288135593220340,
-                               0.7118644067796610,
-                               0.7118644067796610,
-                               0.7068965517241380,
-                               0.7068965517241380,
-                               0.7017543859649120,
-                               0.6964285714285710,
-                               0.6964285714285710,
-                               0.6842105263157900,
-                               0.6842105263157900,
-                               0.6842105263157900,
-                               0.6842105263157900,
-                               0.6785714285714290,
-                               0.6785714285714290,
-                               0.6785714285714290,
-                               0.6785714285714290,
-                               0.6785714285714290,
-                               0.6666666666666670,
-                               0.6551724137931030,
-                               0.6379310344827590,
-                               0.6271186440677970,
-                               0.6206896551724140,
-                               0.5964912280701750,
-                               0.5964912280701750,
-                               0.5789473684210530,
-                               0.5689655172413790,
-                               0.5689655172413790,
-                               0.5689655172413790,
-                               0.5689655172413790,
-                               0.5689655172413790,
-                               0.5593220338983050,
-                               0.5593220338983050,
-                               0.5593220338983050,
-                               0.5593220338983050,
-                               0.5500000000000000,
-                               0.5423728813559320,
-                               0.5333333333333330,
-                               0.5333333333333330,
-                               0.5333333333333330,
-                               0.5333333333333330,
-                               0.5333333333333330,
-                               0.5333333333333330,
-                               0.5333333333333330,
-                               0.5333333333333330,
-                               0.5423728813559320,
-                               0.5423728813559320,
-                               0.5333333333333330,
-                               0.5166666666666670,
-                               0.5333333333333330,
-                               0.5254237288135590,
-                               0.5254237288135590,
-                               0.5254237288135590,
-                               0.5333333333333330,
-                               0.5245901639344260,
-                               0.5081967213114750,
-                               0.4736842105263160,
-                               0.4655172413793100,
-                               0.4576271186440680,
-                               0.4482758620689660,
-                               0.4406779661016950,
-                               0.4406779661016950,
-                               0.4310344827586210,
-                               0.4310344827586210,
-                               0.4310344827586210,
-                               0.4310344827586210,
-                               0.4137931034482760,
-                               0.4137931034482760,
-                               0.3818181818181820,
-                               0.3818181818181820,
-                               0.3396226415094340,
-                               0.3333333333333330,
-                               0.3272727272727270,
-                               0.3272727272727270,
-                               0.3148148148148150,
-                               0.3148148148148150,
-                               0.3148148148148150,
-                               0.3090909090909090,
-                               0.3090909090909090,
-                               0.3090909090909090,
-                               0.3090909090909090,
-                               0.3090909090909090,
-                               0.3090909090909090,
-                               0.3090909090909090,
-                               0.3090909090909090,
-                               0.3090909090909090,
-                               0.2962962962962960,
-                               0.2962962962962960,
-                               0.2830188679245280,
-                               0.2549019607843140,
-                               0.2600000000000000,
-                               0.2448979591836730,
-                               0.2400000000000000,
-                               0.2400000000000000,
-                               0.2307692307692310,
-                               0.2307692307692310,
-                               0.2307692307692310,
-                               0.2264150943396230,
-                               0.2068965517241380,
-                               0.2068965517241380,
-                               0.2068965517241380,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.1864406779661020,
-                               0.1864406779661020,
-                               0.1774193548387100,
-                               0.1774193548387100,
-                               0.1774193548387100,
-                               0.1639344262295080,
-                               0.1451612903225810,
-                               0.1451612903225810,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1230769230769230,
-                               0.1230769230769230,
-                               0.1230769230769230,
-                               0.1230769230769230,
-                               0.1230769230769230,
-                               0.1212121212121210,
-                               0.1212121212121210,
-                               0.1212121212121210,
-                               0.1176470588235290,
-                               0.1176470588235290,
-                               0.1176470588235290,
-                               0.1176470588235290,
-                               0.1044776119402990,
-                               0.1044776119402990,
-                               0.1044776119402990,
-                               0.1044776119402990,
-                               0.1044776119402990,
-                               0.1044776119402990,
-                               0.1044776119402990,
-                               0.1044776119402990,
-                               0.1044776119402990,
-                               0.1044776119402990,
-                               0.1029411764705880,
-                               0.1044776119402990,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0869565217391304,
-                               0.0869565217391304,
-                               0.0869565217391304,
-                               0.0869565217391304,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0735294117647059,
-                               0.0735294117647059,
-                               0.0735294117647059,
-                               0.0597014925373134,
-                               0.0606060606060606,
-                               0.0615384615384615,
-                               0.0615384615384615,
-                               0.0615384615384615,
-                               0.0606060606060606,
-                               0.0606060606060606,
-                               0.0746268656716418,
-                               0.0735294117647059,
-                               0.0735294117647059,
-                               0.0735294117647059,
-                               0.0735294117647059,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0735294117647059,
-                               0.0735294117647059,
-                               0.0735294117647059,
-                               0.0735294117647059,
-                               0.0735294117647059,
-                               0.0735294117647059,
-                               0.0735294117647059,
-                               0.0735294117647059,
-                               0.0735294117647059,
-                               0.0735294117647059,
-                               0.0735294117647059,
-                               0.0735294117647059,
-                               0.0746268656716418,
-                               0.0735294117647059,
-                               0.0735294117647059,
-                               0.0735294117647059,
-                               0.0735294117647059,
-                               0.0735294117647059,
-                               0.0869565217391304,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1014492753623190,
-                               0.1014492753623190,
-                               0.1014492753623190,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1029411764705880,
-                               0.0909090909090909,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.0937500000000000,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.1014492753623190,
-                               0.1014492753623190,
-                               0.1014492753623190,
-                               0.1029411764705880,
-                               0.1029411764705880,
-                               0.0895522388059701,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0923076923076923,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0923076923076923,
-                               0.0952380952380952,
-                               0.0952380952380952,
-                               0.0967741935483871,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1016949152542370,
-                               0.0967741935483871,
-                               0.0833333333333333,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0952380952380952,
-                               0.0952380952380952,
-                               0.1111111111111110,
-                               0.1093750000000000,
-                               0.1093750000000000,
-                               0.1093750000000000,
-                               0.1093750000000000,
-                               0.1093750000000000,
-                               0.1093750000000000,
-                               0.1093750000000000,
-                               0.1076923076923080,
-                               0.1076923076923080,
-                               0.1076923076923080,
-                               0.1076923076923080,
-                               0.1076923076923080,
-                               0.1093750000000000,
-                               0.1093750000000000,
-                               0.1093750000000000,
-                               0.1076923076923080,
-                               0.1093750000000000,
-                               0.1111111111111110,
-                               0.1093750000000000,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.0967741935483871,
-                               0.0952380952380952,
-                               0.0952380952380952,
-                               0.0952380952380952,
-                               0.0952380952380952,
-                               0.0967741935483871,
-                               0.0952380952380952,
-                               0.0952380952380952,
-                               0.0952380952380952,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0983606557377049,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0806451612903226,
-                               0.0819672131147541,
-                               0.0793650793650794,
-                               0.0781250000000000,
-                               0.0781250000000000,
-                               0.0781250000000000,
-                               0.0793650793650794,
-                               0.0781250000000000,
-                               0.0781250000000000,
-                               0.0781250000000000,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0833333333333333,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0833333333333333,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0793650793650794,
-                               0.0781250000000000,
-                               0.0781250000000000,
-                               0.0781250000000000,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0781250000000000,
-                               0.0781250000000000,
-                               0.0781250000000000,
-                               0.0781250000000000,
-                               0.0781250000000000,
-                               0.0781250000000000,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0781250000000000,
-                               0.0781250000000000,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0806451612903226,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0677966101694915,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0655737704918033,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0952380952380952,
-                               0.0967741935483871,
-                               0.0983606557377049,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1016949152542370,
-                               0.1016949152542370,
-                               0.1186440677966100,
-                               0.1147540983606560,
-                               0.1290322580645160,
-                               0.1290322580645160,
-                               0.1290322580645160,
-                               0.1290322580645160,
-                               0.1269841269841270,
-                               0.1269841269841270,
-                               0.1290322580645160,
-                               0.1290322580645160,
-                               0.1269841269841270,
-                               0.1290322580645160,
-                               0.1290322580645160,
-                               0.1311475409836070,
-                               0.1311475409836070,
-                               0.1290322580645160,
-                               0.1311475409836070,
-                               0.1451612903225810,
-                               0.1333333333333330,
-                               0.1311475409836070,
-                               0.1475409836065570,
-                               0.1475409836065570,
-                               0.1500000000000000,
-                               0.1639344262295080,
-                               0.1639344262295080,
-                               0.1639344262295080,
-                               0.1639344262295080,
-                               0.1639344262295080,
-                               0.1639344262295080,
-                               0.1639344262295080,
-                               0.1639344262295080,
-                               0.1639344262295080,
-                               0.1639344262295080,
-                               0.1639344262295080,
-                               0.1639344262295080,
-                               0.1639344262295080,
-                               0.1774193548387100,
-                               0.1904761904761900,
-                               0.1935483870967740,
-                               0.1967213114754100,
-                               0.1967213114754100,
-                               0.1833333333333330,
-                               0.1864406779661020,
-                               0.1864406779661020,
-                               0.1864406779661020,
-                               0.1864406779661020,
-                               0.1864406779661020,
-                               0.1864406779661020,
-                               0.1864406779661020,
-                               0.1896551724137930,
-                               0.2033898305084750,
-                               0.2000000000000000,
-                               0.1967213114754100,
-                               0.1833333333333330,
-                               0.1833333333333330,
-                               0.1864406779661020,
-                               0.1864406779661020,
-                               0.1864406779661020,
-                               0.1864406779661020,
-                               0.1724137931034480,
-                               0.1864406779661020,
-                               0.1896551724137930,
-                               0.1754385964912280,
-                               0.1754385964912280,
-                               0.1754385964912280,
-                               0.1694915254237290,
-                               0.1833333333333330,
-                               0.1864406779661020,
-                               0.1864406779661020,
-                               0.1864406779661020,
-                               0.1864406779661020,
-                               0.1833333333333330,
-                               0.1833333333333330,
-                               0.1864406779661020,
-                               0.1864406779661020,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.2105263157894740,
-                               0.2068965517241380,
-                               0.2068965517241380,
-                               0.2241379310344830,
-                               0.2241379310344830,
-                               0.2241379310344830,
-                               0.2241379310344830,
-                               0.2241379310344830,
-                               0.2280701754385960,
-                               0.2280701754385960,
-                               0.2321428571428570,
-                               0.2321428571428570,
-                               0.2321428571428570,
-                               0.2280701754385960,
-                               0.2241379310344830,
-                               0.2241379310344830,
-                               0.2241379310344830,
-                               0.2241379310344830,
-                               0.2280701754385960,
-                               0.2000000000000000,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1964285714285710,
-                               0.2241379310344830,
-                               0.2280701754385960,
-                               0.2280701754385960,
-                               0.2321428571428570,
-                               0.2407407407407410,
-                               0.2407407407407410,
-                               0.2407407407407410,
-                               0.2363636363636360,
-                               0.2363636363636360,
-                               0.2363636363636360,
-                               0.2363636363636360,
-                               0.2363636363636360,
-                               0.2363636363636360,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2307692307692310,
-                               0.2307692307692310,
-                               0.2352941176470590,
-                               0.2352941176470590,
-                               0.2400000000000000,
-                               0.2600000000000000,
-                               0.2600000000000000,
-                               0.2600000000000000,
-                               0.2600000000000000,
-                               0.2600000000000000,
-                               0.2800000000000000,
-                               0.2800000000000000,
-                               0.2884615384615380,
-                               0.2884615384615380,
-                               0.2884615384615380,
-                               0.2830188679245280,
-                               0.2830188679245280,
-                               0.2830188679245280,
-                               0.2962962962962960,
-                               0.2962962962962960,
-                               0.2962962962962960,
-                               0.2962962962962960,
-                               0.2982456140350880,
-                               0.2982456140350880,
-                               0.3090909090909090,
-                               0.3090909090909090,
-                               0.3090909090909090,
-                               0.3148148148148150,
-                               0.3396226415094340,
-                               0.3396226415094340,
-                               0.3461538461538460,
-                               0.3461538461538460,
-                               0.3461538461538460,
-                               0.3529411764705880,
-                               0.3529411764705880,
-                               0.3584905660377360,
-                               0.3888888888888890,
-                               0.3888888888888890,
-                               0.3962264150943400,
-                               0.3888888888888890,
-                               0.3962264150943400,
-                               0.3962264150943400,
-                               0.3962264150943400,
-                               0.3962264150943400,
-                               0.4038461538461540,
-                               0.4117647058823530,
-                               0.4117647058823530,
-                               0.4117647058823530,
-                               0.4285714285714290,
-                               0.4285714285714290,
-                               0.4200000000000000,
-                               0.4117647058823530,
-                               0.4230769230769230,
-                               0.4117647058823530,
-                               0.4200000000000000,
-                               0.4200000000000000,
-                               0.4200000000000000,
-                               0.4200000000000000,
-                               0.4313725490196080,
-                               0.4230769230769230,
-                               0.4400000000000000,
-                               0.4400000000000000,
-                               0.4400000000000000,
-                               0.4509803921568630,
-                               0.4615384615384620,
-                               0.4615384615384620,
-                               0.4807692307692310,
-                               0.4807692307692310,
-                               0.4901960784313730,
-                               0.4901960784313730,
-                               0.5098039215686270,
-                               0.5098039215686270,
-                               0.5000000000000000,
-                               0.5192307692307690,
-                               0.5294117647058820,
-                               0.5490196078431370,
-                               0.5490196078431370,
-                               0.5600000000000000,
-                               0.5576923076923080,
-                               0.5686274509803920,
-                               0.5800000000000000,
-                               0.5800000000000000,
-                               0.5882352941176470,
-                               0.6000000000000000,
-                               0.6153846153846150,
-                               0.6153846153846150,
-                               0.6153846153846150,
-                               0.6153846153846150,
-                               0.6153846153846150,
-                               0.6226415094339620,
-                               0.6296296296296300,
-                               0.6296296296296300,
-                               0.6415094339622640,
-                               0.6481481481481480,
-                               0.6415094339622640,
-                               0.6415094339622640,
-                               0.6538461538461540,
-                               0.6538461538461540,
-                               0.6603773584905660,
-                               0.6603773584905660,
-                               0.6666666666666670,
-                               0.6800000000000000,
-                               0.6730769230769230,
-                               0.6666666666666670,
-                               0.6923076923076920,
-                               0.6923076923076920,
-                               0.6792452830188680,
-                               0.6923076923076920,
-                               0.6981132075471700,
-                               0.6981132075471700,
-                               0.6981132075471700,
-                               0.6981132075471700,
-                               0.6981132075471700,
-                               0.7115384615384620,
-                               0.7115384615384620,
-                               0.7254901960784310,
-                               0.7450980392156860,
-                               0.7450980392156860,
-                               0.7450980392156860,
-                               0.7450980392156860,
-                               0.7450980392156860,
-                               0.7450980392156860,
-                               0.7450980392156860,
-                               0.7450980392156860,
-                               0.7450980392156860,
-                               0.7450980392156860,
-                               0.7450980392156860,
-                               0.7450980392156860,
-                               0.7222222222222220,
-                               0.7222222222222220,
-                               0.7358490566037730,
-                               0.7358490566037730,
-                               0.7358490566037730,
-                               0.7222222222222220,
-                               0.7222222222222220,
-                               0.7222222222222220,
-                               0.7222222222222220,
-                               0.7090909090909090,
-                               0.7222222222222220,
-                               0.7222222222222220,
-                               0.7017543859649120,
-                               0.7017543859649120,
-                               0.6779661016949150,
-                               0.6885245901639340,
-                               0.6984126984126980,
-                               0.6984126984126980,
-                               0.6984126984126980,
-                               0.6984126984126980,
-                               0.6984126984126980,
-                               0.6984126984126980,
-                               0.6984126984126980,
-                               0.6984126984126980,
-                               0.6984126984126980,
-                               0.6984126984126980,
-                               0.6984126984126980,
-                               0.6984126984126980,
-                               0.6984126984126980,
-                               0.7096774193548390,
-                               0.7096774193548390,
-                               0.7096774193548390,
-                               0.7142857142857140,
-                               0.7142857142857140,
-                               0.7096774193548390,
-                               0.7096774193548390,
-                               0.6984126984126980,
-                               0.6885245901639340,
-                               0.6885245901639340,
-                               0.6885245901639340,
-                               0.7000000000000000,
-                               0.6774193548387100,
-                               0.6774193548387100,
-                               0.6774193548387100,
-                               0.6774193548387100,
-                               0.6721311475409840,
-                               0.6557377049180330,
-                               0.6557377049180330,
-                               0.6666666666666670,
-                               0.6779661016949150,
-                               0.6779661016949150,
-                               0.6779661016949150,
-                               0.6779661016949150,
-                               0.6779661016949150,
-                               0.7272727272727270,
-                               0.7017543859649120,
-                               0.7017543859649120,
-                               0.7068965517241380,
-                               0.7068965517241380,
-                               0.7192982456140350,
-                               0.7192982456140350,
-                               0.7192982456140350,
-                               0.7192982456140350,
-                               0.7272727272727270,
-                               0.7272727272727270,
-                               0.7272727272727270,
-                               0.7321428571428570,
-                               0.7368421052631580,
-                               0.7368421052631580,
-                               0.7368421052631580,
-                               0.7543859649122810,
-                               0.7678571428571430,
-                               0.7678571428571430,
-                               0.7678571428571430,
-                               0.7678571428571430,
-                               0.7678571428571430,
-                               0.7678571428571430,
-                               0.7719298245614030,
-                               0.7719298245614030,
-                               0.7719298245614030,
-                               0.7719298245614030,
-                               0.7719298245614030,
-                               0.7719298245614030,
-                               0.7719298245614030,
-                               0.7857142857142860,
-                               0.7857142857142860,
-                               0.7857142857142860,
-                               0.7894736842105260,
-                               0.7931034482758620,
-                               0.7931034482758620,
-                               0.8103448275862070,
-                               0.8103448275862070,
-                               0.8103448275862070,
-                               0.8103448275862070,
-                               0.8103448275862070,
-                               0.8103448275862070,
-                               0.7833333333333330,
-                               0.7833333333333330,
-                               0.7833333333333330,
-                               0.7833333333333330,
-                               0.7796610169491530,
-                               0.7796610169491530,
-                               0.7796610169491530,
-                               0.7796610169491530,
-                               0.7796610169491530,
-                               0.7796610169491530,
-                               0.7796610169491530,
-                               0.7796610169491530,
-                               0.7868852459016390,
-                               0.7868852459016390,
-                               0.7868852459016390,
-                               0.7741935483870970,
-                               0.7777777777777780,
-                               0.7777777777777780,
-                               0.7777777777777780,
-                               0.7777777777777780,
-                               0.7777777777777780,
-                               0.7777777777777780,
-                               0.7777777777777780,
-                               0.7777777777777780,
-                               0.7777777777777780,
-                               0.7777777777777780,
-                               0.7777777777777780,
-                               0.7777777777777780,
-                               0.7903225806451610,
-                               0.7903225806451610,
-                               0.7903225806451610,
-                               0.7903225806451610,
-                               0.7903225806451610,
-                               0.8000000000000000,
-                               0.8000000000000000,
-                               0.8000000000000000,
-                               0.8032786885245900,
-                               0.8032786885245900,
-                               0.8032786885245900,
-                               0.8095238095238100,
-                               0.8095238095238100,
-                               0.8095238095238100,
-                               0.8095238095238100,
-                               0.8095238095238100,
-                               0.8095238095238100,
-                               0.8032786885245900,
-                               0.8064516129032260,
-                               0.8064516129032260,
-                               0.8064516129032260,
-                               0.8064516129032260,
-                               0.8064516129032260,
-                               0.8064516129032260,
-                               0.8064516129032260,
-                               0.8196721311475410,
-                               0.8196721311475410,
-                               0.8196721311475410,
-                               0.8196721311475410,
-                               0.8196721311475410,
-                               0.8166666666666670,
-                               0.8196721311475410,
-                               0.8196721311475410,
-                               0.8196721311475410,
-                               0.8196721311475410,
-                               0.8196721311475410,
-                               0.8196721311475410,
-                               0.8196721311475410,
-                               0.8196721311475410,
-                               0.8196721311475410,
-                               0.8196721311475410,
-                               0.8196721311475410,
-                               0.8196721311475410,
-                               0.8196721311475410,
-                               0.8196721311475410,
-                               0.8196721311475410,
-                               0.8196721311475410,
-                               0.8196721311475410,
-                               0.8166666666666670,
-                               0.8196721311475410,
-                               0.8196721311475410,
-                               0.8333333333333330,
-                               0.8333333333333330,
-                               0.8333333333333330,
-                               0.8360655737704920,
-                               0.8360655737704920,
-                               0.8360655737704920,
-                               0.8360655737704920,
-                               0.8360655737704920,
-                               0.8387096774193550,
-                               0.8387096774193550,
-                               0.8387096774193550,
-                               0.8387096774193550,
-                               0.8387096774193550,
-                               0.8387096774193550,
-                               0.8387096774193550,
-                               0.8387096774193550,
-                               0.8387096774193550,
-                               0.8387096774193550,
-                               0.8387096774193550,
-                               0.8387096774193550,
-                               0.8387096774193550,
-                               0.8387096774193550,
-                               0.8387096774193550,
-                               0.8387096774193550,
-                               0.8387096774193550,
-                               0.8387096774193550,
-                               0.8387096774193550,
-                               0.8387096774193550,
-                               0.8387096774193550,
-                               0.8524590163934430,
-                               0.8524590163934430,
-                               0.8524590163934430,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8666666666666670,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8709677419354840,
-                               0.8709677419354840,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8833333333333330,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8870967741935480,
-                               0.8870967741935480,
-                               0.8870967741935480,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8906250000000000,
-                               0.8906250000000000,
-                               0.8923076923076920,
-                               0.8939393939393940,
-                               0.8939393939393940,
-                               0.8939393939393940,
-                               0.8939393939393940,
-                               0.8939393939393940,
-                               0.8939393939393940,
-                               0.8939393939393940,
-                               0.8939393939393940,
-                               0.8939393939393940,
-                               0.8939393939393940,
-                               0.8939393939393940,
-                               0.8939393939393940,
-                               0.8939393939393940,
-                               0.8939393939393940,
-                               0.8939393939393940,
-                               0.8939393939393940,
-                               0.8939393939393940,
-                               0.8939393939393940,
-                               0.8939393939393940,
-                               0.8939393939393940,
-                               0.8939393939393940,
-                               0.8939393939393940,
-                               0.8939393939393940,
-                               0.8955223880597010,
-                               0.8955223880597010,
-                               0.8955223880597010,
-                               0.8955223880597010,
-                               0.8955223880597010,
-                               0.8955223880597010,
-                               0.8955223880597010,
-                               0.8955223880597010,
-                               0.8955223880597010,
-                               0.8955223880597010,
-                               0.8955223880597010,
-                               0.8955223880597010,
-                               0.8955223880597010,
-                               0.8955223880597010,
-                               0.8955223880597010,
-                               0.8955223880597010,
-                               0.8955223880597010,
-                               0.8955223880597010,
-                               0.8955223880597010,
-                               0.8955223880597010,
-                               0.8955223880597010,
-                               0.8955223880597010,
-                               0.8955223880597010,
-                               0.8955223880597010,
-                               0.8955223880597010,
-                               0.8955223880597010,
-                               0.8955223880597010,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9016393442622950,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.8852459016393440,
-                               0.8833333333333330,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8644067796610170,
-                               0.8644067796610170,
-                               0.8644067796610170,
-                               0.8644067796610170,
-                               0.8644067796610170,
-                               0.8644067796610170,
-                               0.8644067796610170,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8596491228070170,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8070175438596490,
-                               0.8070175438596490,
-                               0.8000000000000000,
-                               0.8000000000000000,
-                               0.8000000000000000,
-                               0.8000000000000000,
-                               0.8000000000000000,
-                               0.8000000000000000,
-                               0.8000000000000000,
-                               0.8000000000000000,
-                               0.8000000000000000,
-                               0.7962962962962960,
-                               0.7924528301886790,
-                               0.7884615384615380,
-                               0.7843137254901960,
-                               0.7843137254901960,
-                               0.7692307692307690,
-                               0.7692307692307690,
-                               0.7692307692307690,
-                               0.7547169811320760,
-                               0.7547169811320760,
-                               0.7407407407407410,
-                               0.7407407407407410,
-                               0.7272727272727270,
-                               0.7222222222222220,
-                               0.6842105263157900,
-                               0.6724137931034480,
-                               0.6724137931034480,
-                               0.6724137931034480,
-                               0.6724137931034480,
-                               0.6724137931034480,
-                               0.6724137931034480,
-                               0.6724137931034480,
-                               0.6724137931034480,
-                               0.6724137931034480,
-                               0.6724137931034480,
-                               0.6607142857142860,
-                               0.6545454545454550,
-                               0.6481481481481480,
-                               0.6538461538461540,
-                               0.6538461538461540,
-                               0.6538461538461540,
-                               0.6538461538461540,
-                               0.6603773584905660,
-                               0.6481481481481480,
-                               0.6481481481481480,
-                               0.6481481481481480,
-                               0.6481481481481480,
-                               0.6363636363636360,
-                               0.6363636363636360,
-                               0.6363636363636360,
-                               0.6181818181818180,
-                               0.6181818181818180,
-                               0.6111111111111110,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.5925925925925930,
-                               0.5925925925925930,
-                               0.5925925925925930,
-                               0.5849056603773580,
-                               0.5740740740740740,
-                               0.5740740740740740,
-                               0.5660377358490570,
-                               0.5660377358490570,
-                               0.5555555555555560,
-                               0.5471698113207550,
-                               0.5370370370370370,
-                               0.5370370370370370,
-                               0.5370370370370370,
-                               0.5370370370370370,
-                               0.5370370370370370,
-                               0.5272727272727270,
-                               0.5272727272727270,
-                               0.5000000000000000,
-                               0.5000000000000000,
-                               0.5000000000000000,
-                               0.5000000000000000,
-                               0.4905660377358490,
-                               0.4905660377358490,
-                               0.4905660377358490,
-                               0.4905660377358490,
-                               0.4814814814814810,
-                               0.4905660377358490,
-                               0.4807692307692310,
-                               0.4807692307692310,
-                               0.4807692307692310,
-                               0.4807692307692310,
-                               0.4705882352941180,
-                               0.4615384615384620,
-                               0.4509803921568630,
-                               0.4509803921568630,
-                               0.4509803921568630,
-                               0.4509803921568630,
-                               0.4489795918367350,
-                               0.4489795918367350,
-                               0.4375000000000000,
-                               0.4375000000000000,
-                               0.4375000000000000,
-                               0.4255319148936170,
-                               0.4347826086956520,
-                               0.4347826086956520,
-                               0.4222222222222220,
-                               0.4222222222222220,
-                               0.4130434782608700,
-                               0.4130434782608700,
-                               0.4130434782608700,
-                               0.4000000000000000,
-                               0.3720930232558140,
-                               0.3720930232558140,
-                               0.3636363636363640,
-                               0.3555555555555560,
-                               0.3478260869565220,
-                               0.3404255319148940,
-                               0.3111111111111110,
-                               0.3111111111111110,
-                               0.2954545454545450,
-                               0.2888888888888890,
-                               0.2888888888888890,
-                               0.2888888888888890,
-                               0.2708333333333330,
-                               0.2708333333333330,
-                               0.2553191489361700,
-                               0.2553191489361700,
-                               0.2553191489361700,
-                               0.2553191489361700,
-                               0.2553191489361700,
-                               0.2553191489361700,
-                               0.2553191489361700,
-                               0.2391304347826090,
-                               0.2391304347826090,
-                               0.2444444444444440,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2200000000000000,
-                               0.2040816326530610,
-                               0.1960784313725490,
-                               0.1960784313725490,
-                               0.1960784313725490,
-                               0.1923076923076920,
-                               0.1923076923076920,
-                               0.1923076923076920,
-                               0.1851851851851850,
-                               0.1851851851851850,
-                               0.1851851851851850,
-                               0.1851851851851850,
-                               0.1851851851851850,
-                               0.1818181818181820,
-                               0.1666666666666670,
-                               0.1666666666666670,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1578947368421050,
-                               0.1403508771929820,
-                               0.1403508771929820,
-                               0.1379310344827590,
-                               0.1379310344827590,
-                               0.1355932203389830,
-                               0.1355932203389830,
-                               0.1355932203389830,
-                               0.1355932203389830,
-                               0.1355932203389830,
-                               0.1355932203389830,
-                               0.1379310344827590,
-                               0.1379310344827590,
-                               0.1228070175438600,
-                               0.1228070175438600,
-                               0.1228070175438600,
-                               0.1228070175438600,
-                               0.1228070175438600,
-                               0.1228070175438600,
-                               0.1206896551724140,
-                               0.1206896551724140,
-                               0.1206896551724140,
-                               0.1206896551724140,
-                               0.1052631578947370,
-                               0.1071428571428570,
-                               0.1052631578947370,
-                               0.1052631578947370,
-                               0.1052631578947370,
-                               0.1052631578947370,
-                               0.1052631578947370,
-                               0.1052631578947370,
-                               0.0892857142857143,
-                               0.0892857142857143,
-                               0.0892857142857143,
-                               0.0892857142857143,
-                               0.0892857142857143,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0909090909090909,
-                               0.0727272727272727,
-                               0.0714285714285714,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0714285714285714,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0689655172413793,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0689655172413793,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0714285714285714,
-                               0.0740740740740741,
-                               0.0754716981132075,
-                               0.0754716981132075,
-                               0.0754716981132075,
-                               0.0754716981132075,
-                               0.0784313725490196,
-                               0.0784313725490196,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0784313725490196,
-                               0.0784313725490196,
-                               0.0754716981132075,
-                               0.0754716981132075,
-                               0.0740740740740741,
-                               0.0740740740740741,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0892857142857143,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0892857142857143,
-                               0.0892857142857143,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0892857142857143,
-                               0.0892857142857143,
-                               0.0892857142857143,
-                               0.0892857142857143,
-                               0.0892857142857143,
-                               0.0892857142857143,
-                               0.0892857142857143,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0909090909090909,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0677966101694915,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0689655172413793,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0689655172413793,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0535714285714286,
-                               0.0526315789473684,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0714285714285714,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0740740740740741,
-                               0.0754716981132075,
-                               0.0754716981132075,
-                               0.0740740740740741,
-                               0.0740740740740741,
-                               0.0740740740740741,
-                               0.0740740740740741,
-                               0.0740740740740741,
-                               0.0740740740740741,
-                               0.0740740740740741,
-                               0.0740740740740741,
-                               0.0740740740740741,
-                               0.0740740740740741,
-                               0.0740740740740741,
-                               0.0740740740740741,
-                               0.0754716981132075,
-                               0.0754716981132075,
-                               0.0740740740740741,
-                               0.0740740740740741,
-                               0.0740740740740741,
-                               0.0740740740740741,
-                               0.0754716981132075,
-                               0.0754716981132075,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0784313725490196,
-                               0.0800000000000000,
-                               0.0800000000000000,
-                               0.0816326530612245,
-                               0.1020408163265310,
-                               0.1020408163265310,
-                               0.1020408163265310,
-                               0.1020408163265310,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.1000000000000000,
-                               0.1020408163265310,
-                               0.1041666666666670,
-                               0.1224489795918370,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1372549019607840,
-                               0.1372549019607840,
-                               0.1372549019607840,
-                               0.1372549019607840,
-                               0.1372549019607840,
-                               0.1372549019607840,
-                               0.1538461538461540,
-                               0.1698113207547170,
-                               0.1698113207547170,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1509433962264150,
-                               0.1509433962264150,
-                               0.1509433962264150,
-                               0.1509433962264150,
-                               0.1509433962264150,
-                               0.1346153846153850,
-                               0.1509433962264150,
-                               0.1509433962264150,
-                               0.1481481481481480,
-                               0.1481481481481480,
-                               0.1481481481481480,
-                               0.1481481481481480,
-                               0.1481481481481480,
-                               0.1481481481481480,
-                               0.1481481481481480,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1481481481481480,
-                               0.1481481481481480,
-                               0.1636363636363640,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1754385964912280,
-                               0.1754385964912280,
-                               0.1754385964912280,
-                               0.1754385964912280,
-                               0.1896551724137930,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.2037037037037040,
-                               0.2037037037037040,
-                               0.2037037037037040,
-                               0.2037037037037040,
-                               0.2037037037037040,
-                               0.2037037037037040,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.2037037037037040,
-                               0.2037037037037040,
-                               0.2037037037037040,
-                               0.2037037037037040,
-                               0.2075471698113210,
-                               0.2075471698113210,
-                               0.2075471698113210,
-                               0.2115384615384620,
-                               0.2115384615384620,
-                               0.2115384615384620,
-                               0.2115384615384620,
-                               0.2115384615384620,
-                               0.2264150943396230,
-                               0.2264150943396230,
-                               0.2264150943396230,
-                               0.2264150943396230,
-                               0.2307692307692310,
-                               0.2307692307692310,
-                               0.2352941176470590,
-                               0.2307692307692310,
-                               0.2307692307692310,
-                               0.2307692307692310,
-                               0.2307692307692310,
-                               0.2307692307692310,
-                               0.2307692307692310,
-                               0.2307692307692310,
-                               0.2352941176470590,
-                               0.2352941176470590,
-                               0.2352941176470590,
-                               0.2500000000000000,
-                               0.2549019607843140,
-                               0.2692307692307690,
-                               0.2692307692307690,
-                               0.2692307692307690,
-                               0.2692307692307690,
-                               0.2692307692307690,
-                               0.2692307692307690,
-                               0.2800000000000000,
-                               0.2857142857142860,
-                               0.2857142857142860,
-                               0.2857142857142860,
-                               0.2857142857142860,
-                               0.2857142857142860,
-                               0.2916666666666670,
-                               0.2857142857142860,
-                               0.2857142857142860,
-                               0.2857142857142860,
-                               0.2916666666666670,
-                               0.3000000000000000,
-                               0.3000000000000000,
-                               0.3137254901960780,
-                               0.3137254901960780,
-                               0.3200000000000000,
-                               0.3200000000000000,
-                               0.3061224489795920,
-                               0.3061224489795920,
-                               0.3061224489795920,
-                               0.3125000000000000,
-                               0.3125000000000000,
-                               0.3125000000000000,
-                               0.3061224489795920,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3269230769230770,
-                               0.3269230769230770,
-                               0.3269230769230770,
-                               0.3269230769230770,
-                               0.3541666666666670,
-                               0.3541666666666670,
-                               0.3617021276595740,
-                               0.3750000000000000,
-                               0.3829787234042550,
-                               0.3913043478260870,
-                               0.4000000000000000,
-                               0.4000000000000000,
-                               0.4000000000000000,
-                               0.4000000000000000,
-                               0.3913043478260870,
-                               0.3913043478260870,
-                               0.4042553191489360,
-                               0.4130434782608700,
-                               0.4318181818181820,
-                               0.4444444444444440,
-                               0.4545454545454550,
-                               0.4545454545454550,
-                               0.4761904761904760,
-                               0.4651162790697670,
-                               0.4545454545454550,
-                               0.4545454545454550,
-                               0.4651162790697670,
-                               0.4545454545454550,
-                               0.4444444444444440,
-                               0.4444444444444440,
-                               0.4444444444444440,
-                               0.4444444444444440,
-                               0.4444444444444440,
-                               0.4444444444444440,
-                               0.4545454545454550,
-                               0.4418604651162790,
-                               0.4523809523809520,
-                               0.4523809523809520,
-                               0.4878048780487810,
-                               0.4878048780487810,
-                               0.5000000000000000,
-                               0.5000000000000000,
-                               0.5116279069767440,
-                               0.5116279069767440,
-                               0.5227272727272730,
-                               0.5227272727272730,
-                               0.5348837209302320,
-                               0.5348837209302320,
-                               0.5348837209302320,
-                               0.5348837209302320,
-                               0.5348837209302320,
-                               0.5476190476190480,
-                               0.5348837209302320,
-                               0.5348837209302320,
-                               0.5476190476190480,
-                               0.5476190476190480,
-                               0.5454545454545450,
-                               0.5714285714285710,
-                               0.5909090909090910,
-                               0.5777777777777780,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6170212765957450,
-                               0.6304347826086960,
-                               0.6250000000000000,
-                               0.6250000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.5882352941176470,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6078431372549020,
-                               0.5961538461538460,
-                               0.5961538461538460,
-                               0.5961538461538460,
-                               0.5849056603773580,
-                               0.5849056603773580,
-                               0.5849056603773580,
-                               0.6037735849056600,
-                               0.6153846153846150,
-                               0.6274509803921570,
-                               0.6274509803921570,
-                               0.6274509803921570,
-                               0.6274509803921570,
-                               0.6530612244897960,
-                               0.6530612244897960,
-                               0.6530612244897960,
-                               0.6530612244897960,
-                               0.6530612244897960,
-                               0.6400000000000000,
-                               0.6400000000000000,
-                               0.6400000000000000,
-                               0.6400000000000000,
-                               0.6400000000000000,
-                               0.6400000000000000,
-                               0.6400000000000000,
-                               0.6326530612244900,
-                               0.6400000000000000,
-                               0.6400000000000000,
-                               0.6400000000000000,
-                               0.6400000000000000,
-                               0.6400000000000000,
-                               0.6400000000000000,
-                               0.6400000000000000,
-                               0.6400000000000000,
-                               0.6530612244897960,
-                               0.6530612244897960,
-                               0.6600000000000000,
-                               0.6734693877551020,
-                               0.6734693877551020,
-                               0.6734693877551020,
-                               0.6734693877551020,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6734693877551020,
-                               0.6875000000000000,
-                               0.6875000000000000,
-                               0.6875000000000000,
-                               0.6875000000000000,
-                               0.7021276595744680,
-                               0.7021276595744680,
-                               0.7021276595744680,
-                               0.7083333333333330,
-                               0.7083333333333330,
-                               0.7083333333333330,
-                               0.7021276595744680,
-                               0.7021276595744680,
-                               0.7021276595744680,
-                               0.6875000000000000,
-                               0.6875000000000000,
-                               0.6875000000000000,
-                               0.6875000000000000,
-                               0.6600000000000000,
-                               0.6470588235294120,
-                               0.6538461538461540,
-                               0.6538461538461540,
-                               0.6538461538461540,
-                               0.6603773584905660,
-                               0.6415094339622640,
-                               0.6415094339622640,
-                               0.6415094339622640,
-                               0.6415094339622640,
-                               0.6415094339622640,
-                               0.6415094339622640,
-                               0.6603773584905660,
-                               0.6603773584905660,
-                               0.6730769230769230,
-                               0.6730769230769230,
-                               0.6730769230769230,
-                               0.6730769230769230,
-                               0.6862745098039220,
-                               0.6862745098039220,
-                               0.6862745098039220,
-                               0.6862745098039220,
-                               0.6862745098039220,
-                               0.6862745098039220,
-                               0.6862745098039220,
-                               0.6862745098039220,
-                               0.6862745098039220,
-                               0.6862745098039220,
-                               0.6862745098039220,
-                               0.6862745098039220,
-                               0.7000000000000000,
-                               0.7000000000000000,
-                               0.7000000000000000,
-                               0.7000000000000000,
-                               0.7000000000000000,
-                               0.7000000000000000,
-                               0.7000000000000000,
-                               0.7000000000000000,
-                               0.7000000000000000,
-                               0.7000000000000000,
-                               0.7058823529411760,
-                               0.7058823529411760,
-                               0.7200000000000000,
-                               0.7200000000000000,
-                               0.7200000000000000,
-                               0.7254901960784310,
-                               0.7254901960784310,
-                               0.7254901960784310,
-                               0.7254901960784310,
-                               0.7254901960784310,
-                               0.7307692307692310,
-                               0.7307692307692310,
-                               0.7307692307692310,
-                               0.7307692307692310,
-                               0.7358490566037730,
-                               0.7358490566037730,
-                               0.7358490566037730,
-                               0.7358490566037730,
-                               0.7358490566037730,
-                               0.7222222222222220,
-                               0.7222222222222220,
-                               0.7222222222222220,
-                               0.7222222222222220,
-                               0.7222222222222220,
-                               0.7222222222222220,
-                               0.7222222222222220,
-                               0.7272727272727270,
-                               0.7142857142857140,
-                               0.7272727272727270,
-                               0.7272727272727270,
-                               0.7272727272727270,
-                               0.7272727272727270,
-                               0.7142857142857140,
-                               0.7142857142857140,
-                               0.7142857142857140,
-                               0.7142857142857140,
-                               0.7090909090909090,
-                               0.6964285714285710,
-                               0.6964285714285710,
-                               0.7090909090909090,
-                               0.7090909090909090,
-                               0.7090909090909090,
-                               0.7090909090909090,
-                               0.7222222222222220,
-                               0.7222222222222220,
-                               0.7358490566037730,
-                               0.7358490566037730,
-                               0.7358490566037730,
-                               0.7358490566037730,
-                               0.7307692307692310,
-                               0.7450980392156860,
-                               0.7450980392156860,
-                               0.7600000000000000,
-                               0.7600000000000000,
-                               0.7647058823529410,
-                               0.7647058823529410,
-                               0.7358490566037730,
-                               0.7407407407407410,
-                               0.7407407407407410,
-                               0.7407407407407410,
-                               0.7407407407407410,
-                               0.7547169811320760,
-                               0.7647058823529410,
-                               0.7647058823529410,
-                               0.7647058823529410,
-                               0.7647058823529410,
-                               0.7647058823529410,
-                               0.7647058823529410,
-                               0.7547169811320760,
-                               0.7547169811320760,
-                               0.7592592592592590,
-                               0.7592592592592590,
-                               0.7592592592592590,
-                               0.7592592592592590,
-                               0.7592592592592590,
-                               0.7592592592592590,
-                               0.7592592592592590,
-                               0.7592592592592590,
-                               0.7592592592592590,
-                               0.7592592592592590,
-                               0.7735849056603770,
-                               0.7735849056603770,
-                               0.7735849056603770,
-                               0.7735849056603770,
-                               0.7735849056603770,
-                               0.7735849056603770,
-                               0.7735849056603770,
-                               0.7777777777777780,
-                               0.7818181818181820,
-                               0.7818181818181820,
-                               0.7818181818181820,
-                               0.7818181818181820,
-                               0.7818181818181820,
-                               0.7818181818181820,
-                               0.7818181818181820,
-                               0.7818181818181820,
-                               0.7818181818181820,
-                               0.7894736842105260,
-                               0.7894736842105260,
-                               0.7894736842105260,
-                               0.7894736842105260,
-                               0.7894736842105260,
-                               0.7894736842105260,
-                               0.7894736842105260,
-                               0.7931034482758620,
-                               0.7931034482758620,
-                               0.7931034482758620,
-                               0.7931034482758620,
-                               0.7931034482758620,
-                               0.7931034482758620,
-                               0.7931034482758620,
-                               0.7931034482758620,
-                               0.7931034482758620,
-                               0.7931034482758620,
-                               0.7931034482758620,
-                               0.7931034482758620,
-                               0.7931034482758620,
-                               0.7931034482758620,
-                               0.7931034482758620,
-                               0.7931034482758620,
-                               0.7931034482758620,
-                               0.7931034482758620,
-                               0.7931034482758620,
-                               0.7931034482758620,
-                               0.7931034482758620,
-                               0.7931034482758620,
-                               0.7931034482758620,
-                               0.7931034482758620,
-                               0.8070175438596490,
-                               0.8070175438596490,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8518518518518520,
-                               0.8518518518518520,
-                               0.8679245283018870,
-                               0.8679245283018870,
-                               0.8679245283018870,
-                               0.8679245283018870,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8545454545454550,
-                               0.8545454545454550,
-                               0.8545454545454550,
-                               0.8545454545454550,
-                               0.8545454545454550,
-                               0.8545454545454550,
-                               0.8545454545454550,
-                               0.8545454545454550,
-                               0.8545454545454550,
-                               0.8545454545454550,
-                               0.8545454545454550,
-                               0.8545454545454550,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8679245283018870,
-                               0.8679245283018870,
-                               0.8679245283018870,
-                               0.8679245283018870,
-                               0.8679245283018870,
-                               0.8679245283018870,
-                               0.8679245283018870,
-                               0.8679245283018870,
-                               0.8679245283018870,
-                               0.8679245283018870,
-                               0.8679245283018870,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8909090909090910,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.9038461538461540,
-                               0.9038461538461540,
-                               0.9038461538461540,
-                               0.9038461538461540,
-                               0.9038461538461540,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8679245283018870,
-                               0.8679245283018870,
-                               0.8679245283018870,
-                               0.8679245283018870,
-                               0.8679245283018870,
-                               0.8679245283018870,
-                               0.8679245283018870,
-                               0.8679245283018870,
-                               0.8679245283018870,
-                               0.8679245283018870,
-                               0.8653846153846150,
-                               0.8653846153846150,
-                               0.8653846153846150,
-                               0.8653846153846150,
-                               0.8653846153846150,
-                               0.8653846153846150,
-                               0.8653846153846150,
-                               0.8653846153846150,
-                               0.8653846153846150,
-                               0.8653846153846150,
-                               0.8653846153846150,
-                               0.8653846153846150,
-                               0.8653846153846150,
-                               0.8653846153846150,
-                               0.8653846153846150,
-                               0.8653846153846150,
-                               0.8653846153846150,
-                               0.8653846153846150,
-                               0.8653846153846150,
-                               0.8653846153846150,
-                               0.8653846153846150,
-                               0.8627450980392160,
-                               0.8627450980392160,
-                               0.8627450980392160,
-                               0.8627450980392160,
-                               0.8627450980392160,
-                               0.8627450980392160,
-                               0.8823529411764710,
-                               0.8823529411764710,
-                               0.8823529411764710,
-                               0.8823529411764710,
-                               0.8823529411764710,
-                               0.8823529411764710,
-                               0.8653846153846150,
-                               0.8653846153846150,
-                               0.8653846153846150,
-                               0.8653846153846150,
-                               0.8653846153846150,
-                               0.8653846153846150,
-                               0.8653846153846150,
-                               0.8627450980392160,
-                               0.8627450980392160,
-                               0.8627450980392160,
-                               0.8627450980392160,
-                               0.8627450980392160,
-                               0.8627450980392160,
-                               0.8627450980392160,
-                               0.8627450980392160,
-                               0.8627450980392160,
-                               0.8627450980392160,
-                               0.8627450980392160,
-                               0.8800000000000000,
-                               0.8800000000000000,
-                               0.8775510204081630,
-                               0.8775510204081630,
-                               0.8775510204081630,
-                               0.8775510204081630,
-                               0.8775510204081630,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8775510204081630,
-                               0.8958333333333330,
-                               0.8958333333333330,
-                               0.8958333333333330,
-                               0.8958333333333330,
-                               0.8775510204081630,
-                               0.8775510204081630,
-                               0.8775510204081630,
-                               0.8775510204081630,
-                               0.8775510204081630,
-                               0.8775510204081630,
-                               0.8775510204081630,
-                               0.8775510204081630,
-                               0.8800000000000000,
-                               0.8800000000000000,
-                               0.8800000000000000,
-                               0.8800000000000000,
-                               0.8800000000000000,
-                               0.8800000000000000,
-                               0.8800000000000000,
-                               0.8800000000000000,
-                               0.8800000000000000,
-                               0.8800000000000000,
-                               0.8979591836734690,
-                               0.8979591836734690,
-                               0.8979591836734690,
-                               0.8979591836734690,
-                               0.8979591836734690,
-                               0.8979591836734690,
-                               0.8979591836734690,
-                               0.8979591836734690,
-                               0.8979591836734690,
-                               0.8979591836734690,
-                               0.8979591836734690,
-                               0.8979591836734690,
-                               0.8800000000000000,
-                               0.8627450980392160,
-                               0.8571428571428570,
-                               0.8541666666666670,
-                               0.8541666666666670,
-                               0.8510638297872340,
-                               0.8478260869565220,
-                               0.8478260869565220,
-                               0.8478260869565220,
-                               0.8297872340425530,
-                               0.8125000000000000,
-                               0.7959183673469390,
-                               0.7916666666666670,
-                               0.7916666666666670,
-                               0.7916666666666670,
-                               0.7916666666666670,
-                               0.7916666666666670,
-                               0.7872340425531920,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7659574468085110,
-                               0.7659574468085110,
-                               0.7608695652173910,
-                               0.7608695652173910,
-                               0.7608695652173910,
-                               0.7608695652173910,
-                               0.7446808510638300,
-                               0.7446808510638300,
-                               0.7391304347826090,
-                               0.7391304347826090,
-                               0.7555555555555560,
-                               0.7727272727272730,
-                               0.7906976744186050,
-                               0.7954545454545450,
-                               0.7954545454545450,
-                               0.7954545454545450,
-                               0.7954545454545450,
-                               0.7954545454545450,
-                               0.7777777777777780,
-                               0.7777777777777780,
-                               0.7777777777777780,
-                               0.7777777777777780,
-                               0.7608695652173910,
-                               0.7608695652173910,
-                               0.7777777777777780,
-                               0.7777777777777780,
-                               0.7777777777777780,
-                               0.7777777777777780,
-                               0.7777777777777780,
-                               0.7777777777777780,
-                               0.7777777777777780,
-                               0.7777777777777780,
-                               0.7777777777777780,
-                               0.7777777777777780,
-                               0.7777777777777780,
-                               0.7777777777777780,
-                               0.7608695652173910,
-                               0.7608695652173910,
-                               0.7608695652173910,
-                               0.7608695652173910,
-                               0.7608695652173910,
-                               0.7608695652173910,
-                               0.7446808510638300,
-                               0.7291666666666670,
-                               0.7291666666666670,
-                               0.7291666666666670,
-                               0.7291666666666670,
-                               0.7291666666666670,
-                               0.7446808510638300,
-                               0.7446808510638300,
-                               0.7608695652173910,
-                               0.7608695652173910,
-                               0.7608695652173910,
-                               0.7608695652173910,
-                               0.7608695652173910,
-                               0.7608695652173910,
-                               0.7608695652173910,
-                               0.7446808510638300,
-                               0.7446808510638300,
-                               0.7446808510638300,
-                               0.7555555555555560,
-                               0.7608695652173910,
-                               0.7659574468085110,
-                               0.7659574468085110,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7346938775510200,
-                               0.7291666666666670,
-                               0.7234042553191490,
-                               0.7291666666666670,
-                               0.7142857142857140,
-                               0.7142857142857140,
-                               0.7446808510638300,
-                               0.7446808510638300,
-                               0.7391304347826090,
-                               0.7391304347826090,
-                               0.7391304347826090,
-                               0.7391304347826090,
-                               0.6938775510204080,
-                               0.7021276595744680,
-                               0.7021276595744680,
-                               0.7021276595744680,
-                               0.7021276595744680,
-                               0.6875000000000000,
-                               0.6875000000000000,
-                               0.6875000000000000,
-                               0.6875000000000000,
-                               0.6808510638297870,
-                               0.6808510638297870,
-                               0.6808510638297870,
-                               0.6808510638297870,
-                               0.7111111111111110,
-                               0.7173913043478260,
-                               0.7111111111111110,
-                               0.7272727272727270,
-                               0.7272727272727270,
-                               0.7209302325581400,
-                               0.6888888888888890,
-                               0.6888888888888890,
-                               0.6888888888888890,
-                               0.6888888888888890,
-                               0.6888888888888890,
-                               0.6739130434782610,
-                               0.6739130434782610,
-                               0.6739130434782610,
-                               0.6808510638297870,
-                               0.6956521739130430,
-                               0.6956521739130430,
-                               0.6956521739130430,
-                               0.6808510638297870,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6734693877551020,
-                               0.6666666666666670,
-                               0.6530612244897960,
-                               0.6400000000000000,
-                               0.6400000000000000,
-                               0.6530612244897960,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6734693877551020,
-                               0.6938775510204080,
-                               0.7000000000000000,
-                               0.7000000000000000,
-                               0.7000000000000000,
-                               0.6862745098039220,
-                               0.6862745098039220,
-                               0.7000000000000000,
-                               0.7000000000000000,
-                               0.7000000000000000,
-                               0.7000000000000000,
-                               0.7000000000000000,
-                               0.7083333333333330,
-                               0.7021276595744680,
-                               0.7021276595744680,
-                               0.6875000000000000,
-                               0.6875000000000000,
-                               0.6875000000000000,
-                               0.7021276595744680,
-                               0.7083333333333330,
-                               0.7083333333333330,
-                               0.6938775510204080,
-                               0.6938775510204080,
-                               0.7083333333333330,
-                               0.6938775510204080,
-                               0.7000000000000000,
-                               0.7000000000000000,
-                               0.6862745098039220,
-                               0.6730769230769230,
-                               0.6666666666666670,
-                               0.6730769230769230,
-                               0.6730769230769230,
-                               0.6792452830188680,
-                               0.6792452830188680,
-                               0.6792452830188680,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6792452830188680,
-                               0.6730769230769230,
-                               0.6730769230769230,
-                               0.6792452830188680,
-                               0.6792452830188680,
-                               0.6792452830188680,
-                               0.6792452830188680,
-                               0.6792452830188680,
-                               0.6792452830188680,
-                               0.6792452830188680,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6545454545454550,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6603773584905660,
-                               0.6603773584905660,
-                               0.6603773584905660,
-                               0.6603773584905660,
-                               0.6603773584905660,
-                               0.6538461538461540,
-                               0.6415094339622640,
-                               0.6415094339622640,
-                               0.6415094339622640,
-                               0.6415094339622640,
-                               0.6415094339622640,
-                               0.6481481481481480,
-                               0.6481481481481480,
-                               0.6481481481481480,
-                               0.6603773584905660,
-                               0.6730769230769230,
-                               0.6862745098039220,
-                               0.6862745098039220,
-                               0.6862745098039220,
-                               0.6730769230769230,
-                               0.6730769230769230,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6800000000000000,
-                               0.6938775510204080,
-                               0.6800000000000000,
-                               0.6862745098039220,
-                               0.6862745098039220,
-                               0.6862745098039220,
-                               0.6730769230769230,
-                               0.6730769230769230,
-                               0.6730769230769230,
-                               0.6730769230769230,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6600000000000000,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6600000000000000,
-                               0.6470588235294120,
-                               0.6470588235294120,
-                               0.6470588235294120,
-                               0.6470588235294120,
-                               0.6400000000000000,
-                               0.6400000000000000,
-                               0.6400000000000000,
-                               0.6400000000000000,
-                               0.6530612244897960,
-                               0.6400000000000000,
-                               0.6400000000000000,
-                               0.6400000000000000,
-                               0.6400000000000000,
-                               0.6326530612244900,
-                               0.6200000000000000,
-                               0.6200000000000000,
-                               0.6200000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.5918367346938780,
-                               0.5918367346938780,
-                               0.5918367346938780,
-                               0.5918367346938780,
-                               0.5918367346938780,
-                               0.6041666666666670,
-                               0.6041666666666670,
-                               0.6041666666666670,
-                               0.6041666666666670,
-                               0.6041666666666670,
-                               0.6041666666666670,
-                               0.6041666666666670,
-                               0.6041666666666670,
-                               0.6041666666666670,
-                               0.6041666666666670,
-                               0.6041666666666670,
-                               0.6041666666666670,
-                               0.6041666666666670,
-                               0.5918367346938780,
-                               0.5918367346938780,
-                               0.5918367346938780,
-                               0.5918367346938780,
-                               0.5957446808510640,
-                               0.5957446808510640,
-                               0.5957446808510640,
-                               0.5957446808510640,
-                               0.5957446808510640,
-                               0.5869565217391300,
-                               0.5957446808510640,
-                               0.5957446808510640,
-                               0.5957446808510640,
-                               0.5957446808510640,
-                               0.5957446808510640,
-                               0.5833333333333330,
-                               0.5625000000000000,
-                               0.5625000000000000,
-                               0.5625000000000000,
-                               0.5625000000000000,
-                               0.5625000000000000,
-                               0.5625000000000000,
-                               0.5531914893617020,
-                               0.5531914893617020,
-                               0.5531914893617020,
-                               0.5652173913043480,
-                               0.5652173913043480,
-                               0.5652173913043480,
-                               0.5652173913043480,
-                               0.5652173913043480,
-                               0.5434782608695650,
-                               0.5434782608695650,
-                               0.5434782608695650,
-                               0.5555555555555560,
-                               0.5555555555555560,
-                               0.5555555555555560,
-                               0.5555555555555560,
-                               0.5555555555555560,
-                               0.5555555555555560,
-                               0.5555555555555560,
-                               0.5555555555555560,
-                               0.5652173913043480,
-                               0.5652173913043480,
-                               0.5652173913043480,
-                               0.5744680851063830,
-                               0.5744680851063830,
-                               0.5744680851063830,
-                               0.5744680851063830,
-                               0.5744680851063830,
-                               0.5869565217391300,
-                               0.5869565217391300,
-                               0.5744680851063830,
-                               0.5744680851063830,
-                               0.5744680851063830,
-                               0.5744680851063830,
-                               0.5957446808510640,
-                               0.5957446808510640,
-                               0.5957446808510640,
-                               0.5957446808510640,
-                               0.5957446808510640,
-                               0.5833333333333330,
-                               0.5833333333333330,
-                               0.5714285714285710,
-                               0.5833333333333330,
-                               0.5833333333333330,
-                               0.5833333333333330,
-                               0.5833333333333330,
-                               0.5833333333333330,
-                               0.5833333333333330,
-                               0.5833333333333330,
-                               0.5833333333333330,
-                               0.5833333333333330,
-                               0.5833333333333330,
-                               0.5833333333333330,
-                               0.5833333333333330,
-                               0.5800000000000000,
-                               0.5918367346938780,
-                               0.5918367346938780,
-                               0.5918367346938780,
-                               0.5918367346938780,
-                               0.5918367346938780,
-                               0.6000000000000000,
-                               0.5882352941176470,
-                               0.5961538461538460,
-                               0.5849056603773580,
-                               0.5925925925925930,
-                               0.5925925925925930,
-                               0.5849056603773580,
-                               0.5849056603773580,
-                               0.5849056603773580,
-                               0.5849056603773580,
-                               0.5849056603773580,
-                               0.5961538461538460,
-                               0.6037735849056600,
-                               0.5961538461538460,
-                               0.5961538461538460,
-                               0.5961538461538460,
-                               0.5961538461538460,
-                               0.5961538461538460,
-                               0.6122448979591840,
-                               0.6078431372549020,
-                               0.6078431372549020,
-                               0.6200000000000000,
-                               0.6200000000000000,
-                               0.6200000000000000,
-                               0.6200000000000000,
-                               0.6274509803921570,
-                               0.6274509803921570,
-                               0.6274509803921570,
-                               0.6274509803921570,
-                               0.6153846153846150,
-                               0.6037735849056600,
-                               0.5961538461538460,
-                               0.5961538461538460,
-                               0.5849056603773580,
-                               0.5849056603773580,
-                               0.5849056603773580,
-                               0.5818181818181820,
-                               0.5818181818181820,
-                               0.5818181818181820,
-                               0.5818181818181820,
-                               0.5818181818181820,
-                               0.5925925925925930,
-                               0.6037735849056600,
-                               0.6037735849056600,
-                               0.6037735849056600,
-                               0.5925925925925930,
-                               0.5925925925925930,
-                               0.5925925925925930,
-                               0.6000000000000000,
-                               0.5892857142857140,
-                               0.5892857142857140,
-                               0.5964912280701750,
-                               0.5964912280701750,
-                               0.5964912280701750,
-                               0.5964912280701750,
-                               0.5964912280701750,
-                               0.5964912280701750,
-                               0.5964912280701750,
-                               0.5964912280701750,
-                               0.5892857142857140,
-                               0.5892857142857140,
-                               0.5892857142857140,
-                               0.5892857142857140,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6071428571428570,
-                               0.6181818181818180,
-                               0.6181818181818180,
-                               0.6181818181818180,
-                               0.6181818181818180,
-                               0.6181818181818180,
-                               0.6296296296296300,
-                               0.6181818181818180,
-                               0.6181818181818180,
-                               0.6181818181818180,
-                               0.6111111111111110,
-                               0.6037735849056600,
-                               0.5925925925925930,
-                               0.5925925925925930,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6111111111111110,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6111111111111110,
-                               0.6111111111111110,
-                               0.6111111111111110,
-                               0.6111111111111110,
-                               0.6037735849056600,
-                               0.6037735849056600,
-                               0.6037735849056600,
-                               0.5925925925925930,
-                               0.6000000000000000,
-                               0.6037735849056600,
-                               0.6153846153846150,
-                               0.6153846153846150,
-                               0.6274509803921570,
-                               0.6274509803921570,
-                               0.6346153846153850,
-                               0.6346153846153850,
-                               0.6226415094339620,
-                               0.6226415094339620,
-                               0.6296296296296300,
-                               0.6296296296296300,
-                               0.6296296296296300,
-                               0.6415094339622640,
-                               0.6226415094339620,
-                               0.6226415094339620,
-                               0.6346153846153850,
-                               0.6346153846153850,
-                               0.6346153846153850,
-                               0.6346153846153850,
-                               0.6400000000000000,
-                               0.6400000000000000,
-                               0.6400000000000000,
-                               0.6400000000000000,
-                               0.6400000000000000,
-                               0.6400000000000000,
-                               0.6470588235294120,
-                               0.6470588235294120,
-                               0.6470588235294120,
-                               0.6470588235294120,
-                               0.6470588235294120,
-                               0.6415094339622640,
-                               0.6415094339622640,
-                               0.6415094339622640,
-                               0.6481481481481480,
-                               0.6481481481481480,
-                               0.6481481481481480,
-                               0.6481481481481480,
-                               0.6415094339622640,
-                               0.6415094339622640,
-                               0.6296296296296300,
-                               0.6296296296296300,
-                               0.6296296296296300,
-                               0.6481481481481480,
-                               0.6545454545454550,
-                               0.6545454545454550,
-                               0.6428571428571430,
-                               0.6428571428571430,
-                               0.6428571428571430,
-                               0.6428571428571430,
-                               0.6491228070175440,
-                               0.6491228070175440,
-                               0.6491228070175440,
-                               0.6491228070175440,
-                               0.6607142857142860,
-                               0.6666666666666670,
-                               0.6603773584905660,
-                               0.6538461538461540,
-                               0.6538461538461540,
-                               0.6538461538461540,
-                               0.6470588235294120,
-                               0.6346153846153850,
-                               0.6346153846153850,
-                               0.6346153846153850,
-                               0.6346153846153850,
-                               0.6346153846153850,
-                               0.6470588235294120,
-                               0.6470588235294120,
-                               0.6734693877551020,
-                               0.6734693877551020,
-                               0.6734693877551020,
-                               0.6734693877551020,
-                               0.6734693877551020,
-                               0.6666666666666670,
-                               0.6734693877551020,
-                               0.6734693877551020,
-                               0.6734693877551020,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6530612244897960,
-                               0.6530612244897960,
-                               0.6530612244897960,
-                               0.6530612244897960,
-                               0.6530612244897960,
-                               0.6458333333333330,
-                               0.6458333333333330,
-                               0.6458333333333330,
-                               0.6458333333333330,
-                               0.6458333333333330,
-                               0.6458333333333330,
-                               0.6458333333333330,
-                               0.6458333333333330,
-                               0.6458333333333330,
-                               0.6458333333333330,
-                               0.6458333333333330,
-                               0.6326530612244900,
-                               0.6326530612244900,
-                               0.6326530612244900,
-                               0.6200000000000000,
-                               0.6326530612244900,
-                               0.6326530612244900,
-                               0.6326530612244900,
-                               0.6400000000000000,
-                               0.6400000000000000,
-                               0.6470588235294120,
-                               0.6470588235294120,
-                               0.6470588235294120,
-                               0.6470588235294120,
-                               0.6346153846153850,
-                               0.6346153846153850,
-                               0.6200000000000000,
-                               0.6200000000000000,
-                               0.6200000000000000,
-                               0.6200000000000000,
-                               0.6200000000000000,
-                               0.6326530612244900,
-                               0.6530612244897960,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6530612244897960,
-                               0.6600000000000000,
-                               0.6600000000000000,
-                               0.6470588235294120,
-                               0.6470588235294120,
-                               0.6470588235294120,
-                               0.6470588235294120,
-                               0.6470588235294120,
-                               0.6400000000000000,
-                               0.6400000000000000,
-                               0.6530612244897960,
-                               0.6530612244897960,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6530612244897960,
-                               0.6530612244897960,
-                               0.6530612244897960,
-                               0.6530612244897960,
-                               0.6400000000000000,
-                               0.6274509803921570,
-                               0.6153846153846150,
-                               0.6153846153846150,
-                               0.6153846153846150,
-                               0.6153846153846150,
-                               0.6037735849056600,
-                               0.6037735849056600,
-                               0.5961538461538460,
-                               0.6037735849056600,
-                               0.6037735849056600,
-                               0.6037735849056600,
-                               0.6037735849056600,
-                               0.5961538461538460,
-                               0.5740740740740740,
-                               0.5740740740740740,
-                               0.5740740740740740,
-                               0.5740740740740740,
-                               0.5849056603773580,
-                               0.5849056603773580,
-                               0.5849056603773580,
-                               0.5849056603773580,
-                               0.5849056603773580,
-                               0.5849056603773580,
-                               0.5849056603773580,
-                               0.6000000000000000,
-                               0.6181818181818180,
-                               0.6181818181818180,
-                               0.6111111111111110,
-                               0.6111111111111110,
-                               0.6111111111111110,
-                               0.6111111111111110,
-                               0.6037735849056600,
-                               0.6111111111111110,
-                               0.6111111111111110,
-                               0.6111111111111110,
-                               0.6111111111111110,
-                               0.6111111111111110,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6111111111111110,
-                               0.6296296296296300,
-                               0.6296296296296300,
-                               0.6296296296296300,
-                               0.6296296296296300,
-                               0.6296296296296300,
-                               0.6296296296296300,
-                               0.6296296296296300,
-                               0.6415094339622640,
-                               0.6415094339622640,
-                               0.6415094339622640,
-                               0.6415094339622640,
-                               0.6415094339622640,
-                               0.6415094339622640,
-                               0.6415094339622640,
-                               0.6415094339622640,
-                               0.6415094339622640,
-                               0.6415094339622640,
-                               0.6415094339622640,
-                               0.6226415094339620,
-                               0.6226415094339620,
-                               0.6037735849056600,
-                               0.6037735849056600,
-                               0.6111111111111110,
-                               0.6181818181818180,
-                               0.6071428571428570,
-                               0.5964912280701750,
-                               0.5964912280701750,
-                               0.5964912280701750,
-                               0.5862068965517240,
-                               0.5862068965517240,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.5892857142857140,
-                               0.5892857142857140,
-                               0.5892857142857140,
-                               0.5892857142857140,
-                               0.5892857142857140,
-                               0.5892857142857140,
-                               0.5892857142857140,
-                               0.5892857142857140,
-                               0.5892857142857140,
-                               0.5892857142857140,
-                               0.5789473684210530,
-                               0.5892857142857140,
-                               0.5892857142857140,
-                               0.5892857142857140,
-                               0.5892857142857140,
-                               0.5892857142857140,
-                               0.5892857142857140,
-                               0.5789473684210530,
-                               0.5892857142857140,
-                               0.5892857142857140,
-                               0.5892857142857140,
-                               0.5892857142857140,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6111111111111110,
-                               0.6181818181818180,
-                               0.6181818181818180,
-                               0.6415094339622640,
-                               0.6415094339622640,
-                               0.6538461538461540,
-                               0.6538461538461540,
-                               0.6862745098039220,
-                               0.7000000000000000,
-                               0.6862745098039220,
-                               0.6862745098039220,
-                               0.6862745098039220,
-                               0.6862745098039220,
-                               0.7000000000000000,
-                               0.7000000000000000,
-                               0.7000000000000000,
-                               0.7000000000000000,
-                               0.7000000000000000,
-                               0.7000000000000000,
-                               0.7200000000000000,
-                               0.7346938775510200,
-                               0.6923076923076920,
-                               0.6923076923076920,
-                               0.6923076923076920,
-                               0.6923076923076920,
-                               0.7058823529411760,
-                               0.7058823529411760,
-                               0.7058823529411760,
-                               0.7058823529411760,
-                               0.7058823529411760,
-                               0.7058823529411760,
-                               0.6792452830188680,
-                               0.6792452830188680,
-                               0.6792452830188680,
-                               0.6792452830188680,
-                               0.6792452830188680,
-                               0.6792452830188680,
-                               0.6909090909090910,
-                               0.6909090909090910,
-                               0.7037037037037040,
-                               0.7037037037037040,
-                               0.7037037037037040,
-                               0.7037037037037040,
-                               0.7037037037037040,
-                               0.7037037037037040,
-                               0.7037037037037040,
-                               0.7037037037037040,
-                               0.7037037037037040,
-                               0.7037037037037040,
-                               0.7037037037037040,
-                               0.7090909090909090,
-                               0.7222222222222220,
-                               0.7358490566037730,
-                               0.7222222222222220,
-                               0.7222222222222220,
-                               0.7272727272727270,
-                               0.7142857142857140,
-                               0.7192982456140350,
-                               0.7241379310344830,
-                               0.7241379310344830,
-                               0.7241379310344830,
-                               0.7241379310344830,
-                               0.7241379310344830,
-                               0.7368421052631580,
-                               0.7368421052631580,
-                               0.7368421052631580,
-                               0.7413793103448280,
-                               0.7543859649122810,
-                               0.7543859649122810,
-                               0.7543859649122810,
-                               0.7543859649122810,
-                               0.7678571428571430,
-                               0.7678571428571430,
-                               0.7678571428571430,
-                               0.7678571428571430,
-                               0.7719298245614030,
-                               0.7719298245614030,
-                               0.7758620689655170,
-                               0.7758620689655170,
-                               0.7758620689655170,
-                               0.7758620689655170,
-                               0.7719298245614030,
-                               0.7719298245614030,
-                               0.7719298245614030,
-                               0.7719298245614030,
-                               0.7719298245614030,
-                               0.7719298245614030,
-                               0.7719298245614030,
-                               0.7719298245614030,
-                               0.7857142857142860,
-                               0.7857142857142860,
-                               0.7931034482758620,
-                               0.7931034482758620,
-                               0.7931034482758620,
-                               0.7931034482758620,
-                               0.8070175438596490,
-                               0.8070175438596490,
-                               0.8070175438596490,
-                               0.8070175438596490,
-                               0.8070175438596490,
-                               0.8070175438596490,
-                               0.8070175438596490,
-                               0.8070175438596490,
-                               0.8070175438596490,
-                               0.8070175438596490,
-                               0.8070175438596490,
-                               0.8070175438596490,
-                               0.8070175438596490,
-                               0.8070175438596490,
-                               0.8070175438596490,
-                               0.8070175438596490,
-                               0.8070175438596490,
-                               0.8070175438596490,
-                               0.8070175438596490,
-                               0.8070175438596490,
-                               0.8070175438596490,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8070175438596490,
-                               0.8070175438596490,
-                               0.8070175438596490,
-                               0.8070175438596490,
-                               0.8035714285714290,
-                               0.8035714285714290,
-                               0.8035714285714290,
-                               0.8035714285714290,
-                               0.8035714285714290,
-                               0.8035714285714290,
-                               0.8035714285714290,
-                               0.8035714285714290,
-                               0.8035714285714290,
-                               0.8035714285714290,
-                               0.8035714285714290,
-                               0.8035714285714290,
-                               0.8035714285714290,
-                               0.8035714285714290,
-                               0.8035714285714290,
-                               0.8035714285714290,
-                               0.8035714285714290,
-                               0.8035714285714290,
-                               0.8035714285714290,
-                               0.8035714285714290,
-                               0.8181818181818180,
-                               0.8181818181818180,
-                               0.8181818181818180,
-                               0.8181818181818180,
-                               0.8181818181818180,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8245614035087720,
-                               0.8245614035087720,
-                               0.8245614035087720,
-                               0.8245614035087720,
-                               0.8245614035087720,
-                               0.8245614035087720,
-                               0.8245614035087720,
-                               0.8245614035087720,
-                               0.8245614035087720,
-                               0.8245614035087720,
-                               0.8245614035087720,
-                               0.8245614035087720,
-                               0.8245614035087720,
-                               0.8245614035087720,
-                               0.8103448275862070,
-                               0.8103448275862070,
-                               0.8103448275862070,
-                               0.8103448275862070,
-                               0.8103448275862070,
-                               0.8103448275862070,
-                               0.8245614035087720,
-                               0.8245614035087720,
-                               0.8245614035087720,
-                               0.8245614035087720,
-                               0.8245614035087720,
-                               0.8245614035087720,
-                               0.8245614035087720,
-                               0.8245614035087720,
-                               0.8245614035087720,
-                               0.8245614035087720,
-                               0.8245614035087720,
-                               0.8245614035087720,
-                               0.8275862068965520,
-                               0.8275862068965520,
-                               0.8275862068965520,
-                               0.8275862068965520,
-                               0.8275862068965520,
-                               0.8275862068965520,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8363636363636360,
-                               0.8333333333333330,
-                               0.8333333333333330,
-                               0.8333333333333330,
-                               0.8333333333333330,
-                               0.8301886792452830,
-                               0.8301886792452830,
-                               0.8301886792452830,
-                               0.8301886792452830,
-                               0.8301886792452830,
-                               0.8301886792452830,
-                               0.8301886792452830,
-                               0.8301886792452830,
-                               0.8301886792452830,
-                               0.8301886792452830,
-                               0.8301886792452830,
-                               0.8301886792452830,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8235294117647060,
-                               0.8235294117647060,
-                               0.8235294117647060,
-                               0.8235294117647060,
-                               0.8235294117647060,
-                               0.8235294117647060,
-                               0.8235294117647060,
-                               0.8235294117647060,
-                               0.8235294117647060,
-                               0.8235294117647060,
-                               0.8235294117647060,
-                               0.8235294117647060,
-                               0.8235294117647060,
-                               0.8235294117647060,
-                               0.8235294117647060,
-                               0.8235294117647060,
-                               0.8235294117647060,
-                               0.8235294117647060,
-                               0.8400000000000000,
-                               0.8400000000000000,
-                               0.8400000000000000,
-                               0.8400000000000000,
-                               0.8400000000000000,
-                               0.8400000000000000,
-                               0.8431372549019610,
-                               0.8431372549019610,
-                               0.8431372549019610,
-                               0.8431372549019610,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8775510204081630,
-                               0.8775510204081630,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8775510204081630,
-                               0.8775510204081630,
-                               0.8775510204081630,
-                               0.8775510204081630,
-                               0.8936170212765960,
-                               0.8936170212765960,
-                               0.8936170212765960,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8775510204081630,
-                               0.8775510204081630,
-                               0.8775510204081630,
-                               0.8775510204081630,
-                               0.8775510204081630,
-                               0.8775510204081630,
-                               0.8775510204081630,
-                               0.8775510204081630,
-                               0.8775510204081630,
-                               0.8775510204081630,
-                               0.8775510204081630,
-                               0.8775510204081630,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8260869565217390,
-                               0.8260869565217390,
-                               0.8260869565217390,
-                               0.8260869565217390,
-                               0.8222222222222220,
-                               0.8043478260869560,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7755102040816330,
-                               0.7755102040816330,
-                               0.7755102040816330,
-                               0.7755102040816330,
-                               0.7755102040816330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7551020408163260,
-                               0.7551020408163260,
-                               0.7551020408163260,
-                               0.7551020408163260,
-                               0.7551020408163260,
-                               0.7551020408163260,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7346938775510200,
-                               0.7346938775510200,
-                               0.7291666666666670,
-                               0.7291666666666670,
-                               0.7291666666666670,
-                               0.7291666666666670,
-                               0.7291666666666670,
-                               0.7291666666666670,
-                               0.7291666666666670,
-                               0.7291666666666670,
-                               0.7291666666666670,
-                               0.7234042553191490,
-                               0.7083333333333330,
-                               0.7021276595744680,
-                               0.6875000000000000,
-                               0.6734693877551020,
-                               0.6734693877551020,
-                               0.6666666666666670,
-                               0.6808510638297870,
-                               0.6808510638297870,
-                               0.6739130434782610,
-                               0.6739130434782610,
-                               0.6739130434782610,
-                               0.6739130434782610,
-                               0.6666666666666670,
-                               0.6818181818181820,
-                               0.6818181818181820,
-                               0.6818181818181820,
-                               0.6818181818181820,
-                               0.6666666666666670,
-                               0.6739130434782610,
-                               0.6956521739130430,
-                               0.6956521739130430,
-                               0.7045454545454550,
-                               0.7045454545454550,
-                               0.7045454545454550,
-                               0.7209302325581400,
-                               0.7333333333333330,
-                               0.7333333333333330,
-                               0.7173913043478260,
-                               0.7173913043478260,
-                               0.7111111111111110,
-                               0.7111111111111110,
-                               0.7272727272727270,
-                               0.7441860465116280,
-                               0.7441860465116280,
-                               0.7441860465116280,
-                               0.7500000000000000,
-                               0.7333333333333330,
-                               0.7391304347826090,
-                               0.7391304347826090,
-                               0.7446808510638300,
-                               0.7446808510638300,
-                               0.7291666666666670,
-                               0.7500000000000000,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7551020408163260,
-                               0.7551020408163260,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7551020408163260,
-                               0.7551020408163260,
-                               0.7600000000000000,
-                               0.7600000000000000,
-                               0.7450980392156860,
-                               0.7450980392156860,
-                               0.7600000000000000,
-                               0.7600000000000000,
-                               0.7600000000000000,
-                               0.7600000000000000,
-                               0.7551020408163260,
-                               0.7551020408163260,
-                               0.7551020408163260,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7346938775510200,
-                               0.7346938775510200,
-                               0.7346938775510200,
-                               0.7346938775510200,
-                               0.7346938775510200,
-                               0.7200000000000000,
-                               0.7346938775510200,
-                               0.7346938775510200,
-                               0.7200000000000000,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7551020408163260,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7446808510638300,
-                               0.7391304347826090,
-                               0.7391304347826090,
-                               0.7391304347826090,
-                               0.7391304347826090,
-                               0.7391304347826090,
-                               0.7446808510638300,
-                               0.7291666666666670,
-                               0.7291666666666670,
-                               0.7291666666666670,
-                               0.7291666666666670,
-                               0.7291666666666670,
-                               0.7291666666666670,
-                               0.7291666666666670,
-                               0.7346938775510200,
-                               0.7346938775510200,
-                               0.7346938775510200,
-                               0.7346938775510200,
-                               0.7346938775510200,
-                               0.7200000000000000,
-                               0.7200000000000000,
-                               0.7200000000000000,
-                               0.7200000000000000,
-                               0.7200000000000000,
-                               0.7142857142857140,
-                               0.7083333333333330,
-                               0.7083333333333330,
-                               0.7083333333333330,
-                               0.7083333333333330,
-                               0.7083333333333330,
-                               0.7142857142857140,
-                               0.7083333333333330,
-                               0.7083333333333330,
-                               0.6938775510204080,
-                               0.6938775510204080,
-                               0.7021276595744680,
-                               0.7021276595744680,
-                               0.7173913043478260,
-                               0.7173913043478260,
-                               0.7272727272727270,
-                               0.7272727272727270,
-                               0.7111111111111110,
-                               0.6956521739130430,
-                               0.6956521739130430,
-                               0.6956521739130430,
-                               0.6956521739130430,
-                               0.6956521739130430,
-                               0.6808510638297870,
-                               0.6739130434782610,
-                               0.6739130434782610,
-                               0.6739130434782610,
-                               0.6739130434782610,
-                               0.6739130434782610,
-                               0.6739130434782610,
-                               0.6739130434782610,
-                               0.6739130434782610,
-                               0.6739130434782610,
-                               0.6739130434782610,
-                               0.6739130434782610,
-                               0.6739130434782610,
-                               0.6888888888888890,
-                               0.6818181818181820,
-                               0.6818181818181820,
-                               0.6818181818181820,
-                               0.6818181818181820,
-                               0.6976744186046510,
-                               0.6976744186046510,
-                               0.7209302325581400,
-                               0.7142857142857140,
-                               0.6976744186046510,
-                               0.6976744186046510,
-                               0.6976744186046510,
-                               0.6818181818181820,
-                               0.6666666666666670,
-                               0.6382978723404260,
-                               0.6122448979591840,
-                               0.6122448979591840,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.5882352941176470,
-                               0.5882352941176470,
-                               0.5882352941176470,
-                               0.5882352941176470,
-                               0.6000000000000000,
-                               0.6122448979591840,
-                               0.6250000000000000,
-                               0.6250000000000000,
-                               0.6250000000000000,
-                               0.6250000000000000,
-                               0.6122448979591840,
-                               0.6122448979591840,
-                               0.6200000000000000,
-                               0.6200000000000000,
-                               0.6326530612244900,
-                               0.6326530612244900,
-                               0.6326530612244900,
-                               0.6326530612244900,
-                               0.6326530612244900,
-                               0.6326530612244900,
-                               0.6326530612244900,
-                               0.6458333333333330,
-                               0.6595744680851060,
-                               0.6595744680851060,
-                               0.6595744680851060,
-                               0.6595744680851060,
-                               0.6595744680851060,
-                               0.6595744680851060,
-                               0.6595744680851060,
-                               0.6595744680851060,
-                               0.6595744680851060,
-                               0.6595744680851060,
-                               0.6595744680851060,
-                               0.6521739130434780,
-                               0.6521739130434780,
-                               0.6521739130434780,
-                               0.6595744680851060,
-                               0.6739130434782610,
-                               0.6739130434782610,
-                               0.6739130434782610,
-                               0.6739130434782610,
-                               0.6808510638297870,
-                               0.6808510638297870,
-                               0.6956521739130430,
-                               0.7272727272727270,
-                               0.7272727272727270,
-                               0.7272727272727270,
-                               0.7272727272727270,
-                               0.7272727272727270,
-                               0.7272727272727270,
-                               0.7272727272727270,
-                               0.7272727272727270,
-                               0.7111111111111110,
-                               0.7111111111111110,
-                               0.7173913043478260,
-                               0.7111111111111110,
-                               0.7111111111111110,
-                               0.6956521739130430,
-                               0.6808510638297870,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6590909090909090,
-                               0.6590909090909090,
-                               0.6590909090909090,
-                               0.6590909090909090,
-                               0.6590909090909090,
-                               0.6444444444444440,
-                               0.6444444444444440,
-                               0.6444444444444440,
-                               0.6444444444444440,
-                               0.6444444444444440,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6521739130434780,
-                               0.6521739130434780,
-                               0.6521739130434780,
-                               0.6444444444444440,
-                               0.6521739130434780,
-                               0.6521739130434780,
-                               0.6382978723404260,
-                               0.6382978723404260,
-                               0.6382978723404260,
-                               0.6382978723404260,
-                               0.6521739130434780,
-                               0.6382978723404260,
-                               0.6382978723404260,
-                               0.6521739130434780,
-                               0.6521739130434780,
-                               0.6595744680851060,
-                               0.6595744680851060,
-                               0.6595744680851060,
-                               0.6595744680851060,
-                               0.6595744680851060,
-                               0.6595744680851060,
-                               0.6458333333333330,
-                               0.6458333333333330,
-                               0.6382978723404260,
-                               0.6382978723404260,
-                               0.6382978723404260,
-                               0.6382978723404260,
-                               0.6458333333333330,
-                               0.6400000000000000,
-                               0.6400000000000000,
-                               0.6400000000000000,
-                               0.6274509803921570,
-                               0.6274509803921570,
-                               0.6274509803921570,
-                               0.6200000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6122448979591840,
-                               0.6122448979591840,
-                               0.6122448979591840,
-                               0.6122448979591840,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6122448979591840,
-                               0.6122448979591840,
-                               0.6250000000000000,
-                               0.6250000000000000,
-                               0.6304347826086960,
-                               0.6304347826086960,
-                               0.6304347826086960,
-                               0.6304347826086960,
-                               0.6444444444444440,
-                               0.6444444444444440,
-                               0.6304347826086960,
-                               0.6304347826086960,
-                               0.6304347826086960,
-                               0.6304347826086960,
-                               0.6382978723404260,
-                               0.6304347826086960,
-                               0.6444444444444440,
-                               0.6590909090909090,
-                               0.6444444444444440,
-                               0.6444444444444440,
-                               0.6222222222222220,
-                               0.6136363636363640,
-                               0.6046511627906980,
-                               0.6046511627906980,
-                               0.6046511627906980,
-                               0.6046511627906980,
-                               0.6136363636363640,
-                               0.6136363636363640,
-                               0.6136363636363640,
-                               0.6136363636363640,
-                               0.6136363636363640,
-                               0.6136363636363640,
-                               0.6136363636363640,
-                               0.6136363636363640,
-                               0.6222222222222220,
-                               0.6222222222222220,
-                               0.6222222222222220,
-                               0.6222222222222220,
-                               0.6222222222222220,
-                               0.6222222222222220,
-                               0.6222222222222220,
-                               0.6222222222222220,
-                               0.6222222222222220,
-                               0.6222222222222220,
-                               0.6222222222222220,
-                               0.6222222222222220,
-                               0.6086956521739130,
-                               0.6086956521739130,
-                               0.6086956521739130,
-                               0.6086956521739130,
-                               0.6363636363636360,
-                               0.6222222222222220,
-                               0.6222222222222220,
-                               0.6222222222222220,
-                               0.6222222222222220,
-                               0.6222222222222220,
-                               0.6222222222222220,
-                               0.6363636363636360,
-                               0.6363636363636360,
-                               0.6363636363636360,
-                               0.6363636363636360,
-                               0.6363636363636360,
-                               0.6444444444444440,
-                               0.6444444444444440,
-                               0.6444444444444440,
-                               0.6444444444444440,
-                               0.6590909090909090,
-                               0.6590909090909090,
-                               0.6744186046511630,
-                               0.6744186046511630,
-                               0.6744186046511630,
-                               0.6744186046511630,
-                               0.6585365853658540,
-                               0.6829268292682930,
-                               0.6904761904761900,
-                               0.6744186046511630,
-                               0.6744186046511630,
-                               0.6744186046511630,
-                               0.6904761904761900,
-                               0.6904761904761900,
-                               0.6744186046511630,
-                               0.6744186046511630,
-                               0.6904761904761900,
-                               0.6904761904761900,
-                               0.6904761904761900,
-                               0.6744186046511630,
-                               0.6744186046511630,
-                               0.6744186046511630,
-                               0.6744186046511630,
-                               0.6744186046511630,
-                               0.6904761904761900,
-                               0.6904761904761900,
-                               0.6744186046511630,
-                               0.6744186046511630,
-                               0.6590909090909090,
-                               0.6590909090909090,
-                               0.6444444444444440,
-                               0.6444444444444440,
-                               0.6444444444444440,
-                               0.6444444444444440,
-                               0.6444444444444440,
-                               0.6590909090909090,
-                               0.6590909090909090,
-                               0.6511627906976740,
-                               0.6363636363636360,
-                               0.6363636363636360,
-                               0.6363636363636360,
-                               0.6363636363636360,
-                               0.6363636363636360,
-                               0.6086956521739130,
-                               0.6086956521739130,
-                               0.6086956521739130,
-                               0.6086956521739130,
-                               0.6086956521739130,
-                               0.6086956521739130,
-                               0.6086956521739130,
-                               0.6086956521739130,
-                               0.6086956521739130,
-                               0.6086956521739130,
-                               0.6086956521739130,
-                               0.6086956521739130,
-                               0.6170212765957450,
-                               0.6086956521739130,
-                               0.6086956521739130,
-                               0.6086956521739130,
-                               0.6086956521739130,
-                               0.5957446808510640,
-                               0.5957446808510640,
-                               0.5957446808510640,
-                               0.6086956521739130,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6136363636363640,
-                               0.6363636363636360,
-                               0.6363636363636360,
-                               0.6363636363636360,
-                               0.6363636363636360,
-                               0.6511627906976740,
-                               0.6511627906976740,
-                               0.6511627906976740,
-                               0.6590909090909090,
-                               0.6744186046511630,
-                               0.6744186046511630,
-                               0.6818181818181820,
-                               0.6818181818181820,
-                               0.6888888888888890,
-                               0.6888888888888890,
-                               0.6888888888888890,
-                               0.6739130434782610,
-                               0.6595744680851060,
-                               0.6595744680851060,
-                               0.6739130434782610,
-                               0.6976744186046510,
-                               0.6818181818181820,
-                               0.6888888888888890,
-                               0.6888888888888890,
-                               0.6956521739130430,
-                               0.6956521739130430,
-                               0.6956521739130430,
-                               0.6956521739130430,
-                               0.6956521739130430,
-                               0.6888888888888890,
-                               0.6888888888888890,
-                               0.6888888888888890,
-                               0.6739130434782610,
-                               0.6739130434782610,
-                               0.6888888888888890,
-                               0.6888888888888890,
-                               0.6888888888888890,
-                               0.6888888888888890,
-                               0.6888888888888890,
-                               0.6888888888888890,
-                               0.6739130434782610,
-                               0.6888888888888890,
-                               0.6888888888888890,
-                               0.7045454545454550,
-                               0.7045454545454550,
-                               0.7045454545454550,
-                               0.7045454545454550,
-                               0.6739130434782610,
-                               0.6808510638297870,
-                               0.6808510638297870,
-                               0.6808510638297870,
-                               0.6808510638297870,
-                               0.6808510638297870,
-                               0.6875000000000000,
-                               0.6875000000000000,
-                               0.6875000000000000,
-                               0.6875000000000000,
-                               0.7021276595744680,
-                               0.7173913043478260,
-                               0.7173913043478260,
-                               0.7234042553191490,
-                               0.7021276595744680,
-                               0.7021276595744680,
-                               0.7083333333333330,
-                               0.7234042553191490,
-                               0.7234042553191490,
-                               0.7234042553191490,
-                               0.7234042553191490,
-                               0.7083333333333330,
-                               0.7083333333333330,
-                               0.6938775510204080,
-                               0.6938775510204080,
-                               0.6938775510204080,
-                               0.6938775510204080,
-                               0.7083333333333330,
-                               0.7083333333333330,
-                               0.7083333333333330,
-                               0.7083333333333330,
-                               0.7291666666666670,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7659574468085110,
-                               0.7659574468085110,
-                               0.7826086956521740,
-                               0.7826086956521740,
-                               0.8043478260869560,
-                               0.8043478260869560,
-                               0.8043478260869560,
-                               0.8043478260869560,
-                               0.7826086956521740,
-                               0.7826086956521740,
-                               0.8000000000000000,
-                               0.8000000000000000,
-                               0.7826086956521740,
-                               0.7826086956521740,
-                               0.8043478260869560,
-                               0.8043478260869560,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7708333333333330,
-                               0.7755102040816330,
-                               0.7916666666666670,
-                               0.8085106382978720,
-                               0.8085106382978720,
-                               0.8125000000000000,
-                               0.8085106382978720,
-                               0.8085106382978720,
-                               0.8085106382978720,
-                               0.8085106382978720,
-                               0.8085106382978720,
-                               0.8260869565217390,
-                               0.8297872340425530,
-                               0.8333333333333330,
-                               0.8333333333333330,
-                               0.8333333333333330,
-                               0.8333333333333330,
-                               0.8163265306122450,
-                               0.8125000000000000,
-                               0.8085106382978720,
-                               0.8085106382978720,
-                               0.8260869565217390,
-                               0.8260869565217390,
-                               0.8260869565217390,
-                               0.8260869565217390,
-                               0.8260869565217390,
-                               0.8260869565217390,
-                               0.8260869565217390,
-                               0.8260869565217390,
-                               0.8260869565217390,
-                               0.8260869565217390,
-                               0.8222222222222220,
-                               0.8297872340425530,
-                               0.8297872340425530,
-                               0.8297872340425530,
-                               0.8297872340425530,
-                               0.8297872340425530,
-                               0.8125000000000000,
-                               0.8125000000000000,
-                               0.8125000000000000,
-                               0.8125000000000000,
-                               0.8125000000000000,
-                               0.8125000000000000,
-                               0.8125000000000000,
-                               0.8125000000000000,
-                               0.8163265306122450,
-                               0.8163265306122450,
-                               0.8333333333333330,
-                               0.8333333333333330,
-                               0.8333333333333330,
-                               0.8541666666666670,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8541666666666670,
-                               0.8541666666666670,
-                               0.8541666666666670,
-                               0.8723404255319150,
-                               0.8723404255319150,
-                               0.8723404255319150,
-                               0.8723404255319150,
-                               0.8723404255319150,
-                               0.8723404255319150,
-                               0.8723404255319150,
-                               0.8723404255319150,
-                               0.8723404255319150,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8775510204081630,
-                               0.8775510204081630,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8775510204081630,
-                               0.8775510204081630,
-                               0.8775510204081630,
-                               0.8775510204081630,
-                               0.8775510204081630,
-                               0.8775510204081630,
-                               0.8958333333333330,
-                               0.8958333333333330,
-                               0.8958333333333330,
-                               0.8958333333333330,
-                               0.8958333333333330,
-                               0.8979591836734690,
-                               0.8979591836734690,
-                               0.8979591836734690,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9019607843137260,
-                               0.9019607843137260,
-                               0.9019607843137260,
-                               0.9019607843137260,
-                               0.9019607843137260,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.8979591836734690,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9019607843137260,
-                               0.9019607843137260,
-                               0.9019607843137260,
-                               0.9019607843137260,
-                               0.9019607843137260,
-                               0.9019607843137260,
-                               0.9019607843137260,
-                               0.9019607843137260,
-                               0.9019607843137260,
-                               0.9200000000000000,
-                               0.9200000000000000,
-                               0.9200000000000000,
-                               0.9200000000000000,
-                               0.9200000000000000,
-                               0.9200000000000000,
-                               0.9200000000000000,
-                               0.9200000000000000,
-                               0.9200000000000000,
-                               0.9200000000000000,
-                               0.9200000000000000,
-                               0.9200000000000000,
-                               0.9200000000000000,
-                               0.9200000000000000,
-                               0.9200000000000000,
-                               0.9183673469387750,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9019607843137260,
-                               0.9019607843137260,
-                               0.9038461538461540,
-                               0.9038461538461540,
-                               0.9038461538461540,
-                               0.9038461538461540,
-                               0.9038461538461540,
-                               0.9038461538461540,
-                               0.9056603773584910,
-                               0.9074074074074070,
-                               0.9074074074074070,
-                               0.9074074074074070,
-                               0.9074074074074070,
-                               0.9074074074074070,
-                               0.9074074074074070,
-                               0.9074074074074070,
-                               0.9074074074074070,
-                               0.9074074074074070,
-                               0.9074074074074070,
-                               0.9074074074074070,
-                               0.9074074074074070,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9074074074074070,
-                               0.9074074074074070,
-                               0.9074074074074070,
-                               0.9074074074074070,
-                               0.9074074074074070,
-                               0.9074074074074070,
-                               0.9074074074074070,
-                               0.9074074074074070,
-                               0.9074074074074070,
-                               0.9074074074074070,
-                               0.9074074074074070,
-                               0.9074074074074070,
-                               0.9090909090909090,
-                               0.9259259259259260,
-                               0.9272727272727270,
-                               0.9272727272727270,
-                               0.9272727272727270,
-                               0.9285714285714290,
-                               0.9454545454545450,
-                               0.9454545454545450,
-                               0.9464285714285710,
-                               0.9464285714285710,
-                               0.9636363636363640,
-                               0.9636363636363640,
-                               0.9636363636363640,
-                               0.9636363636363640,
-                               0.9636363636363640,
-                               0.9636363636363640,
-                               0.9636363636363640,
-                               0.9636363636363640,
-                               0.9636363636363640,
-                               0.9636363636363640,
-                               0.9636363636363640,
-                               0.9636363636363640,
-                               0.9636363636363640,
-                               0.9636363636363640,
-                               0.9636363636363640,
-                               0.9636363636363640,
-                               0.9636363636363640,
-                               0.9636363636363640,
-                               0.9636363636363640,
-                               0.9636363636363640,
-                               0.9636363636363640,
-                               0.9636363636363640,
-                               0.9636363636363640,
-                               0.9636363636363640,
-                               0.9636363636363640,
-                               0.9636363636363640,
-                               0.9636363636363640,
-                               0.9636363636363640,
-                               0.9642857142857140,
-                               0.9642857142857140,
-                               0.9642857142857140,
-                               0.9642857142857140,
-                               0.9642857142857140,
-                               0.9642857142857140,
-                               0.9642857142857140,
-                               0.9642857142857140,
-                               0.9642857142857140,
-                               0.9649122807017540,
-                               0.9649122807017540,
-                               0.9649122807017540,
-                               0.9649122807017540,
-                               0.9649122807017540,
-                               0.9649122807017540,
-                               0.9649122807017540,
-                               0.9649122807017540,
-                               0.9655172413793100,
-                               0.9655172413793100,
-                               0.9655172413793100,
-                               0.9655172413793100,
-                               0.9824561403508770,
-                               0.9824561403508770,
-                               0.9824561403508770
-                       }
-               },
-               { PLACE_CATEG_ID_WORK,
-                       {
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0181818181818182,
-                               0.0181818181818182,
-                               0.0178571428571429,
-                               0.0178571428571429,
-                               0.0178571428571429,
-                               0.0178571428571429,
-                               0.0185185185185185,
-                               0.0185185185185185,
-                               0.0185185185185185,
-                               0.0185185185185185,
-                               0.0185185185185185,
-                               0.0185185185185185,
-                               0.0181818181818182,
-                               0.0181818181818182,
-                               0.0178571428571429,
-                               0.0178571428571429,
-                               0.0178571428571429,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0377358490566038,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0576923076923077,
-                               0.0576923076923077,
-                               0.0576923076923077,
-                               0.0576923076923077,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.1153846153846150,
-                               0.1153846153846150,
-                               0.1153846153846150,
-                               0.1153846153846150,
-                               0.1153846153846150,
-                               0.1153846153846150,
-                               0.1153846153846150,
-                               0.1153846153846150,
-                               0.1153846153846150,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1666666666666670,
-                               0.1666666666666670,
-                               0.1666666666666670,
-                               0.1666666666666670,
-                               0.1666666666666670,
-                               0.1698113207547170,
-                               0.1851851851851850,
-                               0.1851851851851850,
-                               0.1851851851851850,
-                               0.1886792452830190,
-                               0.1886792452830190,
-                               0.1886792452830190,
-                               0.2075471698113210,
-                               0.2075471698113210,
-                               0.2075471698113210,
-                               0.2075471698113210,
-                               0.2075471698113210,
-                               0.2075471698113210,
-                               0.2075471698113210,
-                               0.2075471698113210,
-                               0.2075471698113210,
-                               0.2075471698113210,
-                               0.2075471698113210,
-                               0.2115384615384620,
-                               0.2264150943396230,
-                               0.2264150943396230,
-                               0.2264150943396230,
-                               0.2264150943396230,
-                               0.2264150943396230,
-                               0.2545454545454540,
-                               0.2545454545454540,
-                               0.2545454545454540,
-                               0.2545454545454540,
-                               0.2545454545454540,
-                               0.2545454545454540,
-                               0.2641509433962260,
-                               0.2641509433962260,
-                               0.2641509433962260,
-                               0.2692307692307690,
-                               0.2800000000000000,
-                               0.2800000000000000,
-                               0.2916666666666670,
-                               0.2978723404255320,
-                               0.2978723404255320,
-                               0.2978723404255320,
-                               0.2978723404255320,
-                               0.2916666666666670,
-                               0.3200000000000000,
-                               0.3333333333333330,
-                               0.3461538461538460,
-                               0.3461538461538460,
-                               0.3461538461538460,
-                               0.3461538461538460,
-                               0.3529411764705880,
-                               0.3600000000000000,
-                               0.3600000000000000,
-                               0.3600000000000000,
-                               0.3725490196078430,
-                               0.3725490196078430,
-                               0.3725490196078430,
-                               0.3725490196078430,
-                               0.3725490196078430,
-                               0.3846153846153850,
-                               0.3846153846153850,
-                               0.4000000000000000,
-                               0.4117647058823530,
-                               0.4375000000000000,
-                               0.4375000000000000,
-                               0.4375000000000000,
-                               0.4375000000000000,
-                               0.4375000000000000,
-                               0.4489795918367350,
-                               0.4680851063829790,
-                               0.4680851063829790,
-                               0.4680851063829790,
-                               0.4680851063829790,
-                               0.5111111111111110,
-                               0.5217391304347830,
-                               0.5217391304347830,
-                               0.5217391304347830,
-                               0.5217391304347830,
-                               0.5217391304347830,
-                               0.5217391304347830,
-                               0.5319148936170210,
-                               0.5434782608695650,
-                               0.5434782608695650,
-                               0.5652173913043480,
-                               0.5652173913043480,
-                               0.5652173913043480,
-                               0.5652173913043480,
-                               0.5777777777777780,
-                               0.5777777777777780,
-                               0.5777777777777780,
-                               0.6086956521739130,
-                               0.6086956521739130,
-                               0.6086956521739130,
-                               0.6086956521739130,
-                               0.6086956521739130,
-                               0.6363636363636360,
-                               0.6363636363636360,
-                               0.6363636363636360,
-                               0.6363636363636360,
-                               0.6444444444444440,
-                               0.6444444444444440,
-                               0.6744186046511630,
-                               0.6818181818181820,
-                               0.6818181818181820,
-                               0.6818181818181820,
-                               0.6888888888888890,
-                               0.6888888888888890,
-                               0.6888888888888890,
-                               0.7045454545454550,
-                               0.7045454545454550,
-                               0.7045454545454550,
-                               0.7346938775510200,
-                               0.7346938775510200,
-                               0.7400000000000000,
-                               0.7450980392156860,
-                               0.7450980392156860,
-                               0.7450980392156860,
-                               0.7547169811320760,
-                               0.7547169811320760,
-                               0.7692307692307690,
-                               0.7692307692307690,
-                               0.7735849056603770,
-                               0.7735849056603770,
-                               0.7735849056603770,
-                               0.7735849056603770,
-                               0.7857142857142860,
-                               0.7857142857142860,
-                               0.7857142857142860,
-                               0.7857142857142860,
-                               0.8148148148148150,
-                               0.8148148148148150,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8275862068965520,
-                               0.8275862068965520,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8524590163934430,
-                               0.8524590163934430,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8947368421052630,
-                               0.8947368421052630,
-                               0.8947368421052630,
-                               0.8947368421052630,
-                               0.8947368421052630,
-                               0.8947368421052630,
-                               0.8965517241379310,
-                               0.8965517241379310,
-                               0.8983050847457630,
-                               0.8983050847457630,
-                               0.8983050847457630,
-                               0.8983050847457630,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8709677419354840,
-                               0.8709677419354840,
-                               0.8709677419354840,
-                               0.8709677419354840,
-                               0.8709677419354840,
-                               0.8709677419354840,
-                               0.8709677419354840,
-                               0.8709677419354840,
-                               0.8709677419354840,
-                               0.8709677419354840,
-                               0.8709677419354840,
-                               0.8709677419354840,
-                               0.8709677419354840,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8833333333333330,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8852459016393440,
-                               0.8870967741935480,
-                               0.8870967741935480,
-                               0.8870967741935480,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9016393442622950,
-                               0.9016393442622950,
-                               0.9016393442622950,
-                               0.9016393442622950,
-                               0.9016393442622950,
-                               0.8983050847457630,
-                               0.8983050847457630,
-                               0.8983050847457630,
-                               0.8983050847457630,
-                               0.8983050847457630,
-                               0.8983050847457630,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8666666666666670,
-                               0.8644067796610170,
-                               0.8666666666666670,
-                               0.8644067796610170,
-                               0.8644067796610170,
-                               0.8644067796610170,
-                               0.8644067796610170,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8333333333333330,
-                               0.8333333333333330,
-                               0.8333333333333330,
-                               0.8333333333333330,
-                               0.8360655737704920,
-                               0.8333333333333330,
-                               0.8333333333333330,
-                               0.8333333333333330,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8500000000000000,
-                               0.8500000000000000,
-                               0.8360655737704920,
-                               0.8360655737704920,
-                               0.8360655737704920,
-                               0.8360655737704920,
-                               0.8644067796610170,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8644067796610170,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8524590163934430,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8644067796610170,
-                               0.8644067796610170,
-                               0.8644067796610170,
-                               0.8644067796610170,
-                               0.8644067796610170,
-                               0.8644067796610170,
-                               0.8644067796610170,
-                               0.8644067796610170,
-                               0.8644067796610170,
-                               0.8500000000000000,
-                               0.8500000000000000,
-                               0.8500000000000000,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8771929824561400,
-                               0.8771929824561400,
-                               0.8771929824561400,
-                               0.8771929824561400,
-                               0.8771929824561400,
-                               0.8771929824561400,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8771929824561400,
-                               0.8771929824561400,
-                               0.8771929824561400,
-                               0.8833333333333330,
-                               0.8833333333333330,
-                               0.8833333333333330,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8833333333333330,
-                               0.8833333333333330,
-                               0.8813559322033900,
-                               0.8813559322033900,
-                               0.8813559322033900,
-                               0.8813559322033900,
-                               0.8833333333333330,
-                               0.8833333333333330,
-                               0.8833333333333330,
-                               0.8833333333333330,
-                               0.8833333333333330,
-                               0.8833333333333330,
-                               0.8833333333333330,
-                               0.8833333333333330,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8709677419354840,
-                               0.8709677419354840,
-                               0.8709677419354840,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8688524590163930,
-                               0.8833333333333330,
-                               0.8833333333333330,
-                               0.8833333333333330,
-                               0.8833333333333330,
-                               0.8833333333333330,
-                               0.8833333333333330,
-                               0.8813559322033900,
-                               0.8813559322033900,
-                               0.8813559322033900,
-                               0.8813559322033900,
-                               0.8813559322033900,
-                               0.8813559322033900,
-                               0.8793103448275860,
-                               0.8771929824561400,
-                               0.8771929824561400,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8448275862068960,
-                               0.8448275862068960,
-                               0.8448275862068960,
-                               0.8448275862068960,
-                               0.8596491228070170,
-                               0.8596491228070170,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8275862068965520,
-                               0.8275862068965520,
-                               0.8275862068965520,
-                               0.8245614035087720,
-                               0.8245614035087720,
-                               0.8245614035087720,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8214285714285710,
-                               0.8181818181818180,
-                               0.8181818181818180,
-                               0.8148148148148150,
-                               0.8148148148148150,
-                               0.8000000000000000,
-                               0.7962962962962960,
-                               0.7818181818181820,
-                               0.7777777777777780,
-                               0.7735849056603770,
-                               0.7692307692307690,
-                               0.7692307692307690,
-                               0.7692307692307690,
-                               0.7735849056603770,
-                               0.7735849056603770,
-                               0.7692307692307690,
-                               0.7547169811320760,
-                               0.7547169811320760,
-                               0.7547169811320760,
-                               0.7592592592592590,
-                               0.7454545454545450,
-                               0.7192982456140350,
-                               0.7192982456140350,
-                               0.7192982456140350,
-                               0.7192982456140350,
-                               0.7142857142857140,
-                               0.7142857142857140,
-                               0.7142857142857140,
-                               0.7142857142857140,
-                               0.7142857142857140,
-                               0.7142857142857140,
-                               0.7192982456140350,
-                               0.7068965517241380,
-                               0.7068965517241380,
-                               0.7017543859649120,
-                               0.7142857142857140,
-                               0.7142857142857140,
-                               0.7272727272727270,
-                               0.7222222222222220,
-                               0.7222222222222220,
-                               0.7090909090909090,
-                               0.7090909090909090,
-                               0.7090909090909090,
-                               0.7142857142857140,
-                               0.7142857142857140,
-                               0.7142857142857140,
-                               0.7017543859649120,
-                               0.7017543859649120,
-                               0.7017543859649120,
-                               0.6964285714285710,
-                               0.6964285714285710,
-                               0.6964285714285710,
-                               0.6964285714285710,
-                               0.6964285714285710,
-                               0.6964285714285710,
-                               0.6964285714285710,
-                               0.6964285714285710,
-                               0.7222222222222220,
-                               0.7222222222222220,
-                               0.7090909090909090,
-                               0.6964285714285710,
-                               0.7090909090909090,
-                               0.7090909090909090,
-                               0.6964285714285710,
-                               0.7090909090909090,
-                               0.7090909090909090,
-                               0.7090909090909090,
-                               0.7090909090909090,
-                               0.7090909090909090,
-                               0.7142857142857140,
-                               0.7142857142857140,
-                               0.7142857142857140,
-                               0.7142857142857140,
-                               0.7017543859649120,
-                               0.6785714285714290,
-                               0.6607142857142860,
-                               0.6491228070175440,
-                               0.6491228070175440,
-                               0.6428571428571430,
-                               0.6428571428571430,
-                               0.6428571428571430,
-                               0.6363636363636360,
-                               0.6363636363636360,
-                               0.6363636363636360,
-                               0.6363636363636360,
-                               0.6250000000000000,
-                               0.6250000000000000,
-                               0.6181818181818180,
-                               0.6181818181818180,
-                               0.6181818181818180,
-                               0.6181818181818180,
-                               0.6181818181818180,
-                               0.6111111111111110,
-                               0.6181818181818180,
-                               0.6181818181818180,
-                               0.6296296296296300,
-                               0.6296296296296300,
-                               0.6296296296296300,
-                               0.6111111111111110,
-                               0.6111111111111110,
-                               0.6226415094339620,
-                               0.6153846153846150,
-                               0.6153846153846150,
-                               0.6274509803921570,
-                               0.6037735849056600,
-                               0.5961538461538460,
-                               0.6078431372549020,
-                               0.6078431372549020,
-                               0.6078431372549020,
-                               0.5961538461538460,
-                               0.5882352941176470,
-                               0.5769230769230770,
-                               0.5769230769230770,
-                               0.5600000000000000,
-                               0.5510204081632650,
-                               0.5510204081632650,
-                               0.5510204081632650,
-                               0.5510204081632650,
-                               0.5400000000000000,
-                               0.5102040816326530,
-                               0.5102040816326530,
-                               0.5102040816326530,
-                               0.5102040816326530,
-                               0.5102040816326530,
-                               0.5000000000000000,
-                               0.4680851063829790,
-                               0.4680851063829790,
-                               0.4680851063829790,
-                               0.4680851063829790,
-                               0.4680851063829790,
-                               0.4680851063829790,
-                               0.4565217391304350,
-                               0.4347826086956520,
-                               0.4347826086956520,
-                               0.4347826086956520,
-                               0.3695652173913040,
-                               0.3695652173913040,
-                               0.3617021276595740,
-                               0.3617021276595740,
-                               0.3617021276595740,
-                               0.3469387755102040,
-                               0.3111111111111110,
-                               0.3181818181818180,
-                               0.3181818181818180,
-                               0.3181818181818180,
-                               0.3181818181818180,
-                               0.3255813953488370,
-                               0.3255813953488370,
-                               0.3255813953488370,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3170731707317070,
-                               0.3170731707317070,
-                               0.2790697674418600,
-                               0.2790697674418600,
-                               0.2727272727272730,
-                               0.2558139534883720,
-                               0.2558139534883720,
-                               0.2558139534883720,
-                               0.2500000000000000,
-                               0.2500000000000000,
-                               0.2391304347826090,
-                               0.2391304347826090,
-                               0.2444444444444440,
-                               0.2444444444444440,
-                               0.1818181818181820,
-                               0.1818181818181820,
-                               0.1702127659574470,
-                               0.1666666666666670,
-                               0.1632653061224490,
-                               0.1632653061224490,
-                               0.1600000000000000,
-                               0.1428571428571430,
-                               0.1400000000000000,
-                               0.1372549019607840,
-                               0.1372549019607840,
-                               0.1372549019607840,
-                               0.1538461538461540,
-                               0.1698113207547170,
-                               0.1509433962264150,
-                               0.1509433962264150,
-                               0.1372549019607840,
-                               0.1346153846153850,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1272727272727270,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1090909090909090,
-                               0.1071428571428570,
-                               0.0892857142857143,
-                               0.0892857142857143,
-                               0.0892857142857143,
-                               0.0892857142857143,
-                               0.0892857142857143,
-                               0.0892857142857143,
-                               0.0892857142857143,
-                               0.0892857142857143,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.1090909090909090,
-                               0.0925925925925926,
-                               0.1063829787234040,
-                               0.1063829787234040,
-                               0.1063829787234040,
-                               0.1063829787234040,
-                               0.0869565217391304,
-                               0.0888888888888889,
-                               0.0888888888888889,
-                               0.0888888888888889,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0888888888888889,
-                               0.0888888888888889,
-                               0.0888888888888889,
-                               0.0888888888888889,
-                               0.0869565217391304,
-                               0.0869565217391304,
-                               0.0869565217391304,
-                               0.0869565217391304,
-                               0.0869565217391304,
-                               0.0869565217391304,
-                               0.0851063829787234,
-                               0.0851063829787234,
-                               0.0851063829787234,
-                               0.1041666666666670,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.0816326530612245,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.0943396226415094,
-                               0.0943396226415094,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.0961538461538462,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.1000000000000000,
-                               0.1041666666666670,
-                               0.1041666666666670,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0961538461538462,
-                               0.0943396226415094,
-                               0.0943396226415094,
-                               0.0943396226415094,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.0943396226415094,
-                               0.0943396226415094,
-                               0.0925925925925926,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0925925925925926,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0925925925925926,
-                               0.0740740740740741,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0517241379310345,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0526315789473684,
-                               0.0517241379310345,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0517241379310345,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0500000000000000,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0327868852459016,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0312500000000000,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0338983050847458,
-                               0.0357142857142857,
-                               0.0357142857142857,
-                               0.0357142857142857,
-                               0.0357142857142857,
-                               0.0357142857142857,
-                               0.0357142857142857,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0689655172413793,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0714285714285714,
-                               0.0545454545454545,
-                               0.0535714285714286,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0701754385964912,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.1090909090909090,
-                               0.1111111111111110,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1481481481481480,
-                               0.1481481481481480,
-                               0.1481481481481480,
-                               0.1481481481481480,
-                               0.1509433962264150,
-                               0.1509433962264150,
-                               0.1509433962264150,
-                               0.1509433962264150,
-                               0.1509433962264150,
-                               0.1509433962264150,
-                               0.1818181818181820,
-                               0.1851851851851850,
-                               0.1851851851851850,
-                               0.1851851851851850,
-                               0.1851851851851850,
-                               0.1851851851851850,
-                               0.2000000000000000,
-                               0.2037037037037040,
-                               0.2363636363636360,
-                               0.2363636363636360,
-                               0.2407407407407410,
-                               0.2407407407407410,
-                               0.2452830188679250,
-                               0.2452830188679250,
-                               0.2452830188679250,
-                               0.2500000000000000,
-                               0.2549019607843140,
-                               0.2549019607843140,
-                               0.2549019607843140,
-                               0.2549019607843140,
-                               0.2745098039215690,
-                               0.2800000000000000,
-                               0.2800000000000000,
-                               0.2800000000000000,
-                               0.2800000000000000,
-                               0.2800000000000000,
-                               0.2941176470588230,
-                               0.2941176470588230,
-                               0.3000000000000000,
-                               0.3000000000000000,
-                               0.3000000000000000,
-                               0.3137254901960780,
-                               0.3269230769230770,
-                               0.3396226415094340,
-                               0.3396226415094340,
-                               0.3461538461538460,
-                               0.3653846153846150,
-                               0.3846153846153850,
-                               0.3846153846153850,
-                               0.3846153846153850,
-                               0.3962264150943400,
-                               0.3962264150943400,
-                               0.3962264150943400,
-                               0.3962264150943400,
-                               0.3962264150943400,
-                               0.3962264150943400,
-                               0.4117647058823530,
-                               0.4117647058823530,
-                               0.4117647058823530,
-                               0.4117647058823530,
-                               0.4200000000000000,
-                               0.4313725490196080,
-                               0.4313725490196080,
-                               0.4313725490196080,
-                               0.4313725490196080,
-                               0.4313725490196080,
-                               0.4313725490196080,
-                               0.4313725490196080,
-                               0.4200000000000000,
-                               0.4200000000000000,
-                               0.4200000000000000,
-                               0.4200000000000000,
-                               0.4200000000000000,
-                               0.4200000000000000,
-                               0.4313725490196080,
-                               0.4313725490196080,
-                               0.4509803921568630,
-                               0.4509803921568630,
-                               0.4509803921568630,
-                               0.4615384615384620,
-                               0.4814814814814810,
-                               0.4814814814814810,
-                               0.4814814814814810,
-                               0.4814814814814810,
-                               0.5098039215686270,
-                               0.5200000000000000,
-                               0.5306122448979590,
-                               0.5306122448979590,
-                               0.5306122448979590,
-                               0.5306122448979590,
-                               0.5625000000000000,
-                               0.5625000000000000,
-                               0.5957446808510640,
-                               0.5957446808510640,
-                               0.5957446808510640,
-                               0.5957446808510640,
-                               0.5957446808510640,
-                               0.6041666666666670,
-                               0.6041666666666670,
-                               0.6122448979591840,
-                               0.6122448979591840,
-                               0.6326530612244900,
-                               0.6400000000000000,
-                               0.6470588235294120,
-                               0.6470588235294120,
-                               0.6600000000000000,
-                               0.6600000000000000,
-                               0.6600000000000000,
-                               0.7021276595744680,
-                               0.7021276595744680,
-                               0.7173913043478260,
-                               0.7333333333333330,
-                               0.7333333333333330,
-                               0.7333333333333330,
-                               0.7333333333333330,
-                               0.7333333333333330,
-                               0.7727272727272730,
-                               0.7826086956521740,
-                               0.7872340425531920,
-                               0.7916666666666670,
-                               0.8163265306122450,
-                               0.8163265306122450,
-                               0.8200000000000000,
-                               0.8235294117647060,
-                               0.8235294117647060,
-                               0.8235294117647060,
-                               0.8235294117647060,
-                               0.8235294117647060,
-                               0.8148148148148150,
-                               0.8148148148148150,
-                               0.8148148148148150,
-                               0.8148148148148150,
-                               0.8245614035087720,
-                               0.8245614035087720,
-                               0.8275862068965520,
-                               0.8275862068965520,
-                               0.8275862068965520,
-                               0.8275862068965520,
-                               0.8500000000000000,
-                               0.8500000000000000,
-                               0.8500000000000000,
-                               0.8500000000000000,
-                               0.8500000000000000,
-                               0.8500000000000000,
-                               0.8524590163934430,
-                               0.8524590163934430,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8709677419354840,
-                               0.8709677419354840,
-                               0.8593750000000000,
-                               0.8730158730158730,
-                               0.8730158730158730,
-                               0.8730158730158730,
-                               0.8593750000000000,
-                               0.8593750000000000,
-                               0.8593750000000000,
-                               0.8615384615384620,
-                               0.8615384615384620,
-                               0.8615384615384620,
-                               0.8615384615384620,
-                               0.8615384615384620,
-                               0.8615384615384620,
-                               0.8615384615384620,
-                               0.8615384615384620,
-                               0.8615384615384620,
-                               0.8615384615384620,
-                               0.8615384615384620,
-                               0.8615384615384620,
-                               0.8769230769230770,
-                               0.8769230769230770,
-                               0.8906250000000000,
-                               0.8906250000000000,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9193548387096770,
-                               0.9193548387096770,
-                               0.9193548387096770,
-                               0.9180327868852460,
-                               0.9180327868852460,
-                               0.9180327868852460,
-                               0.9180327868852460,
-                               0.9180327868852460,
-                               0.9180327868852460,
-                               0.9180327868852460,
-                               0.9180327868852460,
-                               0.9166666666666670,
-                               0.9166666666666670,
-                               0.9166666666666670,
-                               0.9152542372881350,
-                               0.9152542372881350,
-                               0.9152542372881350,
-                               0.9166666666666670,
-                               0.9180327868852460,
-                               0.9180327868852460,
-                               0.9180327868852460,
-                               0.9180327868852460,
-                               0.9333333333333330,
-                               0.9333333333333330,
-                               0.9333333333333330,
-                               0.9333333333333330,
-                               0.9333333333333330,
-                               0.9333333333333330,
-                               0.9333333333333330,
-                               0.9333333333333330,
-                               0.9491525423728810,
-                               0.9491525423728810,
-                               0.9491525423728810,
-                               0.9333333333333330,
-                               0.9333333333333330,
-                               0.9322033898305080,
-                               0.9322033898305080,
-                               0.9322033898305080,
-                               0.9322033898305080,
-                               0.9310344827586210,
-                               0.9310344827586210,
-                               0.9310344827586210,
-                               0.9310344827586210,
-                               0.9310344827586210,
-                               0.9310344827586210,
-                               0.9310344827586210,
-                               0.9310344827586210,
-                               0.9152542372881350,
-                               0.9152542372881350,
-                               0.9152542372881350,
-                               0.9152542372881350,
-                               0.9152542372881350,
-                               0.9152542372881350,
-                               0.9152542372881350,
-                               0.9152542372881350,
-                               0.9152542372881350,
-                               0.9152542372881350,
-                               0.9152542372881350,
-                               0.9152542372881350,
-                               0.9152542372881350,
-                               0.9180327868852460,
-                               0.9180327868852460,
-                               0.9166666666666670,
-                               0.9016393442622950,
-                               0.9016393442622950,
-                               0.9016393442622950,
-                               0.9032258064516130,
-                               0.9047619047619050,
-                               0.9062500000000000,
-                               0.9062500000000000,
-                               0.9062500000000000,
-                               0.9062500000000000,
-                               0.9062500000000000,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9076923076923080,
-                               0.9230769230769230,
-                               0.9230769230769230,
-                               0.9230769230769230,
-                               0.9218750000000000,
-                               0.9206349206349210,
-                               0.9218750000000000,
-                               0.9218750000000000,
-                               0.9218750000000000,
-                               0.9218750000000000,
-                               0.9218750000000000,
-                               0.9206349206349210,
-                               0.9206349206349210,
-                               0.9206349206349210,
-                               0.9206349206349210,
-                               0.9206349206349210,
-                               0.9206349206349210,
-                               0.9344262295081970,
-                               0.9344262295081970,
-                               0.9344262295081970,
-                               0.9344262295081970,
-                               0.9344262295081970,
-                               0.9365079365079360,
-                               0.9516129032258060,
-                               0.9516129032258060,
-                               0.9516129032258060,
-                               0.9516129032258060,
-                               0.9508196721311470,
-                               0.9508196721311470,
-                               0.9354838709677420,
-                               0.9354838709677420,
-                               0.9354838709677420,
-                               0.9333333333333330,
-                               0.9310344827586210,
-                               0.9298245614035090,
-                               0.9122807017543860,
-                               0.9122807017543860,
-                               0.9122807017543860,
-                               0.9122807017543860,
-                               0.9107142857142860,
-                               0.9090909090909090,
-                               0.9259259259259260,
-                               0.9259259259259260,
-                               0.9259259259259260,
-                               0.9259259259259260,
-                               0.9272727272727270,
-                               0.9259259259259260,
-                               0.9298245614035090,
-                               0.9298245614035090,
-                               0.9298245614035090,
-                               0.9310344827586210,
-                               0.9310344827586210,
-                               0.9333333333333330,
-                               0.9491525423728810,
-                               0.9491525423728810,
-                               0.9500000000000000,
-                               0.9500000000000000,
-                               0.9500000000000000,
-                               0.9500000000000000,
-                               0.9344262295081970,
-                               0.9344262295081970,
-                               0.9344262295081970,
-                               0.9344262295081970,
-                               0.9344262295081970,
-                               0.9344262295081970,
-                               0.9333333333333330,
-                               0.9333333333333330,
-                               0.9333333333333330,
-                               0.9322033898305080,
-                               0.9322033898305080,
-                               0.9322033898305080,
-                               0.9482758620689660,
-                               0.9482758620689660,
-                               0.9473684210526320,
-                               0.9482758620689660,
-                               0.9482758620689660,
-                               0.9473684210526320,
-                               0.9655172413793100,
-                               0.9655172413793100,
-                               0.9491525423728810,
-                               0.9491525423728810,
-                               0.9482758620689660,
-                               0.9491525423728810,
-                               0.9491525423728810,
-                               0.9491525423728810,
-                               0.9491525423728810,
-                               0.9491525423728810,
-                               0.9508196721311470,
-                               0.9500000000000000,
-                               0.9500000000000000,
-                               0.9500000000000000,
-                               0.9500000000000000,
-                               0.9500000000000000,
-                               0.9491525423728810,
-                               0.9491525423728810,
-                               0.9500000000000000,
-                               0.9500000000000000,
-                               0.9500000000000000,
-                               0.9500000000000000,
-                               0.9500000000000000,
-                               0.9508196721311470,
-                               0.9500000000000000,
-                               0.9500000000000000,
-                               0.9661016949152540,
-                               0.9655172413793100,
-                               0.9655172413793100,
-                               0.9655172413793100,
-                               0.9655172413793100,
-                               0.9655172413793100,
-                               0.9661016949152540,
-                               0.9661016949152540,
-                               0.9661016949152540,
-                               0.9661016949152540,
-                               0.9661016949152540,
-                               0.9661016949152540,
-                               0.9661016949152540,
-                               0.9500000000000000,
-                               0.9500000000000000,
-                               0.9500000000000000,
-                               0.9516129032258060,
-                               0.9516129032258060,
-                               0.9516129032258060,
-                               0.9516129032258060,
-                               0.9516129032258060,
-                               0.9516129032258060,
-                               0.9516129032258060,
-                               0.9516129032258060,
-                               0.9516129032258060,
-                               0.9516129032258060,
-                               0.9531250000000000,
-                               0.9531250000000000,
-                               0.9523809523809520,
-                               0.9523809523809520,
-                               0.9523809523809520,
-                               0.9523809523809520,
-                               0.9523809523809520,
-                               0.9523809523809520,
-                               0.9531250000000000,
-                               0.9531250000000000,
-                               0.9531250000000000,
-                               0.9682539682539680,
-                               0.9682539682539680,
-                               0.9682539682539680,
-                               0.9682539682539680,
-                               0.9682539682539680,
-                               0.9682539682539680,
-                               0.9682539682539680,
-                               0.9687500000000000,
-                               0.9687500000000000,
-                               0.9687500000000000,
-                               0.9687500000000000,
-                               0.9687500000000000,
-                               0.9682539682539680,
-                               0.9682539682539680,
-                               0.9682539682539680,
-                               0.9677419354838710,
-                               0.9677419354838710,
-                               0.9677419354838710,
-                               0.9677419354838710,
-                               0.9677419354838710,
-                               0.9677419354838710,
-                               0.9682539682539680,
-                               0.9682539682539680,
-                               0.9682539682539680,
-                               0.9682539682539680,
-                               0.9682539682539680,
-                               0.9682539682539680,
-                               0.9682539682539680,
-                               0.9682539682539680,
-                               0.9682539682539680,
-                               0.9682539682539680,
-                               0.9682539682539680,
-                               0.9682539682539680,
-                               0.9531250000000000,
-                               0.9531250000000000,
-                               0.9531250000000000,
-                               0.9538461538461540,
-                               0.9538461538461540,
-                               0.9538461538461540,
-                               0.9538461538461540,
-                               0.9538461538461540,
-                               0.9538461538461540,
-                               0.9538461538461540,
-                               0.9538461538461540,
-                               0.9538461538461540,
-                               0.9538461538461540,
-                               0.9538461538461540,
-                               0.9393939393939390,
-                               0.9393939393939390,
-                               0.9393939393939390,
-                               0.9393939393939390,
-                               0.9538461538461540,
-                               0.9538461538461540,
-                               0.9538461538461540,
-                               0.9538461538461540,
-                               0.9538461538461540,
-                               0.9523809523809520,
-                               0.9523809523809520,
-                               0.9523809523809520,
-                               0.9523809523809520,
-                               0.9523809523809520,
-                               0.9516129032258060,
-                               0.9523809523809520,
-                               0.9523809523809520,
-                               0.9523809523809520,
-                               0.9523809523809520,
-                               0.9516129032258060,
-                               0.9365079365079360,
-                               0.9206349206349210,
-                               0.9206349206349210,
-                               0.9206349206349210,
-                               0.9206349206349210,
-                               0.9193548387096770,
-                               0.9193548387096770,
-                               0.9193548387096770,
-                               0.9193548387096770,
-                               0.9193548387096770,
-                               0.9180327868852460,
-                               0.9180327868852460,
-                               0.9180327868852460,
-                               0.9180327868852460,
-                               0.9180327868852460,
-                               0.9180327868852460,
-                               0.9180327868852460,
-                               0.9180327868852460,
-                               0.9180327868852460,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.9032258064516130,
-                               0.8870967741935480,
-                               0.8593750000000000,
-                               0.8571428571428570,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8524590163934430,
-                               0.8524590163934430,
-                               0.8524590163934430,
-                               0.8524590163934430,
-                               0.8524590163934430,
-                               0.8500000000000000,
-                               0.8360655737704920,
-                               0.8360655737704920,
-                               0.8225806451612900,
-                               0.8225806451612900,
-                               0.8225806451612900,
-                               0.8225806451612900,
-                               0.8360655737704920,
-                               0.8333333333333330,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8333333333333330,
-                               0.8333333333333330,
-                               0.8064516129032260,
-                               0.7936507936507940,
-                               0.7812500000000000,
-                               0.7692307692307690,
-                               0.7692307692307690,
-                               0.7692307692307690,
-                               0.7692307692307690,
-                               0.7656250000000000,
-                               0.7692307692307690,
-                               0.7692307692307690,
-                               0.7692307692307690,
-                               0.7692307692307690,
-                               0.7656250000000000,
-                               0.7656250000000000,
-                               0.7619047619047620,
-                               0.7619047619047620,
-                               0.7619047619047620,
-                               0.7619047619047620,
-                               0.7619047619047620,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7343750000000000,
-                               0.7343750000000000,
-                               0.7343750000000000,
-                               0.7343750000000000,
-                               0.7343750000000000,
-                               0.7343750000000000,
-                               0.7343750000000000,
-                               0.7230769230769230,
-                               0.7187500000000000,
-                               0.7187500000000000,
-                               0.7187500000000000,
-                               0.7230769230769230,
-                               0.7230769230769230,
-                               0.7230769230769230,
-                               0.7142857142857140,
-                               0.7258064516129030,
-                               0.7213114754098360,
-                               0.7213114754098360,
-                               0.7213114754098360,
-                               0.7288135593220340,
-                               0.7321428571428570,
-                               0.7321428571428570,
-                               0.7321428571428570,
-                               0.7192982456140350,
-                               0.7272727272727270,
-                               0.7142857142857140,
-                               0.7142857142857140,
-                               0.7090909090909090,
-                               0.7222222222222220,
-                               0.7222222222222220,
-                               0.7222222222222220,
-                               0.7307692307692310,
-                               0.7037037037037040,
-                               0.7037037037037040,
-                               0.6909090909090910,
-                               0.6909090909090910,
-                               0.6785714285714290,
-                               0.6785714285714290,
-                               0.6785714285714290,
-                               0.6551724137931030,
-                               0.6551724137931030,
-                               0.6491228070175440,
-                               0.6428571428571430,
-                               0.6545454545454550,
-                               0.6250000000000000,
-                               0.6250000000000000,
-                               0.6250000000000000,
-                               0.6250000000000000,
-                               0.6481481481481480,
-                               0.6296296296296300,
-                               0.6274509803921570,
-                               0.6274509803921570,
-                               0.6153846153846150,
-                               0.6000000000000000,
-                               0.5918367346938780,
-                               0.5918367346938780,
-                               0.5800000000000000,
-                               0.5800000000000000,
-                               0.5800000000000000,
-                               0.5800000000000000,
-                               0.5686274509803920,
-                               0.5686274509803920,
-                               0.5714285714285710,
-                               0.5714285714285710,
-                               0.5714285714285710,
-                               0.5625000000000000,
-                               0.5625000000000000,
-                               0.5600000000000000,
-                               0.5510204081632650,
-                               0.5510204081632650,
-                               0.5510204081632650,
-                               0.5510204081632650,
-                               0.5192307692307690,
-                               0.5000000000000000,
-                               0.4821428571428570,
-                               0.4821428571428570,
-                               0.4821428571428570,
-                               0.4727272727272730,
-                               0.4727272727272730,
-                               0.4727272727272730,
-                               0.4561403508771930,
-                               0.4642857142857140,
-                               0.4642857142857140,
-                               0.4642857142857140,
-                               0.4642857142857140,
-                               0.4642857142857140,
-                               0.4464285714285710,
-                               0.4545454545454550,
-                               0.4629629629629630,
-                               0.4629629629629630,
-                               0.4629629629629630,
-                               0.4509803921568630,
-                               0.4230769230769230,
-                               0.4117647058823530,
-                               0.4117647058823530,
-                               0.4038461538461540,
-                               0.4117647058823530,
-                               0.4117647058823530,
-                               0.4117647058823530,
-                               0.4038461538461540,
-                               0.4038461538461540,
-                               0.3962264150943400,
-                               0.3888888888888890,
-                               0.3888888888888890,
-                               0.3888888888888890,
-                               0.4000000000000000,
-                               0.4000000000000000,
-                               0.4000000000000000,
-                               0.4000000000000000,
-                               0.4000000000000000,
-                               0.4038461538461540,
-                               0.4038461538461540,
-                               0.4038461538461540,
-                               0.3962264150943400,
-                               0.3888888888888890,
-                               0.3888888888888890,
-                               0.3636363636363640,
-                               0.3636363636363640,
-                               0.3269230769230770,
-                               0.3148148148148150,
-                               0.3148148148148150,
-                               0.3148148148148150,
-                               0.2884615384615380,
-                               0.2884615384615380,
-                               0.2653061224489800,
-                               0.2653061224489800,
-                               0.2653061224489800,
-                               0.2653061224489800,
-                               0.2653061224489800,
-                               0.2553191489361700,
-                               0.2391304347826090,
-                               0.2391304347826090,
-                               0.2444444444444440,
-                               0.2391304347826090,
-                               0.2340425531914890,
-                               0.2500000000000000,
-                               0.2340425531914890,
-                               0.2340425531914890,
-                               0.2340425531914890,
-                               0.2340425531914890,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2244897959183670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2083333333333330,
-                               0.2040816326530610,
-                               0.1875000000000000,
-                               0.1702127659574470,
-                               0.1666666666666670,
-                               0.1666666666666670,
-                               0.1666666666666670,
-                               0.1875000000000000,
-                               0.1875000000000000,
-                               0.2040816326530610,
-                               0.2040816326530610,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.1960784313725490,
-                               0.1960784313725490,
-                               0.1923076923076920,
-                               0.1923076923076920,
-                               0.1886792452830190,
-                               0.1698113207547170,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.0943396226415094,
-                               0.0925925925925926,
-                               0.0943396226415094,
-                               0.1071428571428570,
-                               0.1071428571428570,
-                               0.1071428571428570,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0892857142857143,
-                               0.0892857142857143,
-                               0.0892857142857143,
-                               0.0892857142857143,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0847457627118644,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0819672131147541,
-                               0.0806451612903226,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0666666666666667,
-                               0.0677966101694915,
-                               0.0714285714285714,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0535714285714286,
-                               0.0535714285714286,
-                               0.0535714285714286,
-                               0.0535714285714286,
-                               0.0535714285714286,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0535714285714286,
-                               0.0535714285714286,
-                               0.0535714285714286,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0508474576271187,
-                               0.0500000000000000,
-                               0.0491803278688525,
-                               0.0500000000000000,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0476190476190476,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0468750000000000,
-                               0.0468750000000000,
-                               0.0468750000000000,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0468750000000000,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0149253731343284,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0153846153846154,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0333333333333333,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0500000000000000,
-                               0.0508474576271187,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0983606557377049,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1016949152542370,
-                               0.1016949152542370,
-                               0.1016949152542370,
-                               0.1016949152542370,
-                               0.1034482758620690,
-                               0.1034482758620690,
-                               0.1034482758620690,
-                               0.1034482758620690,
-                               0.1034482758620690,
-                               0.1186440677966100,
-                               0.1166666666666670,
-                               0.1311475409836070,
-                               0.1333333333333330,
-                               0.1333333333333330,
-                               0.1333333333333330,
-                               0.1333333333333330,
-                               0.1355932203389830,
-                               0.1639344262295080,
-                               0.1639344262295080,
-                               0.1639344262295080,
-                               0.1639344262295080,
-                               0.1666666666666670,
-                               0.1724137931034480,
-                               0.1724137931034480,
-                               0.1724137931034480,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1818181818181820,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.2181818181818180,
-                               0.2222222222222220,
-                               0.2264150943396230,
-                               0.2264150943396230,
-                               0.2264150943396230,
-                               0.2307692307692310,
-                               0.2352941176470590,
-                               0.2448979591836730,
-                               0.2600000000000000,
-                               0.2600000000000000,
-                               0.2549019607843140,
-                               0.2600000000000000,
-                               0.2745098039215690,
-                               0.2884615384615380,
-                               0.2884615384615380,
-                               0.2884615384615380,
-                               0.2884615384615380,
-                               0.2884615384615380,
-                               0.2941176470588230,
-                               0.2941176470588230,
-                               0.2941176470588230,
-                               0.3076923076923080,
-                               0.3137254901960780,
-                               0.3076923076923080,
-                               0.3076923076923080,
-                               0.3076923076923080,
-                               0.3076923076923080,
-                               0.3076923076923080,
-                               0.3076923076923080,
-                               0.3076923076923080,
-                               0.3207547169811320,
-                               0.3454545454545450,
-                               0.3454545454545450,
-                               0.3454545454545450,
-                               0.3454545454545450,
-                               0.3454545454545450,
-                               0.3454545454545450,
-                               0.3636363636363640,
-                               0.3636363636363640,
-                               0.3636363636363640,
-                               0.3750000000000000,
-                               0.3750000000000000,
-                               0.3859649122807020,
-                               0.3965517241379310,
-                               0.4181818181818180,
-                               0.4181818181818180,
-                               0.4363636363636360,
-                               0.4363636363636360,
-                               0.4464285714285710,
-                               0.4464285714285710,
-                               0.4727272727272730,
-                               0.4821428571428570,
-                               0.4821428571428570,
-                               0.4912280701754390,
-                               0.5172413793103450,
-                               0.5172413793103450,
-                               0.5263157894736840,
-                               0.5263157894736840,
-                               0.5263157894736840,
-                               0.5263157894736840,
-                               0.5263157894736840,
-                               0.5263157894736840,
-                               0.5660377358490570,
-                               0.5660377358490570,
-                               0.5660377358490570,
-                               0.5660377358490570,
-                               0.5660377358490570,
-                               0.5740740740740740,
-                               0.5818181818181820,
-                               0.5818181818181820,
-                               0.5925925925925930,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6111111111111110,
-                               0.6470588235294120,
-                               0.6666666666666670,
-                               0.6800000000000000,
-                               0.6938775510204080,
-                               0.6938775510204080,
-                               0.7083333333333330,
-                               0.7083333333333330,
-                               0.7083333333333330,
-                               0.7083333333333330,
-                               0.7200000000000000,
-                               0.7200000000000000,
-                               0.7400000000000000,
-                               0.7450980392156860,
-                               0.7450980392156860,
-                               0.7450980392156860,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7358490566037730,
-                               0.7358490566037730,
-                               0.7358490566037730,
-                               0.7358490566037730,
-                               0.7547169811320760,
-                               0.7547169811320760,
-                               0.7547169811320760,
-                               0.7547169811320760,
-                               0.7592592592592590,
-                               0.7592592592592590,
-                               0.7719298245614030,
-                               0.7719298245614030,
-                               0.7719298245614030,
-                               0.7758620689655170,
-                               0.7758620689655170,
-                               0.7758620689655170,
-                               0.7796610169491530,
-                               0.7796610169491530,
-                               0.8032786885245900,
-                               0.8032786885245900,
-                               0.8032786885245900,
-                               0.8064516129032260,
-                               0.8281250000000000,
-                               0.8281250000000000,
-                               0.8307692307692310,
-                               0.8307692307692310,
-                               0.8281250000000000,
-                               0.8281250000000000,
-                               0.8307692307692310,
-                               0.8307692307692310,
-                               0.8333333333333330,
-                               0.8333333333333330,
-                               0.8333333333333330,
-                               0.8358208955223880,
-                               0.8358208955223880,
-                               0.8358208955223880,
-                               0.8382352941176470,
-                               0.8405797101449270,
-                               0.8405797101449270,
-                               0.8382352941176470,
-                               0.8382352941176470,
-                               0.8382352941176470,
-                               0.8382352941176470,
-                               0.8382352941176470,
-                               0.8428571428571430,
-                               0.8450704225352110,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8550724637681160,
-                               0.8550724637681160,
-                               0.8550724637681160,
-                               0.8676470588235290,
-                               0.8805970149253730,
-                               0.8805970149253730,
-                               0.8805970149253730,
-                               0.8805970149253730,
-                               0.8805970149253730,
-                               0.8805970149253730,
-                               0.8805970149253730,
-                               0.8787878787878790,
-                               0.8787878787878790,
-                               0.8787878787878790,
-                               0.8787878787878790,
-                               0.8787878787878790,
-                               0.8805970149253730,
-                               0.8805970149253730,
-                               0.8805970149253730,
-                               0.8805970149253730,
-                               0.8805970149253730,
-                               0.8805970149253730,
-                               0.8823529411764710,
-                               0.8823529411764710,
-                               0.8823529411764710,
-                               0.8823529411764710,
-                               0.8823529411764710,
-                               0.8823529411764710,
-                               0.8840579710144930,
-                               0.8840579710144930,
-                               0.8840579710144930,
-                               0.8840579710144930,
-                               0.8840579710144930,
-                               0.8840579710144930,
-                               0.8840579710144930,
-                               0.8840579710144930,
-                               0.8840579710144930,
-                               0.8970588235294120,
-                               0.8970588235294120,
-                               0.8970588235294120,
-                               0.8970588235294120,
-                               0.8970588235294120,
-                               0.8970588235294120,
-                               0.8970588235294120,
-                               0.8970588235294120,
-                               0.8970588235294120,
-                               0.8970588235294120,
-                               0.8985507246376810,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.9142857142857140,
-                               0.9142857142857140,
-                               0.9142857142857140,
-                               0.9130434782608700,
-                               0.9130434782608700,
-                               0.9130434782608700,
-                               0.9130434782608700,
-                               0.9130434782608700,
-                               0.9130434782608700,
-                               0.9130434782608700,
-                               0.9130434782608700,
-                               0.9130434782608700,
-                               0.9130434782608700,
-                               0.9130434782608700,
-                               0.9130434782608700,
-                               0.9142857142857140,
-                               0.9142857142857140,
-                               0.9142857142857140,
-                               0.9142857142857140,
-                               0.9142857142857140,
-                               0.9142857142857140,
-                               0.9142857142857140,
-                               0.9142857142857140,
-                               0.9142857142857140,
-                               0.9142857142857140,
-                               0.9142857142857140,
-                               0.9142857142857140,
-                               0.9142857142857140,
-                               0.9142857142857140,
-                               0.9142857142857140,
-                               0.9142857142857140,
-                               0.9130434782608700,
-                               0.9130434782608700,
-                               0.9130434782608700,
-                               0.9130434782608700,
-                               0.9130434782608700,
-                               0.9130434782608700,
-                               0.9130434782608700,
-                               0.9130434782608700,
-                               0.9130434782608700,
-                               0.9130434782608700,
-                               0.9130434782608700,
-                               0.9130434782608700,
-                               0.9130434782608700,
-                               0.9130434782608700,
-                               0.9130434782608700,
-                               0.9130434782608700,
-                               0.9117647058823530,
-                               0.9130434782608700,
-                               0.9117647058823530,
-                               0.9104477611940300,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9090909090909090,
-                               0.9062500000000000,
-                               0.9076923076923080,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.9047619047619050,
-                               0.8769230769230770,
-                               0.8750000000000000,
-                               0.8730158730158730,
-                               0.8730158730158730,
-                               0.8730158730158730,
-                               0.8730158730158730,
-                               0.8730158730158730,
-                               0.8730158730158730,
-                               0.8593750000000000,
-                               0.8593750000000000,
-                               0.8615384615384620,
-                               0.8615384615384620,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8548387096774190,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8412698412698410,
-                               0.8412698412698410,
-                               0.8412698412698410,
-                               0.8412698412698410,
-                               0.8281250000000000,
-                               0.8281250000000000,
-                               0.8281250000000000,
-                               0.8281250000000000,
-                               0.8281250000000000,
-                               0.8281250000000000,
-                               0.8387096774193550,
-                               0.8387096774193550,
-                               0.8524590163934430,
-                               0.8524590163934430,
-                               0.8524590163934430,
-                               0.8524590163934430,
-                               0.8666666666666670,
-                               0.8709677419354840,
-                               0.8593750000000000,
-                               0.8593750000000000,
-                               0.8593750000000000,
-                               0.8593750000000000,
-                               0.8656716417910450,
-                               0.8656716417910450,
-                               0.8656716417910450,
-                               0.8656716417910450,
-                               0.8656716417910450,
-                               0.8636363636363640,
-                               0.8695652173913040,
-                               0.8695652173913040,
-                               0.8714285714285710,
-                               0.8714285714285710,
-                               0.8714285714285710,
-                               0.8714285714285710,
-                               0.8714285714285710,
-                               0.8714285714285710,
-                               0.8714285714285710,
-                               0.8714285714285710,
-                               0.8732394366197180,
-                               0.8732394366197180,
-                               0.8857142857142860,
-                               0.8840579710144930,
-                               0.8970588235294120,
-                               0.8970588235294120,
-                               0.8955223880597010,
-                               0.8939393939393940,
-                               0.8955223880597010,
-                               0.8970588235294120,
-                               0.8985507246376810,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.8985507246376810,
-                               0.8985507246376810,
-                               0.8985507246376810,
-                               0.8970588235294120,
-                               0.8970588235294120,
-                               0.8970588235294120,
-                               0.8970588235294120,
-                               0.8970588235294120,
-                               0.8970588235294120,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.8970588235294120,
-                               0.8970588235294120,
-                               0.8955223880597010,
-                               0.8970588235294120,
-                               0.8970588235294120,
-                               0.8970588235294120,
-                               0.8985507246376810,
-                               0.8985507246376810,
-                               0.9000000000000000,
-                               0.9142857142857140,
-                               0.9142857142857140,
-                               0.9154929577464790,
-                               0.9166666666666670,
-                               0.9166666666666670,
-                               0.9166666666666670,
-                               0.9178082191780820,
-                               0.9178082191780820,
-                               0.9178082191780820,
-                               0.9178082191780820,
-                               0.9178082191780820,
-                               0.9178082191780820,
-                               0.9178082191780820,
-                               0.9178082191780820,
-                               0.9178082191780820,
-                               0.9178082191780820,
-                               0.9178082191780820,
-                               0.9178082191780820,
-                               0.9166666666666670,
-                               0.9166666666666670,
-                               0.9166666666666670,
-                               0.9166666666666670,
-                               0.9166666666666670,
-                               0.9166666666666670,
-                               0.9295774647887320,
-                               0.9295774647887320,
-                               0.9295774647887320,
-                               0.9295774647887320,
-                               0.9295774647887320,
-                               0.9295774647887320,
-                               0.9295774647887320,
-                               0.9305555555555560,
-                               0.9305555555555560,
-                               0.9436619718309860,
-                               0.9436619718309860,
-                               0.9436619718309860,
-                               0.9436619718309860,
-                               0.9436619718309860,
-                               0.9436619718309860,
-                               0.9436619718309860,
-                               0.9436619718309860,
-                               0.9436619718309860,
-                               0.9444444444444440,
-                               0.9444444444444440,
-                               0.9436619718309860,
-                               0.9428571428571430,
-                               0.9428571428571430,
-                               0.9428571428571430,
-                               0.9428571428571430,
-                               0.9428571428571430,
-                               0.9428571428571430,
-                               0.9428571428571430,
-                               0.9428571428571430,
-                               0.9428571428571430,
-                               0.9428571428571430,
-                               0.9428571428571430,
-                               0.9428571428571430,
-                               0.9295774647887320,
-                               0.9285714285714290,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9275362318840580,
-                               0.9142857142857140,
-                               0.9142857142857140,
-                               0.9142857142857140,
-                               0.9142857142857140,
-                               0.9154929577464790,
-                               0.9154929577464790,
-                               0.9154929577464790,
-                               0.9154929577464790,
-                               0.9154929577464790,
-                               0.9154929577464790,
-                               0.9154929577464790,
-                               0.9285714285714290,
-                               0.9275362318840580,
-                               0.9264705882352940,
-                               0.9264705882352940,
-                               0.9264705882352940,
-                               0.9253731343283580,
-                               0.9253731343283580,
-                               0.9253731343283580,
-                               0.9253731343283580,
-                               0.9253731343283580,
-                               0.9253731343283580,
-                               0.9253731343283580,
-                               0.9253731343283580,
-                               0.9253731343283580,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9104477611940300,
-                               0.9117647058823530,
-                               0.9117647058823530,
-                               0.9130434782608700,
-                               0.9117647058823530,
-                               0.9130434782608700,
-                               0.9000000000000000,
-                               0.9000000000000000,
-                               0.8873239436619720,
-                               0.8873239436619720,
-                               0.8857142857142860,
-                               0.8840579710144930,
-                               0.8823529411764710,
-                               0.8823529411764710,
-                               0.8823529411764710,
-                               0.8823529411764710,
-                               0.8823529411764710,
-                               0.8823529411764710,
-                               0.8823529411764710,
-                               0.8805970149253730,
-                               0.8805970149253730,
-                               0.8805970149253730,
-                               0.8805970149253730,
-                               0.8656716417910450,
-                               0.8656716417910450,
-                               0.8656716417910450,
-                               0.8656716417910450,
-                               0.8656716417910450,
-                               0.8656716417910450,
-                               0.8529411764705880,
-                               0.8529411764705880,
-                               0.8529411764705880,
-                               0.8529411764705880,
-                               0.8529411764705880,
-                               0.8529411764705880,
-                               0.8529411764705880,
-                               0.8382352941176470,
-                               0.8260869565217390,
-                               0.8260869565217390,
-                               0.8260869565217390,
-                               0.8235294117647060,
-                               0.8235294117647060,
-                               0.8260869565217390,
-                               0.8382352941176470,
-                               0.8382352941176470,
-                               0.8382352941176470,
-                               0.8382352941176470,
-                               0.8358208955223880,
-                               0.8484848484848480,
-                               0.8358208955223880,
-                               0.8358208955223880,
-                               0.8333333333333330,
-                               0.8208955223880600,
-                               0.8208955223880600,
-                               0.8208955223880600,
-                               0.8208955223880600,
-                               0.8208955223880600,
-                               0.8208955223880600,
-                               0.8208955223880600,
-                               0.8088235294117650,
-                               0.8059701492537310,
-                               0.8030303030303030,
-                               0.8030303030303030,
-                               0.8030303030303030,
-                               0.8030303030303030,
-                               0.8030303030303030,
-                               0.8000000000000000,
-                               0.8000000000000000,
-                               0.7878787878787880,
-                               0.7878787878787880,
-                               0.7761194029850750,
-                               0.7761194029850750,
-                               0.7727272727272730,
-                               0.7656250000000000,
-                               0.7777777777777780,
-                               0.7777777777777780,
-                               0.7777777777777780,
-                               0.7777777777777780,
-                               0.7777777777777780,
-                               0.7903225806451610,
-                               0.8032786885245900,
-                               0.8032786885245900,
-                               0.8032786885245900,
-                               0.8032786885245900,
-                               0.8000000000000000,
-                               0.7868852459016390,
-                               0.7868852459016390,
-                               0.7868852459016390,
-                               0.7833333333333330,
-                               0.7833333333333330,
-                               0.7540983606557380,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7377049180327870,
-                               0.7258064516129030,
-                               0.7258064516129030,
-                               0.7258064516129030,
-                               0.7258064516129030,
-                               0.7258064516129030,
-                               0.7213114754098360,
-                               0.7213114754098360,
-                               0.7166666666666670,
-                               0.7166666666666670,
-                               0.7166666666666670,
-                               0.7166666666666670,
-                               0.7166666666666670,
-                               0.7166666666666670,
-                               0.7166666666666670,
-                               0.7166666666666670,
-                               0.7166666666666670,
-                               0.7166666666666670,
-                               0.7118644067796610,
-                               0.7017543859649120,
-                               0.7090909090909090,
-                               0.6842105263157900,
-                               0.6842105263157900,
-                               0.6724137931034480,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6607142857142860,
-                               0.6545454545454550,
-                               0.6428571428571430,
-                               0.6428571428571430,
-                               0.6428571428571430,
-                               0.6545454545454550,
-                               0.6481481481481480,
-                               0.6603773584905660,
-                               0.6538461538461540,
-                               0.6538461538461540,
-                               0.6538461538461540,
-                               0.6415094339622640,
-                               0.6415094339622640,
-                               0.6415094339622640,
-                               0.5833333333333330,
-                               0.5833333333333330,
-                               0.5833333333333330,
-                               0.5625000000000000,
-                               0.5625000000000000,
-                               0.5625000000000000,
-                               0.5510204081632650,
-                               0.5416666666666670,
-                               0.5416666666666670,
-                               0.5306122448979590,
-                               0.5000000000000000,
-                               0.4814814814814810,
-                               0.4385964912280700,
-                               0.4482758620689660,
-                               0.4310344827586210,
-                               0.4237288135593220,
-                               0.4166666666666670,
-                               0.4166666666666670,
-                               0.3833333333333330,
-                               0.3898305084745760,
-                               0.3898305084745760,
-                               0.3898305084745760,
-                               0.3793103448275860,
-                               0.3793103448275860,
-                               0.3728813559322030,
-                               0.3728813559322030,
-                               0.3728813559322030,
-                               0.3666666666666670,
-                               0.3606557377049180,
-                               0.3606557377049180,
-                               0.3548387096774190,
-                               0.3548387096774190,
-                               0.3437500000000000,
-                               0.3437500000000000,
-                               0.3437500000000000,
-                               0.3437500000000000,
-                               0.3281250000000000,
-                               0.3230769230769230,
-                               0.3230769230769230,
-                               0.3333333333333330,
-                               0.3225806451612900,
-                               0.3278688524590160,
-                               0.2931034482758620,
-                               0.2931034482758620,
-                               0.2881355932203390,
-                               0.2881355932203390,
-                               0.2881355932203390,
-                               0.2711864406779660,
-                               0.2786885245901640,
-                               0.2741935483870970,
-                               0.2542372881355930,
-                               0.2542372881355930,
-                               0.2542372881355930,
-                               0.2500000000000000,
-                               0.2459016393442620,
-                               0.2459016393442620,
-                               0.2459016393442620,
-                               0.2459016393442620,
-                               0.2333333333333330,
-                               0.2333333333333330,
-                               0.2333333333333330,
-                               0.2333333333333330,
-                               0.2295081967213110,
-                               0.2295081967213110,
-                               0.2295081967213110,
-                               0.2333333333333330,
-                               0.2203389830508470,
-                               0.2203389830508470,
-                               0.2166666666666670,
-                               0.2166666666666670,
-                               0.2131147540983610,
-                               0.2096774193548390,
-                               0.2307692307692310,
-                               0.2187500000000000,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2131147540983610,
-                               0.2000000000000000,
-                               0.2131147540983610,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.1967213114754100,
-                               0.1935483870967740,
-                               0.1935483870967740,
-                               0.1935483870967740,
-                               0.1935483870967740,
-                               0.1935483870967740,
-                               0.1935483870967740,
-                               0.1935483870967740,
-                               0.1935483870967740,
-                               0.1935483870967740,
-                               0.1875000000000000,
-                               0.1846153846153850,
-                               0.1818181818181820,
-                               0.1818181818181820,
-                               0.1818181818181820,
-                               0.1818181818181820,
-                               0.1846153846153850,
-                               0.1846153846153850,
-                               0.1846153846153850,
-                               0.1818181818181820,
-                               0.1764705882352940,
-                               0.1764705882352940,
-                               0.1791044776119400,
-                               0.1764705882352940,
-                               0.1764705882352940,
-                               0.1764705882352940,
-                               0.1818181818181820,
-                               0.1818181818181820,
-                               0.1846153846153850,
-                               0.1846153846153850,
-                               0.1846153846153850,
-                               0.1846153846153850,
-                               0.1935483870967740,
-                               0.1935483870967740,
-                               0.1935483870967740,
-                               0.1967213114754100,
-                               0.1967213114754100,
-                               0.1967213114754100,
-                               0.2033898305084750,
-                               0.2033898305084750,
-                               0.2033898305084750,
-                               0.2068965517241380,
-                               0.2068965517241380,
-                               0.2068965517241380,
-                               0.2142857142857140,
-                               0.2142857142857140,
-                               0.2105263157894740,
-                               0.2142857142857140,
-                               0.2142857142857140,
-                               0.2181818181818180,
-                               0.2181818181818180,
-                               0.2181818181818180,
-                               0.2181818181818180,
-                               0.2181818181818180,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2075471698113210,
-                               0.2037037037037040,
-                               0.2075471698113210,
-                               0.1886792452830190,
-                               0.1818181818181820,
-                               0.1666666666666670,
-                               0.1818181818181820,
-                               0.1818181818181820,
-                               0.1818181818181820,
-                               0.1818181818181820,
-                               0.1754385964912280,
-                               0.1785714285714290,
-                               0.1636363636363640,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1551724137931030,
-                               0.1551724137931030,
-                               0.1525423728813560,
-                               0.1525423728813560,
-                               0.1500000000000000,
-                               0.1500000000000000,
-                               0.1500000000000000,
-                               0.1500000000000000,
-                               0.1333333333333330,
-                               0.1333333333333330,
-                               0.1355932203389830,
-                               0.1355932203389830,
-                               0.1379310344827590,
-                               0.1379310344827590,
-                               0.1403508771929820,
-                               0.1403508771929820,
-                               0.1403508771929820,
-                               0.1355932203389830,
-                               0.1355932203389830,
-                               0.1355932203389830,
-                               0.1186440677966100,
-                               0.1186440677966100,
-                               0.1186440677966100,
-                               0.1186440677966100,
-                               0.1166666666666670,
-                               0.1147540983606560,
-                               0.1147540983606560,
-                               0.1147540983606560,
-                               0.1147540983606560,
-                               0.1129032258064520,
-                               0.1129032258064520,
-                               0.1129032258064520,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.1076923076923080,
-                               0.1076923076923080,
-                               0.1060606060606060,
-                               0.1060606060606060,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0895522388059701,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0869565217391304,
-                               0.0869565217391304,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0882352941176471,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0909090909090909,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0882352941176471,
-                               0.0869565217391304,
-                               0.0869565217391304,
-                               0.0869565217391304,
-                               0.0869565217391304,
-                               0.0869565217391304,
-                               0.0869565217391304,
-                               0.0869565217391304,
-                               0.0735294117647059,
-                               0.0597014925373134,
-                               0.0597014925373134,
-                               0.0597014925373134,
-                               0.0597014925373134,
-                               0.0597014925373134,
-                               0.0597014925373134,
-                               0.0597014925373134,
-                               0.0597014925373134,
-                               0.0597014925373134,
-                               0.0597014925373134,
-                               0.0606060606060606,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0303030303030303,
-                               0.0303030303030303,
-                               0.0303030303030303,
-                               0.0303030303030303,
-                               0.0298507462686567,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0298507462686567,
-                               0.0303030303030303,
-                               0.0303030303030303,
-                               0.0303030303030303,
-                               0.0303030303030303,
-                               0.0303030303030303,
-                               0.0303030303030303,
-                               0.0298507462686567,
-                               0.0298507462686567,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0303030303030303,
-                               0.0303030303030303,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0140845070422535,
-                               0.0140845070422535,
-                               0.0140845070422535,
-                               0.0140845070422535,
-                               0.0140845070422535,
-                               0.0140845070422535,
-                               0.0140845070422535,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0140845070422535,
-                               0.0140845070422535,
-                               0.0140845070422535,
-                               0.0140845070422535,
-                               0.0140845070422535,
-                               0.0140845070422535,
-                               0.0140845070422535,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0140845070422535,
-                               0.0140845070422535,
-                               0.0140845070422535,
-                               0.0140845070422535,
-                               0.0140845070422535,
-                               0.0140845070422535,
-                               0.0140845070422535,
-                               0.0140845070422535,
-                               0.0140845070422535,
-                               0.0140845070422535,
-                               0.0140845070422535,
-                               0.0140845070422535,
-                               0.0140845070422535,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0135135135135135,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0338983050847458,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0689655172413793,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0862068965517241,
-                               0.1034482758620690,
-                               0.1034482758620690,
-                               0.1034482758620690,
-                               0.1186440677966100,
-                               0.1186440677966100,
-                               0.1206896551724140,
-                               0.1206896551724140,
-                               0.1206896551724140,
-                               0.1206896551724140,
-                               0.1228070175438600,
-                               0.1228070175438600,
-                               0.1228070175438600,
-                               0.1228070175438600,
-                               0.1228070175438600,
-                               0.1228070175438600,
-                               0.1228070175438600,
-                               0.1228070175438600,
-                               0.1803278688524590,
-                               0.1803278688524590,
-                               0.1803278688524590,
-                               0.1833333333333330,
-                               0.1833333333333330,
-                               0.1833333333333330,
-                               0.1833333333333330,
-                               0.1967213114754100,
-                               0.1967213114754100,
-                               0.1967213114754100,
-                               0.1967213114754100,
-                               0.1967213114754100,
-                               0.2096774193548390,
-                               0.2131147540983610,
-                               0.2258064516129030,
-                               0.2295081967213110,
-                               0.2295081967213110,
-                               0.2372881355932200,
-                               0.2542372881355930,
-                               0.2542372881355930,
-                               0.2586206896551720,
-                               0.2586206896551720,
-                               0.2631578947368420,
-                               0.2678571428571430,
-                               0.2678571428571430,
-                               0.2807017543859650,
-                               0.2807017543859650,
-                               0.2807017543859650,
-                               0.2807017543859650,
-                               0.2857142857142860,
-                               0.2857142857142860,
-                               0.2857142857142860,
-                               0.2857142857142860,
-                               0.2857142857142860,
-                               0.2982456140350880,
-                               0.3103448275862070,
-                               0.3275862068965520,
-                               0.3389830508474580,
-                               0.3448275862068970,
-                               0.3684210526315790,
-                               0.3684210526315790,
-                               0.3859649122807020,
-                               0.3965517241379310,
-                               0.3965517241379310,
-                               0.3965517241379310,
-                               0.3965517241379310,
-                               0.3965517241379310,
-                               0.3898305084745760,
-                               0.3898305084745760,
-                               0.3898305084745760,
-                               0.3898305084745760,
-                               0.4000000000000000,
-                               0.4067796610169490,
-                               0.4166666666666670,
-                               0.4166666666666670,
-                               0.4166666666666670,
-                               0.4166666666666670,
-                               0.4166666666666670,
-                               0.4166666666666670,
-                               0.4166666666666670,
-                               0.4166666666666670,
-                               0.4067796610169490,
-                               0.4067796610169490,
-                               0.4166666666666670,
-                               0.4333333333333330,
-                               0.4333333333333330,
-                               0.4406779661016950,
-                               0.4406779661016950,
-                               0.4406779661016950,
-                               0.4333333333333330,
-                               0.4262295081967210,
-                               0.4426229508196720,
-                               0.4736842105263160,
-                               0.4827586206896550,
-                               0.4915254237288140,
-                               0.5000000000000000,
-                               0.5084745762711860,
-                               0.5084745762711860,
-                               0.5172413793103450,
-                               0.5172413793103450,
-                               0.5172413793103450,
-                               0.5172413793103450,
-                               0.5344827586206900,
-                               0.5344827586206900,
-                               0.5636363636363640,
-                               0.5636363636363640,
-                               0.6037735849056600,
-                               0.6111111111111110,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6111111111111110,
-                               0.6111111111111110,
-                               0.6111111111111110,
-                               0.6181818181818180,
-                               0.6181818181818180,
-                               0.6181818181818180,
-                               0.6181818181818180,
-                               0.6181818181818180,
-                               0.6181818181818180,
-                               0.6181818181818180,
-                               0.6181818181818180,
-                               0.6181818181818180,
-                               0.6296296296296300,
-                               0.6296296296296300,
-                               0.6415094339622640,
-                               0.6666666666666670,
-                               0.6800000000000000,
-                               0.6938775510204080,
-                               0.7000000000000000,
-                               0.7000000000000000,
-                               0.7115384615384620,
-                               0.7115384615384620,
-                               0.7115384615384620,
-                               0.7169811320754720,
-                               0.7413793103448280,
-                               0.7413793103448280,
-                               0.7413793103448280,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7627118644067800,
-                               0.7627118644067800,
-                               0.7741935483870970,
-                               0.7741935483870970,
-                               0.7741935483870970,
-                               0.7868852459016390,
-                               0.7903225806451610,
-                               0.7903225806451610,
-                               0.7936507936507940,
-                               0.7936507936507940,
-                               0.7936507936507940,
-                               0.7936507936507940,
-                               0.8125000000000000,
-                               0.8125000000000000,
-                               0.8125000000000000,
-                               0.8125000000000000,
-                               0.8125000000000000,
-                               0.8125000000000000,
-                               0.8153846153846150,
-                               0.8153846153846150,
-                               0.8153846153846150,
-                               0.8153846153846150,
-                               0.8153846153846150,
-                               0.8181818181818180,
-                               0.8181818181818180,
-                               0.8181818181818180,
-                               0.8235294117647060,
-                               0.8235294117647060,
-                               0.8235294117647060,
-                               0.8235294117647060,
-                               0.8358208955223880,
-                               0.8358208955223880,
-                               0.8358208955223880,
-                               0.8358208955223880,
-                               0.8358208955223880,
-                               0.8358208955223880,
-                               0.8358208955223880,
-                               0.8358208955223880,
-                               0.8358208955223880,
-                               0.8358208955223880,
-                               0.8382352941176470,
-                               0.8358208955223880,
-                               0.8507462686567160,
-                               0.8507462686567160,
-                               0.8507462686567160,
-                               0.8507462686567160,
-                               0.8507462686567160,
-                               0.8529411764705880,
-                               0.8529411764705880,
-                               0.8529411764705880,
-                               0.8529411764705880,
-                               0.8529411764705880,
-                               0.8529411764705880,
-                               0.8529411764705880,
-                               0.8550724637681160,
-                               0.8550724637681160,
-                               0.8550724637681160,
-                               0.8550724637681160,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8805970149253730,
-                               0.8805970149253730,
-                               0.8805970149253730,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8805970149253730,
-                               0.8939393939393940,
-                               0.8923076923076920,
-                               0.8923076923076920,
-                               0.8923076923076920,
-                               0.8787878787878790,
-                               0.8787878787878790,
-                               0.8656716417910450,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8550724637681160,
-                               0.8550724637681160,
-                               0.8550724637681160,
-                               0.8550724637681160,
-                               0.8550724637681160,
-                               0.8529411764705880,
-                               0.8529411764705880,
-                               0.8529411764705880,
-                               0.8529411764705880,
-                               0.8529411764705880,
-                               0.8529411764705880,
-                               0.8529411764705880,
-                               0.8529411764705880,
-                               0.8529411764705880,
-                               0.8529411764705880,
-                               0.8529411764705880,
-                               0.8529411764705880,
-                               0.8656716417910450,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8676470588235290,
-                               0.8550724637681160,
-                               0.8428571428571430,
-                               0.8428571428571430,
-                               0.8428571428571430,
-                               0.8428571428571430,
-                               0.8428571428571430,
-                               0.8428571428571430,
-                               0.8428571428571430,
-                               0.8428571428571430,
-                               0.8405797101449270,
-                               0.8405797101449270,
-                               0.8405797101449270,
-                               0.8285714285714290,
-                               0.8285714285714290,
-                               0.8285714285714290,
-                               0.8285714285714290,
-                               0.8285714285714290,
-                               0.8285714285714290,
-                               0.8235294117647060,
-                               0.8484848484848480,
-                               0.8461538461538460,
-                               0.8461538461538460,
-                               0.8461538461538460,
-                               0.8437500000000000,
-                               0.8181818181818180,
-                               0.8181818181818180,
-                               0.8181818181818180,
-                               0.8208955223880600,
-                               0.8208955223880600,
-                               0.8088235294117650,
-                               0.8088235294117650,
-                               0.8088235294117650,
-                               0.8088235294117650,
-                               0.8088235294117650,
-                               0.8088235294117650,
-                               0.8088235294117650,
-                               0.8088235294117650,
-                               0.7971014492753620,
-                               0.7826086956521740,
-                               0.7826086956521740,
-                               0.7794117647058820,
-                               0.7794117647058820,
-                               0.7910447761194030,
-                               0.8030303030303030,
-                               0.8030303030303030,
-                               0.8000000000000000,
-                               0.7878787878787880,
-                               0.7878787878787880,
-                               0.8000000000000000,
-                               0.7936507936507940,
-                               0.7777777777777780,
-                               0.7580645161290320,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7457627118644070,
-                               0.7096774193548390,
-                               0.7166666666666670,
-                               0.7213114754098360,
-                               0.7213114754098360,
-                               0.7213114754098360,
-                               0.7213114754098360,
-                               0.7213114754098360,
-                               0.7096774193548390,
-                               0.7096774193548390,
-                               0.7096774193548390,
-                               0.7096774193548390,
-                               0.7142857142857140,
-                               0.7142857142857140,
-                               0.6984126984126980,
-                               0.7031250000000000,
-                               0.7031250000000000,
-                               0.7031250000000000,
-                               0.7031250000000000,
-                               0.7031250000000000,
-                               0.7031250000000000,
-                               0.7031250000000000,
-                               0.7076923076923080,
-                               0.7076923076923080,
-                               0.7076923076923080,
-                               0.7076923076923080,
-                               0.7076923076923080,
-                               0.7031250000000000,
-                               0.7031250000000000,
-                               0.7031250000000000,
-                               0.6923076923076920,
-                               0.7031250000000000,
-                               0.6984126984126980,
-                               0.7031250000000000,
-                               0.6984126984126980,
-                               0.6984126984126980,
-                               0.7096774193548390,
-                               0.6984126984126980,
-                               0.6984126984126980,
-                               0.6984126984126980,
-                               0.6984126984126980,
-                               0.6935483870967740,
-                               0.6825396825396830,
-                               0.6825396825396830,
-                               0.6984126984126980,
-                               0.7096774193548390,
-                               0.7096774193548390,
-                               0.7096774193548390,
-                               0.7096774193548390,
-                               0.7213114754098360,
-                               0.7540983606557380,
-                               0.7540983606557380,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7758620689655170,
-                               0.7931034482758620,
-                               0.8000000000000000,
-                               0.8000000000000000,
-                               0.8064516129032260,
-                               0.8196721311475410,
-                               0.8253968253968250,
-                               0.8281250000000000,
-                               0.8281250000000000,
-                               0.8281250000000000,
-                               0.8412698412698410,
-                               0.8437500000000000,
-                               0.8437500000000000,
-                               0.8437500000000000,
-                               0.8412698412698410,
-                               0.8412698412698410,
-                               0.8412698412698410,
-                               0.8412698412698410,
-                               0.8412698412698410,
-                               0.8412698412698410,
-                               0.8412698412698410,
-                               0.8412698412698410,
-                               0.8524590163934430,
-                               0.8524590163934430,
-                               0.8500000000000000,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8500000000000000,
-                               0.8524590163934430,
-                               0.8524590163934430,
-                               0.8524590163934430,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8548387096774190,
-                               0.8412698412698410,
-                               0.8437500000000000,
-                               0.8437500000000000,
-                               0.8437500000000000,
-                               0.8307692307692310,
-                               0.8307692307692310,
-                               0.8307692307692310,
-                               0.8281250000000000,
-                               0.8281250000000000,
-                               0.8281250000000000,
-                               0.8281250000000000,
-                               0.8281250000000000,
-                               0.8281250000000000,
-                               0.8307692307692310,
-                               0.8307692307692310,
-                               0.8307692307692310,
-                               0.8307692307692310,
-                               0.8307692307692310,
-                               0.8307692307692310,
-                               0.8307692307692310,
-                               0.8181818181818180,
-                               0.8181818181818180,
-                               0.8153846153846150,
-                               0.8153846153846150,
-                               0.8281250000000000,
-                               0.8281250000000000,
-                               0.8225806451612900,
-                               0.8225806451612900,
-                               0.8095238095238100,
-                               0.8095238095238100,
-                               0.8225806451612900,
-                               0.8360655737704920,
-                               0.8360655737704920,
-                               0.8360655737704920,
-                               0.8360655737704920,
-                               0.8360655737704920,
-                               0.8360655737704920,
-                               0.8360655737704920,
-                               0.8360655737704920,
-                               0.8360655737704920,
-                               0.8360655737704920,
-                               0.8360655737704920,
-                               0.8360655737704920,
-                               0.8360655737704920,
-                               0.8500000000000000,
-                               0.8500000000000000,
-                               0.8500000000000000,
-                               0.8500000000000000,
-                               0.8500000000000000,
-                               0.8500000000000000,
-                               0.8500000000000000,
-                               0.8500000000000000,
-                               0.8500000000000000,
-                               0.8474576271186440,
-                               0.8500000000000000,
-                               0.8500000000000000,
-                               0.8333333333333330,
-                               0.8333333333333330,
-                               0.8500000000000000,
-                               0.8524590163934430,
-                               0.8387096774193550,
-                               0.8387096774193550,
-                               0.8387096774193550,
-                               0.8387096774193550,
-                               0.8412698412698410,
-                               0.8412698412698410,
-                               0.8412698412698410,
-                               0.8412698412698410,
-                               0.8387096774193550,
-                               0.8225806451612900,
-                               0.8225806451612900,
-                               0.8225806451612900,
-                               0.8225806451612900,
-                               0.8225806451612900,
-                               0.8253968253968250,
-                               0.8253968253968250,
-                               0.8253968253968250,
-                               0.8253968253968250,
-                               0.8253968253968250,
-                               0.8253968253968250,
-                               0.8253968253968250,
-                               0.8095238095238100,
-                               0.8225806451612900,
-                               0.8196721311475410,
-                               0.8166666666666670,
-                               0.8166666666666670,
-                               0.8166666666666670,
-                               0.8166666666666670,
-                               0.8166666666666670,
-                               0.8135593220338980,
-                               0.8135593220338980,
-                               0.7966101694915250,
-                               0.7868852459016390,
-                               0.7741935483870970,
-                               0.7741935483870970,
-                               0.7741935483870970,
-                               0.7741935483870970,
-                               0.7777777777777780,
-                               0.7777777777777780,
-                               0.7741935483870970,
-                               0.7741935483870970,
-                               0.7777777777777780,
-                               0.7741935483870970,
-                               0.7741935483870970,
-                               0.7868852459016390,
-                               0.7868852459016390,
-                               0.7741935483870970,
-                               0.7704918032786880,
-                               0.7580645161290320,
-                               0.7666666666666670,
-                               0.7540983606557380,
-                               0.7540983606557380,
-                               0.7540983606557380,
-                               0.7500000000000000,
-                               0.7377049180327870,
-                               0.7377049180327870,
-                               0.7377049180327870,
-                               0.7377049180327870,
-                               0.7377049180327870,
-                               0.7377049180327870,
-                               0.7377049180327870,
-                               0.7377049180327870,
-                               0.7377049180327870,
-                               0.7377049180327870,
-                               0.7377049180327870,
-                               0.7377049180327870,
-                               0.7377049180327870,
-                               0.7258064516129030,
-                               0.7142857142857140,
-                               0.7096774193548390,
-                               0.7049180327868850,
-                               0.7049180327868850,
-                               0.7166666666666670,
-                               0.7118644067796610,
-                               0.7118644067796610,
-                               0.7118644067796610,
-                               0.7118644067796610,
-                               0.7118644067796610,
-                               0.7118644067796610,
-                               0.7118644067796610,
-                               0.7241379310344830,
-                               0.7118644067796610,
-                               0.7000000000000000,
-                               0.6885245901639340,
-                               0.7000000000000000,
-                               0.7000000000000000,
-                               0.6949152542372880,
-                               0.6949152542372880,
-                               0.6949152542372880,
-                               0.6949152542372880,
-                               0.7068965517241380,
-                               0.6949152542372880,
-                               0.6896551724137930,
-                               0.7017543859649120,
-                               0.7017543859649120,
-                               0.7017543859649120,
-                               0.6779661016949150,
-                               0.6666666666666670,
-                               0.6610169491525420,
-                               0.6610169491525420,
-                               0.6610169491525420,
-                               0.6610169491525420,
-                               0.6500000000000000,
-                               0.6500000000000000,
-                               0.6440677966101690,
-                               0.6440677966101690,
-                               0.6428571428571430,
-                               0.6428571428571430,
-                               0.6428571428571430,
-                               0.6428571428571430,
-                               0.6315789473684210,
-                               0.6206896551724140,
-                               0.6206896551724140,
-                               0.6034482758620690,
-                               0.6034482758620690,
-                               0.6034482758620690,
-                               0.6034482758620690,
-                               0.6034482758620690,
-                               0.6140350877192980,
-                               0.6140350877192980,
-                               0.6071428571428570,
-                               0.6071428571428570,
-                               0.6071428571428570,
-                               0.5964912280701750,
-                               0.5862068965517240,
-                               0.5862068965517240,
-                               0.5862068965517240,
-                               0.5862068965517240,
-                               0.5964912280701750,
-                               0.6181818181818180,
-                               0.5964912280701750,
-                               0.5964912280701750,
-                               0.5964912280701750,
-                               0.5892857142857140,
-                               0.5689655172413790,
-                               0.5614035087719300,
-                               0.5614035087719300,
-                               0.5535714285714290,
-                               0.5555555555555560,
-                               0.5555555555555560,
-                               0.5555555555555560,
-                               0.5636363636363640,
-                               0.5636363636363640,
-                               0.5636363636363640,
-                               0.5636363636363640,
-                               0.5636363636363640,
-                               0.5636363636363640,
-                               0.5740740740740740,
-                               0.5740740740740740,
-                               0.5740740740740740,
-                               0.5740740740740740,
-                               0.5740740740740740,
-                               0.5576923076923080,
-                               0.5576923076923080,
-                               0.5490196078431370,
-                               0.5490196078431370,
-                               0.5600000000000000,
-                               0.5400000000000000,
-                               0.5400000000000000,
-                               0.5400000000000000,
-                               0.5400000000000000,
-                               0.5400000000000000,
-                               0.5400000000000000,
-                               0.5400000000000000,
-                               0.5192307692307690,
-                               0.5192307692307690,
-                               0.5192307692307690,
-                               0.4905660377358490,
-                               0.4905660377358490,
-                               0.4905660377358490,
-                               0.4814814814814810,
-                               0.4814814814814810,
-                               0.4814814814814810,
-                               0.4814814814814810,
-                               0.4561403508771930,
-                               0.4561403508771930,
-                               0.4363636363636360,
-                               0.4363636363636360,
-                               0.4363636363636360,
-                               0.4259259259259260,
-                               0.3962264150943400,
-                               0.3962264150943400,
-                               0.3846153846153850,
-                               0.3846153846153850,
-                               0.3846153846153850,
-                               0.3921568627450980,
-                               0.3921568627450980,
-                               0.3773584905660380,
-                               0.3333333333333330,
-                               0.3148148148148150,
-                               0.3018867924528300,
-                               0.2962962962962960,
-                               0.3018867924528300,
-                               0.3018867924528300,
-                               0.3018867924528300,
-                               0.3018867924528300,
-                               0.3076923076923080,
-                               0.3137254901960780,
-                               0.3137254901960780,
-                               0.3137254901960780,
-                               0.2857142857142860,
-                               0.2857142857142860,
-                               0.2800000000000000,
-                               0.2745098039215690,
-                               0.2692307692307690,
-                               0.2745098039215690,
-                               0.2600000000000000,
-                               0.2600000000000000,
-                               0.2600000000000000,
-                               0.2600000000000000,
-                               0.2549019607843140,
-                               0.2500000000000000,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.1960784313725490,
-                               0.1923076923076920,
-                               0.1923076923076920,
-                               0.1923076923076920,
-                               0.1923076923076920,
-                               0.1764705882352940,
-                               0.1764705882352940,
-                               0.1764705882352940,
-                               0.1764705882352940,
-                               0.1923076923076920,
-                               0.1923076923076920,
-                               0.1960784313725490,
-                               0.1960784313725490,
-                               0.1960784313725490,
-                               0.2000000000000000,
-                               0.1923076923076920,
-                               0.1960784313725490,
-                               0.1800000000000000,
-                               0.1800000000000000,
-                               0.1764705882352940,
-                               0.1800000000000000,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1698113207547170,
-                               0.1851851851851850,
-                               0.1851851851851850,
-                               0.1886792452830190,
-                               0.1851851851851850,
-                               0.1886792452830190,
-                               0.1886792452830190,
-                               0.1923076923076920,
-                               0.1923076923076920,
-                               0.1886792452830190,
-                               0.1886792452830190,
-                               0.1764705882352940,
-                               0.1600000000000000,
-                               0.1538461538461540,
-                               0.1481481481481480,
-                               0.1538461538461540,
-                               0.1538461538461540,
-                               0.1509433962264150,
-                               0.1346153846153850,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1153846153846150,
-                               0.1153846153846150,
-                               0.1176470588235290,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0943396226415094,
-                               0.0943396226415094,
-                               0.0943396226415094,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0909090909090909,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0847457627118644,
-                               0.0819672131147541,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0793650793650794,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0833333333333333,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0833333333333333,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0727272727272727,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0714285714285714,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0701754385964912,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0483870967741936,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0327868852459016,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0333333333333333,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0333333333333333,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0166666666666667,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0166666666666667,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0153846153846154,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0322580645161290,
-                               0.0327868852459016,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0491803278688525,
-                               0.0500000000000000,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0701754385964912,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.1071428571428570,
-                               0.1071428571428570,
-                               0.1071428571428570,
-                               0.1071428571428570,
-                               0.1071428571428570,
-                               0.1071428571428570,
-                               0.1071428571428570,
-                               0.1052631578947370,
-                               0.1052631578947370,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1111111111111110,
-                               0.1132075471698110,
-                               0.1153846153846150,
-                               0.1176470588235290,
-                               0.1176470588235290,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1509433962264150,
-                               0.1509433962264150,
-                               0.1666666666666670,
-                               0.1666666666666670,
-                               0.1818181818181820,
-                               0.1851851851851850,
-                               0.2280701754385960,
-                               0.2413793103448280,
-                               0.2413793103448280,
-                               0.2413793103448280,
-                               0.2413793103448280,
-                               0.2413793103448280,
-                               0.2413793103448280,
-                               0.2413793103448280,
-                               0.2413793103448280,
-                               0.2413793103448280,
-                               0.2413793103448280,
-                               0.2500000000000000,
-                               0.2545454545454540,
-                               0.2592592592592590,
-                               0.2500000000000000,
-                               0.2500000000000000,
-                               0.2500000000000000,
-                               0.2500000000000000,
-                               0.2452830188679250,
-                               0.2592592592592590,
-                               0.2592592592592590,
-                               0.2592592592592590,
-                               0.2592592592592590,
-                               0.2727272727272730,
-                               0.2727272727272730,
-                               0.2727272727272730,
-                               0.2909090909090910,
-                               0.2909090909090910,
-                               0.2962962962962960,
-                               0.3090909090909090,
-                               0.3090909090909090,
-                               0.3090909090909090,
-                               0.3090909090909090,
-                               0.3148148148148150,
-                               0.3148148148148150,
-                               0.3148148148148150,
-                               0.3207547169811320,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3396226415094340,
-                               0.3396226415094340,
-                               0.3518518518518520,
-                               0.3584905660377360,
-                               0.3703703703703700,
-                               0.3703703703703700,
-                               0.3703703703703700,
-                               0.3703703703703700,
-                               0.3703703703703700,
-                               0.3818181818181820,
-                               0.3818181818181820,
-                               0.4074074074074070,
-                               0.4074074074074070,
-                               0.4074074074074070,
-                               0.4074074074074070,
-                               0.4150943396226420,
-                               0.4150943396226420,
-                               0.4150943396226420,
-                               0.4150943396226420,
-                               0.4259259259259260,
-                               0.4150943396226420,
-                               0.4230769230769230,
-                               0.4230769230769230,
-                               0.4230769230769230,
-                               0.4230769230769230,
-                               0.4313725490196080,
-                               0.4423076923076920,
-                               0.4509803921568630,
-                               0.4509803921568630,
-                               0.4509803921568630,
-                               0.4509803921568630,
-                               0.4693877551020410,
-                               0.4693877551020410,
-                               0.4791666666666670,
-                               0.4791666666666670,
-                               0.4791666666666670,
-                               0.4893617021276600,
-                               0.5000000000000000,
-                               0.5000000000000000,
-                               0.5111111111111110,
-                               0.5111111111111110,
-                               0.5217391304347830,
-                               0.5217391304347830,
-                               0.5217391304347830,
-                               0.5333333333333330,
-                               0.5581395348837210,
-                               0.5581395348837210,
-                               0.5681818181818180,
-                               0.5777777777777780,
-                               0.5652173913043480,
-                               0.5531914893617020,
-                               0.5777777777777780,
-                               0.5777777777777780,
-                               0.5909090909090910,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.6250000000000000,
-                               0.6250000000000000,
-                               0.6382978723404260,
-                               0.6382978723404260,
-                               0.6382978723404260,
-                               0.6382978723404260,
-                               0.6382978723404260,
-                               0.6382978723404260,
-                               0.6382978723404260,
-                               0.6521739130434780,
-                               0.6739130434782610,
-                               0.6888888888888890,
-                               0.7083333333333330,
-                               0.7083333333333330,
-                               0.7083333333333330,
-                               0.7083333333333330,
-                               0.7200000000000000,
-                               0.7346938775510200,
-                               0.7450980392156860,
-                               0.7450980392156860,
-                               0.7450980392156860,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7592592592592590,
-                               0.7592592592592590,
-                               0.7592592592592590,
-                               0.7592592592592590,
-                               0.7592592592592590,
-                               0.7454545454545450,
-                               0.7592592592592590,
-                               0.7592592592592590,
-                               0.7678571428571430,
-                               0.7678571428571430,
-                               0.7678571428571430,
-                               0.7543859649122810,
-                               0.7719298245614030,
-                               0.7719298245614030,
-                               0.7758620689655170,
-                               0.7758620689655170,
-                               0.7796610169491530,
-                               0.7796610169491530,
-                               0.7796610169491530,
-                               0.7796610169491530,
-                               0.7796610169491530,
-                               0.7796610169491530,
-                               0.7758620689655170,
-                               0.7758620689655170,
-                               0.7894736842105260,
-                               0.7894736842105260,
-                               0.7894736842105260,
-                               0.7894736842105260,
-                               0.7894736842105260,
-                               0.7894736842105260,
-                               0.7931034482758620,
-                               0.7931034482758620,
-                               0.7931034482758620,
-                               0.7931034482758620,
-                               0.8070175438596490,
-                               0.8214285714285710,
-                               0.8245614035087720,
-                               0.8245614035087720,
-                               0.8245614035087720,
-                               0.8245614035087720,
-                               0.8245614035087720,
-                               0.8245614035087720,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8392857142857140,
-                               0.8545454545454550,
-                               0.8545454545454550,
-                               0.8545454545454550,
-                               0.8545454545454550,
-                               0.8545454545454550,
-                               0.8545454545454550,
-                               0.8545454545454550,
-                               0.8545454545454550,
-                               0.8518518518518520,
-                               0.8518518518518520,
-                               0.8518518518518520,
-                               0.8363636363636360,
-                               0.8545454545454550,
-                               0.8571428571428570,
-                               0.8596491228070170,
-                               0.8596491228070170,
-                               0.8596491228070170,
-                               0.8596491228070170,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8596491228070170,
-                               0.8596491228070170,
-                               0.8596491228070170,
-                               0.8596491228070170,
-                               0.8596491228070170,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8545454545454550,
-                               0.8545454545454550,
-                               0.8545454545454550,
-                               0.8571428571428570,
-                               0.8596491228070170,
-                               0.8596491228070170,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8644067796610170,
-                               0.8644067796610170,
-                               0.8644067796610170,
-                               0.8793103448275860,
-                               0.8771929824561400,
-                               0.8771929824561400,
-                               0.8793103448275860,
-                               0.8793103448275860,
-                               0.8793103448275860,
-                               0.8793103448275860,
-                               0.8813559322033900,
-                               0.8813559322033900,
-                               0.8813559322033900,
-                               0.8813559322033900,
-                               0.8813559322033900,
-                               0.8813559322033900,
-                               0.8813559322033900,
-                               0.8813559322033900,
-                               0.8813559322033900,
-                               0.8813559322033900,
-                               0.8813559322033900,
-                               0.8771929824561400,
-                               0.8771929824561400,
-                               0.8771929824561400,
-                               0.8771929824561400,
-                               0.8771929824561400,
-                               0.8771929824561400,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8448275862068960,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8392857142857140,
-                               0.8333333333333330,
-                               0.8301886792452830,
-                               0.8301886792452830,
-                               0.8301886792452830,
-                               0.8301886792452830,
-                               0.8235294117647060,
-                               0.8235294117647060,
-                               0.8269230769230770,
-                               0.8269230769230770,
-                               0.8431372549019610,
-                               0.8431372549019610,
-                               0.8490566037735850,
-                               0.8490566037735850,
-                               0.8518518518518520,
-                               0.8518518518518520,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8571428571428570,
-                               0.8545454545454550,
-                               0.8545454545454550,
-                               0.8596491228070170,
-                               0.8596491228070170,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8596491228070170,
-                               0.8596491228070170,
-                               0.8596491228070170,
-                               0.8596491228070170,
-                               0.8596491228070170,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8545454545454550,
-                               0.8545454545454550,
-                               0.8518518518518520,
-                               0.8518518518518520,
-                               0.8545454545454550,
-                               0.8596491228070170,
-                               0.8596491228070170,
-                               0.8596491228070170,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8644067796610170,
-                               0.8644067796610170,
-                               0.8644067796610170,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8666666666666670,
-                               0.8813559322033900,
-                               0.8793103448275860,
-                               0.8793103448275860,
-                               0.8771929824561400,
-                               0.8771929824561400,
-                               0.8771929824561400,
-                               0.8771929824561400,
-                               0.8771929824561400,
-                               0.8771929824561400,
-                               0.8793103448275860,
-                               0.8771929824561400,
-                               0.8771929824561400,
-                               0.8620689655172410,
-                               0.8644067796610170,
-                               0.8644067796610170,
-                               0.8644067796610170,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8771929824561400,
-                               0.8771929824561400,
-                               0.8771929824561400,
-                               0.8771929824561400,
-                               0.8771929824561400,
-                               0.8750000000000000,
-                               0.8771929824561400,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8750000000000000,
-                               0.8771929824561400,
-                               0.8771929824561400,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8620689655172410,
-                               0.8474576271186440,
-                               0.8474576271186440,
-                               0.8448275862068960,
-                               0.8448275862068960,
-                               0.8448275862068960,
-                               0.8448275862068960,
-                               0.8448275862068960,
-                               0.8448275862068960,
-                               0.8448275862068960,
-                               0.8448275862068960,
-                               0.8448275862068960,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8421052631578950,
-                               0.8448275862068960,
-                               0.8448275862068960,
-                               0.8571428571428570,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8727272727272730,
-                               0.8703703703703700,
-                               0.8867924528301890,
-                               0.8867924528301890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8888888888888890,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8703703703703700,
-                               0.8679245283018870,
-                               0.8679245283018870,
-                               0.8703703703703700,
-                               0.8518518518518520,
-                               0.8518518518518520,
-                               0.8518518518518520,
-                               0.8679245283018870,
-                               0.8679245283018870,
-                               0.8653846153846150,
-                               0.8653846153846150,
-                               0.8627450980392160,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8571428571428570,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8600000000000000,
-                               0.8627450980392160,
-                               0.8627450980392160,
-                               0.8627450980392160,
-                               0.8627450980392160,
-                               0.8600000000000000,
-                               0.8775510204081630,
-                               0.8750000000000000,
-                               0.8571428571428570,
-                               0.8400000000000000,
-                               0.8400000000000000,
-                               0.8400000000000000,
-                               0.8235294117647060,
-                               0.8235294117647060,
-                               0.8235294117647060,
-                               0.8235294117647060,
-                               0.8235294117647060,
-                               0.8235294117647060,
-                               0.8076923076923080,
-                               0.7924528301886790,
-                               0.7924528301886790,
-                               0.7818181818181820,
-                               0.7818181818181820,
-                               0.7818181818181820,
-                               0.7818181818181820,
-                               0.7818181818181820,
-                               0.7818181818181820,
-                               0.7818181818181820,
-                               0.7818181818181820,
-                               0.7857142857142860,
-                               0.7857142857142860,
-                               0.7857142857142860,
-                               0.7924528301886790,
-                               0.7924528301886790,
-                               0.7924528301886790,
-                               0.7924528301886790,
-                               0.7924528301886790,
-                               0.8076923076923080,
-                               0.7924528301886790,
-                               0.7924528301886790,
-                               0.7962962962962960,
-                               0.7962962962962960,
-                               0.7962962962962960,
-                               0.7962962962962960,
-                               0.7962962962962960,
-                               0.7962962962962960,
-                               0.7962962962962960,
-                               0.8113207547169810,
-                               0.7924528301886790,
-                               0.7924528301886790,
-                               0.7777777777777780,
-                               0.7777777777777780,
-                               0.7636363636363640,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7500000000000000,
-                               0.7368421052631580,
-                               0.7368421052631580,
-                               0.7368421052631580,
-                               0.7368421052631580,
-                               0.7241379310344830,
-                               0.7192982456140350,
-                               0.7192982456140350,
-                               0.7192982456140350,
-                               0.7192982456140350,
-                               0.7192982456140350,
-                               0.7192982456140350,
-                               0.7142857142857140,
-                               0.7142857142857140,
-                               0.7142857142857140,
-                               0.7142857142857140,
-                               0.7090909090909090,
-                               0.7090909090909090,
-                               0.7090909090909090,
-                               0.7037037037037040,
-                               0.7037037037037040,
-                               0.7037037037037040,
-                               0.7037037037037040,
-                               0.7037037037037040,
-                               0.6851851851851850,
-                               0.6909090909090910,
-                               0.6909090909090910,
-                               0.6909090909090910,
-                               0.6909090909090910,
-                               0.7037037037037040,
-                               0.7037037037037040,
-                               0.7037037037037040,
-                               0.7037037037037040,
-                               0.6981132075471700,
-                               0.6981132075471700,
-                               0.6981132075471700,
-                               0.6923076923076920,
-                               0.6923076923076920,
-                               0.6923076923076920,
-                               0.6923076923076920,
-                               0.6923076923076920,
-                               0.6792452830188680,
-                               0.6792452830188680,
-                               0.6792452830188680,
-                               0.6792452830188680,
-                               0.6730769230769230,
-                               0.6730769230769230,
-                               0.6666666666666670,
-                               0.6538461538461540,
-                               0.6538461538461540,
-                               0.6538461538461540,
-                               0.6538461538461540,
-                               0.6538461538461540,
-                               0.6538461538461540,
-                               0.6538461538461540,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6666666666666670,
-                               0.6538461538461540,
-                               0.6470588235294120,
-                               0.6346153846153850,
-                               0.6346153846153850,
-                               0.6346153846153850,
-                               0.6346153846153850,
-                               0.6346153846153850,
-                               0.6346153846153850,
-                               0.6400000000000000,
-                               0.6326530612244900,
-                               0.6326530612244900,
-                               0.6326530612244900,
-                               0.6326530612244900,
-                               0.6326530612244900,
-                               0.6250000000000000,
-                               0.6326530612244900,
-                               0.6326530612244900,
-                               0.6326530612244900,
-                               0.6250000000000000,
-                               0.6000000000000000,
-                               0.6000000000000000,
-                               0.5882352941176470,
-                               0.5882352941176470,
-                               0.5800000000000000,
-                               0.5600000000000000,
-                               0.5714285714285710,
-                               0.5714285714285710,
-                               0.5714285714285710,
-                               0.5625000000000000,
-                               0.5625000000000000,
-                               0.5625000000000000,
-                               0.5510204081632650,
-                               0.5294117647058820,
-                               0.5294117647058820,
-                               0.5384615384615380,
-                               0.5384615384615380,
-                               0.5384615384615380,
-                               0.5384615384615380,
-                               0.5000000000000000,
-                               0.5000000000000000,
-                               0.4893617021276600,
-                               0.4791666666666670,
-                               0.4680851063829790,
-                               0.4782608695652170,
-                               0.4666666666666670,
-                               0.4666666666666670,
-                               0.4666666666666670,
-                               0.4666666666666670,
-                               0.4565217391304350,
-                               0.4565217391304350,
-                               0.4255319148936170,
-                               0.4130434782608700,
-                               0.3863636363636360,
-                               0.3777777777777780,
-                               0.3636363636363640,
-                               0.3636363636363640,
-                               0.3333333333333330,
-                               0.3488372093023260,
-                               0.3636363636363640,
-                               0.3636363636363640,
-                               0.3488372093023260,
-                               0.3409090909090910,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3181818181818180,
-                               0.3255813953488370,
-                               0.3095238095238100,
-                               0.3095238095238100,
-                               0.2926829268292680,
-                               0.2926829268292680,
-                               0.2857142857142860,
-                               0.2857142857142860,
-                               0.2790697674418600,
-                               0.2790697674418600,
-                               0.2727272727272730,
-                               0.2727272727272730,
-                               0.2790697674418600,
-                               0.2790697674418600,
-                               0.2790697674418600,
-                               0.2790697674418600,
-                               0.2790697674418600,
-                               0.2619047619047620,
-                               0.2558139534883720,
-                               0.2558139534883720,
-                               0.2380952380952380,
-                               0.2380952380952380,
-                               0.2272727272727270,
-                               0.2142857142857140,
-                               0.2045454545454550,
-                               0.2000000000000000,
-                               0.1777777777777780,
-                               0.1777777777777780,
-                               0.1702127659574470,
-                               0.1521739130434780,
-                               0.1458333333333330,
-                               0.1458333333333330,
-                               0.1600000000000000,
-                               0.1600000000000000,
-                               0.1600000000000000,
-                               0.1600000000000000,
-                               0.1568627450980390,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1372549019607840,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1132075471698110,
-                               0.1153846153846150,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.1020408163265310,
-                               0.1020408163265310,
-                               0.1020408163265310,
-                               0.1020408163265310,
-                               0.1020408163265310,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1020408163265310,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1020408163265310,
-                               0.1020408163265310,
-                               0.1000000000000000,
-                               0.1020408163265310,
-                               0.1020408163265310,
-                               0.1020408163265310,
-                               0.1020408163265310,
-                               0.1041666666666670,
-                               0.1041666666666670,
-                               0.1020408163265310,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0851063829787234,
-                               0.0851063829787234,
-                               0.0851063829787234,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0851063829787234,
-                               0.0851063829787234,
-                               0.0851063829787234,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0800000000000000,
-                               0.0784313725490196,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0754716981132075,
-                               0.0754716981132075,
-                               0.0754716981132075,
-                               0.0754716981132075,
-                               0.0754716981132075,
-                               0.0754716981132075,
-                               0.0754716981132075,
-                               0.0754716981132075,
-                               0.0754716981132075,
-                               0.0576923076923077,
-                               0.0576923076923077,
-                               0.0576923076923077,
-                               0.0576923076923077,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0600000000000000,
-                               0.0600000000000000,
-                               0.0600000000000000,
-                               0.0600000000000000,
-                               0.0600000000000000,
-                               0.0600000000000000,
-                               0.0600000000000000,
-                               0.0600000000000000,
-                               0.0600000000000000,
-                               0.0600000000000000,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0600000000000000,
-                               0.0600000000000000,
-                               0.0600000000000000,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0576923076923077,
-                               0.0576923076923077,
-                               0.0576923076923077,
-                               0.0576923076923077,
-                               0.0566037735849057,
-                               0.0566037735849057,
-                               0.0566037735849057,
-                               0.0566037735849057,
-                               0.0566037735849057,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0545454545454545,
-                               0.0535714285714286,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0357142857142857,
-                               0.0357142857142857,
-                               0.0357142857142857,
-                               0.0357142857142857,
-                               0.0363636363636364,
-                               0.0357142857142857,
-                               0.0357142857142857,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0377358490566038,
-                               0.0377358490566038,
-                               0.0377358490566038,
-                               0.0377358490566038,
-                               0.0384615384615385,
-                               0.0392156862745098,
-                               0.0392156862745098,
-                               0.0400000000000000,
-                               0.0400000000000000,
-                               0.0392156862745098,
-                               0.0392156862745098,
-                               0.0377358490566038,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0377358490566038,
-                               0.0392156862745098,
-                               0.0392156862745098,
-                               0.0392156862745098,
-                               0.0392156862745098,
-                               0.0392156862745098,
-                               0.0392156862745098,
-                               0.0377358490566038,
-                               0.0377358490566038,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0185185185185185,
-                               0.0181818181818182,
-                               0.0181818181818182,
-                               0.0181818181818182,
-                               0.0181818181818182,
-                               0.0181818181818182,
-                               0.0181818181818182,
-                               0.0181818181818182,
-                               0.0181818181818182,
-                               0.0181818181818182,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000
-                       }
-               },
-               { PLACE_CATEG_ID_OTHER,
-                       {
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0178571428571429,
-                               0.0178571428571429,
-                               0.0178571428571429,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0178571428571429,
-                               0.0178571428571429,
-                               0.0178571428571429,
-                               0.0178571428571429,
-                               0.0178571428571429,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0181818181818182,
-                               0.0181818181818182,
-                               0.0178571428571429,
-                               0.0178571428571429,
-                               0.0178571428571429,
-                               0.0178571428571429,
-                               0.0185185185185185,
-                               0.0185185185185185,
-                               0.0185185185185185,
-                               0.0185185185185185,
-                               0.0185185185185185,
-                               0.0185185185185185,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0535714285714286,
-                               0.0535714285714286,
-                               0.0535714285714286,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0377358490566038,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0384615384615385,
-                               0.0384615384615385,
-                               0.0384615384615385,
-                               0.0384615384615385,
-                               0.0196078431372549,
-                               0.0196078431372549,
-                               0.0192307692307692,
-                               0.0192307692307692,
-                               0.0192307692307692,
-                               0.0196078431372549,
-                               0.0196078431372549,
-                               0.0196078431372549,
-                               0.0192307692307692,
-                               0.0192307692307692,
-                               0.0192307692307692,
-                               0.0192307692307692,
-                               0.0192307692307692,
-                               0.0192307692307692,
-                               0.0192307692307692,
-                               0.0192307692307692,
-                               0.0192307692307692,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0192307692307692,
-                               0.0192307692307692,
-                               0.0192307692307692,
-                               0.0192307692307692,
-                               0.0192307692307692,
-                               0.0192307692307692,
-                               0.0192307692307692,
-                               0.0185185185185185,
-                               0.0185185185185185,
-                               0.0185185185185185,
-                               0.0185185185185185,
-                               0.0185185185185185,
-                               0.0188679245283019,
-                               0.0185185185185185,
-                               0.0185185185185185,
-                               0.0185185185185185,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0192307692307692,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0181818181818182,
-                               0.0181818181818182,
-                               0.0181818181818182,
-                               0.0181818181818182,
-                               0.0181818181818182,
-                               0.0181818181818182,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0192307692307692,
-                               0.0200000000000000,
-                               0.0200000000000000,
-                               0.0208333333333333,
-                               0.0212765957446808,
-                               0.0212765957446808,
-                               0.0212765957446808,
-                               0.0212765957446808,
-                               0.0416666666666667,
-                               0.0400000000000000,
-                               0.0392156862745098,
-                               0.0384615384615385,
-                               0.0384615384615385,
-                               0.0384615384615385,
-                               0.0384615384615385,
-                               0.0392156862745098,
-                               0.0400000000000000,
-                               0.0400000000000000,
-                               0.0400000000000000,
-                               0.0392156862745098,
-                               0.0392156862745098,
-                               0.0392156862745098,
-                               0.0392156862745098,
-                               0.0392156862745098,
-                               0.0384615384615385,
-                               0.0384615384615385,
-                               0.0400000000000000,
-                               0.0392156862745098,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0408163265306122,
-                               0.0425531914893617,
-                               0.0425531914893617,
-                               0.0425531914893617,
-                               0.0425531914893617,
-                               0.0444444444444444,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0425531914893617,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0444444444444444,
-                               0.0444444444444444,
-                               0.0444444444444444,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0454545454545455,
-                               0.0454545454545455,
-                               0.0454545454545455,
-                               0.0454545454545455,
-                               0.0444444444444444,
-                               0.0444444444444444,
-                               0.0465116279069768,
-                               0.0454545454545455,
-                               0.0454545454545455,
-                               0.0454545454545455,
-                               0.0444444444444444,
-                               0.0444444444444444,
-                               0.0444444444444444,
-                               0.0454545454545455,
-                               0.0454545454545455,
-                               0.0454545454545455,
-                               0.0408163265306122,
-                               0.0408163265306122,
-                               0.0400000000000000,
-                               0.0392156862745098,
-                               0.0392156862745098,
-                               0.0392156862745098,
-                               0.0377358490566038,
-                               0.0377358490566038,
-                               0.0384615384615385,
-                               0.0384615384615385,
-                               0.0377358490566038,
-                               0.0377358490566038,
-                               0.0377358490566038,
-                               0.0377358490566038,
-                               0.0357142857142857,
-                               0.0357142857142857,
-                               0.0357142857142857,
-                               0.0357142857142857,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0357142857142857,
-                               0.0357142857142857,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0500000000000000,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0666666666666667,
-                               0.0677966101694915,
-                               0.0666666666666667,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0819672131147541,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0508474576271187,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0508474576271187,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0655737704918033,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0517241379310345,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0535714285714286,
-                               0.0535714285714286,
-                               0.0535714285714286,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0740740740740741,
-                               0.0740740740740741,
-                               0.0909090909090909,
-                               0.0925925925925926,
-                               0.1090909090909090,
-                               0.1111111111111110,
-                               0.1132075471698110,
-                               0.1153846153846150,
-                               0.1153846153846150,
-                               0.1153846153846150,
-                               0.0943396226415094,
-                               0.0943396226415094,
-                               0.0961538461538462,
-                               0.0943396226415094,
-                               0.0943396226415094,
-                               0.0943396226415094,
-                               0.0925925925925926,
-                               0.0909090909090909,
-                               0.1228070175438600,
-                               0.1228070175438600,
-                               0.1228070175438600,
-                               0.1228070175438600,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1228070175438600,
-                               0.1206896551724140,
-                               0.1206896551724140,
-                               0.1228070175438600,
-                               0.1071428571428570,
-                               0.1071428571428570,
-                               0.0909090909090909,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0892857142857143,
-                               0.0892857142857143,
-                               0.0892857142857143,
-                               0.1052631578947370,
-                               0.1052631578947370,
-                               0.1052631578947370,
-                               0.1071428571428570,
-                               0.1071428571428570,
-                               0.1071428571428570,
-                               0.1071428571428570,
-                               0.1071428571428570,
-                               0.1071428571428570,
-                               0.1071428571428570,
-                               0.1250000000000000,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.1090909090909090,
-                               0.1071428571428570,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1071428571428570,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0892857142857143,
-                               0.0892857142857143,
-                               0.0892857142857143,
-                               0.0892857142857143,
-                               0.0877192982456140,
-                               0.1071428571428570,
-                               0.1071428571428570,
-                               0.1228070175438600,
-                               0.1228070175438600,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1071428571428570,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1296296296296300,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1132075471698110,
-                               0.1153846153846150,
-                               0.1153846153846150,
-                               0.0980392156862745,
-                               0.1132075471698110,
-                               0.1153846153846150,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.1153846153846150,
-                               0.1176470588235290,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1400000000000000,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1600000000000000,
-                               0.1836734693877550,
-                               0.1836734693877550,
-                               0.1836734693877550,
-                               0.1632653061224490,
-                               0.1632653061224490,
-                               0.1800000000000000,
-                               0.1914893617021280,
-                               0.1914893617021280,
-                               0.1914893617021280,
-                               0.1914893617021280,
-                               0.1914893617021280,
-                               0.1914893617021280,
-                               0.1956521739130430,
-                               0.1956521739130430,
-                               0.1956521739130430,
-                               0.1956521739130430,
-                               0.2173913043478260,
-                               0.2173913043478260,
-                               0.2127659574468080,
-                               0.2127659574468080,
-                               0.2127659574468080,
-                               0.2040816326530610,
-                               0.2000000000000000,
-                               0.1818181818181820,
-                               0.1818181818181820,
-                               0.1818181818181820,
-                               0.1818181818181820,
-                               0.1627906976744190,
-                               0.1627906976744190,
-                               0.1627906976744190,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1463414634146340,
-                               0.1463414634146340,
-                               0.1860465116279070,
-                               0.1860465116279070,
-                               0.2045454545454550,
-                               0.2093023255813950,
-                               0.2093023255813950,
-                               0.2093023255813950,
-                               0.2272727272727270,
-                               0.2272727272727270,
-                               0.2608695652173910,
-                               0.2608695652173910,
-                               0.2444444444444440,
-                               0.2444444444444440,
-                               0.2954545454545450,
-                               0.2954545454545450,
-                               0.3404255319148940,
-                               0.3333333333333330,
-                               0.3265306122448980,
-                               0.3265306122448980,
-                               0.3200000000000000,
-                               0.3265306122448980,
-                               0.3400000000000000,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3269230769230770,
-                               0.3207547169811320,
-                               0.3396226415094340,
-                               0.3396226415094340,
-                               0.3333333333333330,
-                               0.3269230769230770,
-                               0.3207547169811320,
-                               0.3207547169811320,
-                               0.3207547169811320,
-                               0.3148148148148150,
-                               0.3148148148148150,
-                               0.3148148148148150,
-                               0.3090909090909090,
-                               0.3214285714285710,
-                               0.3214285714285710,
-                               0.3214285714285710,
-                               0.3272727272727270,
-                               0.3214285714285710,
-                               0.3214285714285710,
-                               0.3214285714285710,
-                               0.3214285714285710,
-                               0.3214285714285710,
-                               0.3214285714285710,
-                               0.3214285714285710,
-                               0.3214285714285710,
-                               0.3214285714285710,
-                               0.3148148148148150,
-                               0.3148148148148150,
-                               0.3148148148148150,
-                               0.3148148148148150,
-                               0.3090909090909090,
-                               0.3148148148148150,
-                               0.2127659574468080,
-                               0.2127659574468080,
-                               0.2127659574468080,
-                               0.2127659574468080,
-                               0.2173913043478260,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.1818181818181820,
-                               0.1818181818181820,
-                               0.1777777777777780,
-                               0.1777777777777780,
-                               0.1777777777777780,
-                               0.1777777777777780,
-                               0.1521739130434780,
-                               0.1521739130434780,
-                               0.1521739130434780,
-                               0.1304347826086960,
-                               0.1304347826086960,
-                               0.1304347826086960,
-                               0.1276595744680850,
-                               0.1276595744680850,
-                               0.1276595744680850,
-                               0.1250000000000000,
-                               0.1600000000000000,
-                               0.1600000000000000,
-                               0.1632653061224490,
-                               0.1666666666666670,
-                               0.1666666666666670,
-                               0.1666666666666670,
-                               0.1800000000000000,
-                               0.1800000000000000,
-                               0.1800000000000000,
-                               0.1960784313725490,
-                               0.1960784313725490,
-                               0.1923076923076920,
-                               0.1923076923076920,
-                               0.1923076923076920,
-                               0.1886792452830190,
-                               0.1886792452830190,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1568627450980390,
-                               0.1568627450980390,
-                               0.1568627450980390,
-                               0.1568627450980390,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1372549019607840,
-                               0.1372549019607840,
-                               0.1538461538461540,
-                               0.1538461538461540,
-                               0.1200000000000000,
-                               0.1200000000000000,
-                               0.1346153846153850,
-                               0.1372549019607840,
-                               0.1372549019607840,
-                               0.1200000000000000,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0800000000000000,
-                               0.0800000000000000,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0784313725490196,
-                               0.0961538461538462,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1153846153846150,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.0943396226415094,
-                               0.0943396226415094,
-                               0.0925925925925926,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0925925925925926,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0740740740740741,
-                               0.0740740740740741,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0689655172413793,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0701754385964912,
-                               0.0689655172413793,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0689655172413793,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0500000000000000,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0655737704918033,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0625000000000000,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0625000000000000,
-                               0.0625000000000000,
-                               0.0625000000000000,
-                               0.0625000000000000,
-                               0.0625000000000000,
-                               0.0625000000000000,
-                               0.0625000000000000,
-                               0.0625000000000000,
-                               0.0625000000000000,
-                               0.0625000000000000,
-                               0.0625000000000000,
-                               0.0625000000000000,
-                               0.0625000000000000,
-                               0.0625000000000000,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0172413793103448,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0178571428571429,
-                               0.0181818181818182,
-                               0.0357142857142857,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0350877192982456,
-                               0.0178571428571429,
-                               0.0178571428571429,
-                               0.0178571428571429,
-                               0.0178571428571429,
-                               0.0181818181818182,
-                               0.0181818181818182,
-                               0.0181818181818182,
-                               0.0181818181818182,
-                               0.0181818181818182,
-                               0.0181818181818182,
-                               0.0181818181818182,
-                               0.0185185185185185,
-                               0.0185185185185185,
-                               0.0185185185185185,
-                               0.0185185185185185,
-                               0.0185185185185185,
-                               0.0185185185185185,
-                               0.0181818181818182,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0185185185185185,
-                               0.0185185185185185,
-                               0.0185185185185185,
-                               0.0185185185185185,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0181818181818182,
-                               0.0185185185185185,
-                               0.0185185185185185,
-                               0.0185185185185185,
-                               0.0185185185185185,
-                               0.0185185185185185,
-                               0.0181818181818182,
-                               0.0185185185185185,
-                               0.0181818181818182,
-                               0.0181818181818182,
-                               0.0185185185185185,
-                               0.0185185185185185,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0192307692307692,
-                               0.0196078431372549,
-                               0.0196078431372549,
-                               0.0196078431372549,
-                               0.0196078431372549,
-                               0.0196078431372549,
-                               0.0200000000000000,
-                               0.0200000000000000,
-                               0.0200000000000000,
-                               0.0400000000000000,
-                               0.0400000000000000,
-                               0.0392156862745098,
-                               0.0392156862745098,
-                               0.0400000000000000,
-                               0.0400000000000000,
-                               0.0400000000000000,
-                               0.0392156862745098,
-                               0.0384615384615385,
-                               0.0566037735849057,
-                               0.0566037735849057,
-                               0.0576923076923077,
-                               0.0576923076923077,
-                               0.0576923076923077,
-                               0.0576923076923077,
-                               0.0576923076923077,
-                               0.0566037735849057,
-                               0.0566037735849057,
-                               0.0566037735849057,
-                               0.0566037735849057,
-                               0.0566037735849057,
-                               0.0566037735849057,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0600000000000000,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0600000000000000,
-                               0.0600000000000000,
-                               0.0600000000000000,
-                               0.0600000000000000,
-                               0.0600000000000000,
-                               0.0600000000000000,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0392156862745098,
-                               0.0392156862745098,
-                               0.0392156862745098,
-                               0.0384615384615385,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0392156862745098,
-                               0.0200000000000000,
-                               0.0408163265306122,
-                               0.0408163265306122,
-                               0.0408163265306122,
-                               0.0408163265306122,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0425531914893617,
-                               0.0425531914893617,
-                               0.0425531914893617,
-                               0.0425531914893617,
-                               0.0425531914893617,
-                               0.0416666666666667,
-                               0.0625000000000000,
-                               0.0612244897959184,
-                               0.0612244897959184,
-                               0.0612244897959184,
-                               0.0600000000000000,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0600000000000000,
-                               0.0600000000000000,
-                               0.0600000000000000,
-                               0.0638297872340425,
-                               0.0638297872340425,
-                               0.0434782608695652,
-                               0.0444444444444444,
-                               0.0444444444444444,
-                               0.0444444444444444,
-                               0.0444444444444444,
-                               0.0444444444444444,
-                               0.0227272727272727,
-                               0.0217391304347826,
-                               0.0212765957446808,
-                               0.0208333333333333,
-                               0.0204081632653061,
-                               0.0204081632653061,
-                               0.0200000000000000,
-                               0.0196078431372549,
-                               0.0196078431372549,
-                               0.0196078431372549,
-                               0.0196078431372549,
-                               0.0196078431372549,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0312500000000000,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0468750000000000,
-                               0.0468750000000000,
-                               0.0468750000000000,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0166666666666667,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0333333333333333,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0483870967741936,
-                               0.0476190476190476,
-                               0.0468750000000000,
-                               0.0468750000000000,
-                               0.0468750000000000,
-                               0.0468750000000000,
-                               0.0468750000000000,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0312500000000000,
-                               0.0317460317460317,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0158730158730159,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0333333333333333,
-                               0.0344827586206897,
-                               0.0350877192982456,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0535714285714286,
-                               0.0545454545454545,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0363636363636364,
-                               0.0370370370370370,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0333333333333333,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0175438596491228,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0175438596491228,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0172413793103448,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0163934426229508,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0163934426229508,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0303030303030303,
-                               0.0303030303030303,
-                               0.0303030303030303,
-                               0.0303030303030303,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0161290322580645,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0161290322580645,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0322580645161290,
-                               0.0483870967741936,
-                               0.0468750000000000,
-                               0.0476190476190476,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0500000000000000,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0327868852459016,
-                               0.0333333333333333,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0645161290322581,
-                               0.0793650793650794,
-                               0.0781250000000000,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0781250000000000,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0781250000000000,
-                               0.0781250000000000,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0937500000000000,
-                               0.0937500000000000,
-                               0.0937500000000000,
-                               0.0937500000000000,
-                               0.0937500000000000,
-                               0.0937500000000000,
-                               0.0937500000000000,
-                               0.0937500000000000,
-                               0.0937500000000000,
-                               0.0937500000000000,
-                               0.0937500000000000,
-                               0.0937500000000000,
-                               0.0923076923076923,
-                               0.0937500000000000,
-                               0.0937500000000000,
-                               0.0937500000000000,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.0952380952380952,
-                               0.0967741935483871,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0847457627118644,
-                               0.0892857142857143,
-                               0.0892857142857143,
-                               0.0892857142857143,
-                               0.0877192982456140,
-                               0.0727272727272727,
-                               0.0892857142857143,
-                               0.0892857142857143,
-                               0.0909090909090909,
-                               0.0740740740740741,
-                               0.0740740740740741,
-                               0.0740740740740741,
-                               0.0576923076923077,
-                               0.0740740740740741,
-                               0.0740740740740741,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.1071428571428570,
-                               0.1071428571428570,
-                               0.1071428571428570,
-                               0.1206896551724140,
-                               0.1206896551724140,
-                               0.1228070175438600,
-                               0.1250000000000000,
-                               0.1090909090909090,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0961538461538462,
-                               0.1000000000000000,
-                               0.0816326530612245,
-                               0.0816326530612245,
-                               0.0800000000000000,
-                               0.0800000000000000,
-                               0.0800000000000000,
-                               0.0800000000000000,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0816326530612245,
-                               0.0816326530612245,
-                               0.0816326530612245,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.1000000000000000,
-                               0.1020408163265310,
-                               0.1020408163265310,
-                               0.1020408163265310,
-                               0.1020408163265310,
-                               0.1153846153846150,
-                               0.1111111111111110,
-                               0.1071428571428570,
-                               0.1071428571428570,
-                               0.1071428571428570,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1052631578947370,
-                               0.1071428571428570,
-                               0.1071428571428570,
-                               0.1071428571428570,
-                               0.1071428571428570,
-                               0.1071428571428570,
-                               0.1071428571428570,
-                               0.0909090909090909,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0784313725490196,
-                               0.0769230769230769,
-                               0.0784313725490196,
-                               0.0784313725490196,
-                               0.0769230769230769,
-                               0.0784313725490196,
-                               0.0784313725490196,
-                               0.0784313725490196,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.1132075471698110,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1153846153846150,
-                               0.1153846153846150,
-                               0.1153846153846150,
-                               0.1132075471698110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1454545454545450,
-                               0.1454545454545450,
-                               0.1538461538461540,
-                               0.1481481481481480,
-                               0.1481481481481480,
-                               0.1481481481481480,
-                               0.1538461538461540,
-                               0.1538461538461540,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1276595744680850,
-                               0.1304347826086960,
-                               0.1304347826086960,
-                               0.0888888888888889,
-                               0.0869565217391304,
-                               0.0851063829787234,
-                               0.1041666666666670,
-                               0.1063829787234040,
-                               0.1063829787234040,
-                               0.1063829787234040,
-                               0.1063829787234040,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1224489795918370,
-                               0.1041666666666670,
-                               0.1041666666666670,
-                               0.1041666666666670,
-                               0.1020408163265310,
-                               0.1041666666666670,
-                               0.1063829787234040,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1041666666666670,
-                               0.1041666666666670,
-                               0.1020408163265310,
-                               0.1020408163265310,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.1153846153846150,
-                               0.1153846153846150,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1153846153846150,
-                               0.1153846153846150,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1666666666666670,
-                               0.1666666666666670,
-                               0.1666666666666670,
-                               0.1698113207547170,
-                               0.1666666666666670,
-                               0.1509433962264150,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1818181818181820,
-                               0.1636363636363640,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1754385964912280,
-                               0.1754385964912280,
-                               0.1896551724137930,
-                               0.1896551724137930,
-                               0.1896551724137930,
-                               0.1896551724137930,
-                               0.1864406779661020,
-                               0.1803278688524590,
-                               0.1803278688524590,
-                               0.1803278688524590,
-                               0.1803278688524590,
-                               0.1803278688524590,
-                               0.1803278688524590,
-                               0.1803278688524590,
-                               0.1803278688524590,
-                               0.1803278688524590,
-                               0.1833333333333330,
-                               0.1833333333333330,
-                               0.1833333333333330,
-                               0.1967213114754100,
-                               0.1935483870967740,
-                               0.1803278688524590,
-                               0.1803278688524590,
-                               0.1803278688524590,
-                               0.1774193548387100,
-                               0.1774193548387100,
-                               0.1774193548387100,
-                               0.1500000000000000,
-                               0.1500000000000000,
-                               0.1500000000000000,
-                               0.1500000000000000,
-                               0.1666666666666670,
-                               0.1525423728813560,
-                               0.1071428571428570,
-                               0.1228070175438600,
-                               0.1228070175438600,
-                               0.1228070175438600,
-                               0.1228070175438600,
-                               0.1228070175438600,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1403508771929820,
-                               0.1403508771929820,
-                               0.1403508771929820,
-                               0.1403508771929820,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1724137931034480,
-                               0.1724137931034480,
-                               0.1694915254237290,
-                               0.1666666666666670,
-                               0.1639344262295080,
-                               0.1500000000000000,
-                               0.1639344262295080,
-                               0.1639344262295080,
-                               0.1639344262295080,
-                               0.1612903225806450,
-                               0.1612903225806450,
-                               0.1612903225806450,
-                               0.1612903225806450,
-                               0.1475409836065570,
-                               0.1475409836065570,
-                               0.1612903225806450,
-                               0.1612903225806450,
-                               0.1587301587301590,
-                               0.1692307692307690,
-                               0.1692307692307690,
-                               0.1692307692307690,
-                               0.1692307692307690,
-                               0.1562500000000000,
-                               0.1562500000000000,
-                               0.1562500000000000,
-                               0.1692307692307690,
-                               0.1692307692307690,
-                               0.1692307692307690,
-                               0.1692307692307690,
-                               0.1538461538461540,
-                               0.1538461538461540,
-                               0.1538461538461540,
-                               0.1538461538461540,
-                               0.1406250000000000,
-                               0.1290322580645160,
-                               0.1290322580645160,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0781250000000000,
-                               0.0781250000000000,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.0952380952380952,
-                               0.0793650793650794,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0625000000000000,
-                               0.0625000000000000,
-                               0.0625000000000000,
-                               0.0625000000000000,
-                               0.0615384615384615,
-                               0.0615384615384615,
-                               0.0615384615384615,
-                               0.0615384615384615,
-                               0.0615384615384615,
-                               0.0615384615384615,
-                               0.0606060606060606,
-                               0.0606060606060606,
-                               0.0606060606060606,
-                               0.0606060606060606,
-                               0.0606060606060606,
-                               0.0606060606060606,
-                               0.0606060606060606,
-                               0.0606060606060606,
-                               0.0606060606060606,
-                               0.0606060606060606,
-                               0.0597014925373134,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0571428571428571,
-                               0.0571428571428571,
-                               0.0571428571428571,
-                               0.0571428571428571,
-                               0.0571428571428571,
-                               0.0571428571428571,
-                               0.0571428571428571,
-                               0.0571428571428571,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0153846153846154,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0156250000000000,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0153846153846154,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0468750000000000,
-                               0.0468750000000000,
-                               0.0468750000000000,
-                               0.0468750000000000,
-                               0.0468750000000000,
-                               0.0468750000000000,
-                               0.0468750000000000,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0333333333333333,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0333333333333333,
-                               0.0169491525423729,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0161290322580645,
-                               0.0163934426229508,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0169491525423729,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0169491525423729,
-                               0.0166666666666667,
-                               0.0163934426229508,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0166666666666667,
-                               0.0169491525423729,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0163934426229508,
-                               0.0166666666666667,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0172413793103448,
-                               0.0178571428571429,
-                               0.0178571428571429,
-                               0.0178571428571429,
-                               0.0181818181818182,
-                               0.0178571428571429,
-                               0.0178571428571429,
-                               0.0178571428571429,
-                               0.0178571428571429,
-                               0.0181818181818182,
-                               0.0185185185185185,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0188679245283019,
-                               0.0192307692307692,
-                               0.0196078431372549,
-                               0.0204081632653061,
-                               0.0200000000000000,
-                               0.0200000000000000,
-                               0.0392156862745098,
-                               0.0400000000000000,
-                               0.0392156862745098,
-                               0.0384615384615385,
-                               0.0384615384615385,
-                               0.0384615384615385,
-                               0.0384615384615385,
-                               0.0384615384615385,
-                               0.0392156862745098,
-                               0.0392156862745098,
-                               0.0392156862745098,
-                               0.0384615384615385,
-                               0.0392156862745098,
-                               0.0576923076923077,
-                               0.0576923076923077,
-                               0.0576923076923077,
-                               0.0576923076923077,
-                               0.0576923076923077,
-                               0.0576923076923077,
-                               0.0576923076923077,
-                               0.0566037735849057,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0535714285714286,
-                               0.0535714285714286,
-                               0.0526315789473684,
-                               0.0517241379310345,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0357142857142857,
-                               0.0357142857142857,
-                               0.0363636363636364,
-                               0.0357142857142857,
-                               0.0357142857142857,
-                               0.0350877192982456,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0377358490566038,
-                               0.0377358490566038,
-                               0.0377358490566038,
-                               0.0377358490566038,
-                               0.0377358490566038,
-                               0.0370370370370370,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0370370370370370,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0370370370370370,
-                               0.0392156862745098,
-                               0.0392156862745098,
-                               0.0400000000000000,
-                               0.0408163265306122,
-                               0.0408163265306122,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0400000000000000,
-                               0.0400000000000000,
-                               0.0400000000000000,
-                               0.0392156862745098,
-                               0.0392156862745098,
-                               0.0392156862745098,
-                               0.0384615384615385,
-                               0.0384615384615385,
-                               0.0566037735849057,
-                               0.0566037735849057,
-                               0.0566037735849057,
-                               0.0566037735849057,
-                               0.0566037735849057,
-                               0.0566037735849057,
-                               0.0566037735849057,
-                               0.0566037735849057,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0322580645161290,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0312500000000000,
-                               0.0312500000000000,
-                               0.0307692307692308,
-                               0.0307692307692308,
-                               0.0303030303030303,
-                               0.0303030303030303,
-                               0.0303030303030303,
-                               0.0298507462686567,
-                               0.0298507462686567,
-                               0.0298507462686567,
-                               0.0294117647058823,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0285714285714286,
-                               0.0281690140845070,
-                               0.0285714285714286,
-                               0.0285714285714286,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0294117647058823,
-                               0.0298507462686567,
-                               0.0298507462686567,
-                               0.0298507462686567,
-                               0.0298507462686567,
-                               0.0298507462686567,
-                               0.0298507462686567,
-                               0.0298507462686567,
-                               0.0303030303030303,
-                               0.0303030303030303,
-                               0.0303030303030303,
-                               0.0303030303030303,
-                               0.0303030303030303,
-                               0.0298507462686567,
-                               0.0298507462686567,
-                               0.0298507462686567,
-                               0.0298507462686567,
-                               0.0298507462686567,
-                               0.0298507462686567,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0144927536231884,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0144927536231884,
-                               0.0147058823529412,
-                               0.0144927536231884,
-                               0.0147058823529412,
-                               0.0149253731343284,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0151515151515152,
-                               0.0156250000000000,
-                               0.0153846153846154,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0158730158730159,
-                               0.0461538461538462,
-                               0.0468750000000000,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0781250000000000,
-                               0.0781250000000000,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0806451612903226,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0952380952380952,
-                               0.0952380952380952,
-                               0.0952380952380952,
-                               0.0952380952380952,
-                               0.1093750000000000,
-                               0.1093750000000000,
-                               0.1093750000000000,
-                               0.1093750000000000,
-                               0.1093750000000000,
-                               0.1093750000000000,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0666666666666667,
-                               0.0645161290322581,
-                               0.0781250000000000,
-                               0.0781250000000000,
-                               0.0781250000000000,
-                               0.0781250000000000,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0757575757575758,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0704225352112676,
-                               0.0704225352112676,
-                               0.0571428571428571,
-                               0.0579710144927536,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0447761194029851,
-                               0.0454545454545455,
-                               0.0447761194029851,
-                               0.0441176470588235,
-                               0.0434782608695652,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0434782608695652,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0298507462686567,
-                               0.0298507462686567,
-                               0.0298507462686567,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0298507462686567,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0285714285714286,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0140845070422535,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0136986301369863,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0138888888888889,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0000000000000000,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0281690140845070,
-                               0.0285714285714286,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0422535211267606,
-                               0.0422535211267606,
-                               0.0422535211267606,
-                               0.0422535211267606,
-                               0.0422535211267606,
-                               0.0422535211267606,
-                               0.0422535211267606,
-                               0.0285714285714286,
-                               0.0289855072463768,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0298507462686567,
-                               0.0298507462686567,
-                               0.0298507462686567,
-                               0.0298507462686567,
-                               0.0298507462686567,
-                               0.0298507462686567,
-                               0.0298507462686567,
-                               0.0298507462686567,
-                               0.0298507462686567,
-                               0.0298507462686567,
-                               0.0298507462686567,
-                               0.0298507462686567,
-                               0.0298507462686567,
-                               0.0298507462686567,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0144927536231884,
-                               0.0147058823529412,
-                               0.0144927536231884,
-                               0.0142857142857143,
-                               0.0142857142857143,
-                               0.0140845070422535,
-                               0.0140845070422535,
-                               0.0142857142857143,
-                               0.0144927536231884,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0149253731343284,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0147058823529412,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0289855072463768,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0289855072463768,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0294117647058823,
-                               0.0298507462686567,
-                               0.0303030303030303,
-                               0.0447761194029851,
-                               0.0447761194029851,
-                               0.0454545454545455,
-                               0.0597014925373134,
-                               0.0597014925373134,
-                               0.0447761194029851,
-                               0.0447761194029851,
-                               0.0447761194029851,
-                               0.0447761194029851,
-                               0.0447761194029851,
-                               0.0441176470588235,
-                               0.0447761194029851,
-                               0.0454545454545455,
-                               0.0454545454545455,
-                               0.0454545454545455,
-                               0.0454545454545455,
-                               0.0454545454545455,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0454545454545455,
-                               0.0454545454545455,
-                               0.0447761194029851,
-                               0.0447761194029851,
-                               0.0454545454545455,
-                               0.0468750000000000,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0476190476190476,
-                               0.0322580645161290,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0333333333333333,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0327868852459016,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0491803278688525,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0508474576271187,
-                               0.0526315789473684,
-                               0.0545454545454545,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0689655172413793,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0714285714285714,
-                               0.0727272727272727,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0545454545454545,
-                               0.0555555555555556,
-                               0.0566037735849057,
-                               0.0384615384615385,
-                               0.0384615384615385,
-                               0.0384615384615385,
-                               0.0377358490566038,
-                               0.0377358490566038,
-                               0.0377358490566038,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0612244897959184,
-                               0.0625000000000000,
-                               0.0625000000000000,
-                               0.0612244897959184,
-                               0.0961538461538462,
-                               0.1111111111111110,
-                               0.1578947368421050,
-                               0.1551724137931030,
-                               0.1724137931034480,
-                               0.1694915254237290,
-                               0.1666666666666670,
-                               0.1666666666666670,
-                               0.2000000000000000,
-                               0.1864406779661020,
-                               0.1864406779661020,
-                               0.1864406779661020,
-                               0.1896551724137930,
-                               0.1896551724137930,
-                               0.2033898305084750,
-                               0.2033898305084750,
-                               0.2033898305084750,
-                               0.2000000000000000,
-                               0.1967213114754100,
-                               0.1967213114754100,
-                               0.1935483870967740,
-                               0.1935483870967740,
-                               0.2187500000000000,
-                               0.2187500000000000,
-                               0.2187500000000000,
-                               0.2187500000000000,
-                               0.2187500000000000,
-                               0.2307692307692310,
-                               0.2307692307692310,
-                               0.2380952380952380,
-                               0.2419354838709680,
-                               0.2459016393442620,
-                               0.2586206896551720,
-                               0.2586206896551720,
-                               0.2711864406779660,
-                               0.2711864406779660,
-                               0.2711864406779660,
-                               0.2711864406779660,
-                               0.2622950819672130,
-                               0.2580645161290320,
-                               0.2542372881355930,
-                               0.2542372881355930,
-                               0.2542372881355930,
-                               0.2500000000000000,
-                               0.2459016393442620,
-                               0.2459016393442620,
-                               0.2459016393442620,
-                               0.2459016393442620,
-                               0.2500000000000000,
-                               0.2500000000000000,
-                               0.2500000000000000,
-                               0.2500000000000000,
-                               0.2622950819672130,
-                               0.2622950819672130,
-                               0.2622950819672130,
-                               0.2666666666666670,
-                               0.2711864406779660,
-                               0.2711864406779660,
-                               0.2833333333333330,
-                               0.2833333333333330,
-                               0.2786885245901640,
-                               0.2741935483870970,
-                               0.2615384615384620,
-                               0.2656250000000000,
-                               0.2539682539682540,
-                               0.2539682539682540,
-                               0.2539682539682540,
-                               0.2622950819672130,
-                               0.2666666666666670,
-                               0.2622950819672130,
-                               0.2500000000000000,
-                               0.2500000000000000,
-                               0.2459016393442620,
-                               0.2419354838709680,
-                               0.2419354838709680,
-                               0.2419354838709680,
-                               0.2419354838709680,
-                               0.2419354838709680,
-                               0.2419354838709680,
-                               0.2419354838709680,
-                               0.2419354838709680,
-                               0.2419354838709680,
-                               0.2500000000000000,
-                               0.2615384615384620,
-                               0.2727272727272730,
-                               0.2727272727272730,
-                               0.2727272727272730,
-                               0.2727272727272730,
-                               0.2769230769230770,
-                               0.2769230769230770,
-                               0.2769230769230770,
-                               0.2727272727272730,
-                               0.2647058823529410,
-                               0.2647058823529410,
-                               0.2537313432835820,
-                               0.2647058823529410,
-                               0.2647058823529410,
-                               0.2647058823529410,
-                               0.2424242424242420,
-                               0.2424242424242420,
-                               0.2153846153846150,
-                               0.2153846153846150,
-                               0.2153846153846150,
-                               0.2153846153846150,
-                               0.1774193548387100,
-                               0.1774193548387100,
-                               0.1774193548387100,
-                               0.1639344262295080,
-                               0.1639344262295080,
-                               0.1639344262295080,
-                               0.1694915254237290,
-                               0.1694915254237290,
-                               0.1694915254237290,
-                               0.1724137931034480,
-                               0.1724137931034480,
-                               0.1724137931034480,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1578947368421050,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1454545454545450,
-                               0.1454545454545450,
-                               0.1454545454545450,
-                               0.1454545454545450,
-                               0.1454545454545450,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1481481481481480,
-                               0.1481481481481480,
-                               0.1509433962264150,
-                               0.1666666666666670,
-                               0.1509433962264150,
-                               0.1886792452830190,
-                               0.2000000000000000,
-                               0.2037037037037040,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.1929824561403510,
-                               0.1785714285714290,
-                               0.1818181818181820,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1724137931034480,
-                               0.1724137931034480,
-                               0.1694915254237290,
-                               0.1694915254237290,
-                               0.1666666666666670,
-                               0.1666666666666670,
-                               0.1500000000000000,
-                               0.1500000000000000,
-                               0.1500000000000000,
-                               0.1500000000000000,
-                               0.1525423728813560,
-                               0.1525423728813560,
-                               0.1379310344827590,
-                               0.1379310344827590,
-                               0.1228070175438600,
-                               0.1228070175438600,
-                               0.1228070175438600,
-                               0.1525423728813560,
-                               0.1525423728813560,
-                               0.1525423728813560,
-                               0.1694915254237290,
-                               0.1694915254237290,
-                               0.1694915254237290,
-                               0.1694915254237290,
-                               0.1666666666666670,
-                               0.1803278688524590,
-                               0.1803278688524590,
-                               0.1803278688524590,
-                               0.1803278688524590,
-                               0.1935483870967740,
-                               0.1935483870967740,
-                               0.1935483870967740,
-                               0.1935483870967740,
-                               0.1935483870967740,
-                               0.1935483870967740,
-                               0.1935483870967740,
-                               0.1935483870967740,
-                               0.1935483870967740,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.1969696969696970,
-                               0.1969696969696970,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.2121212121212120,
-                               0.2121212121212120,
-                               0.2238805970149250,
-                               0.2238805970149250,
-                               0.2238805970149250,
-                               0.2205882352941180,
-                               0.2205882352941180,
-                               0.2205882352941180,
-                               0.2205882352941180,
-                               0.2089552238805970,
-                               0.2058823529411760,
-                               0.2058823529411760,
-                               0.1940298507462690,
-                               0.1940298507462690,
-                               0.1940298507462690,
-                               0.1940298507462690,
-                               0.1940298507462690,
-                               0.1940298507462690,
-                               0.1884057971014490,
-                               0.1884057971014490,
-                               0.1764705882352940,
-                               0.1764705882352940,
-                               0.1764705882352940,
-                               0.1764705882352940,
-                               0.1764705882352940,
-                               0.1764705882352940,
-                               0.1764705882352940,
-                               0.1641791044776120,
-                               0.1641791044776120,
-                               0.1515151515151520,
-                               0.1492537313432840,
-                               0.1492537313432840,
-                               0.1470588235294120,
-                               0.1449275362318840,
-                               0.1449275362318840,
-                               0.1449275362318840,
-                               0.1449275362318840,
-                               0.1449275362318840,
-                               0.1449275362318840,
-                               0.1304347826086960,
-                               0.1323529411764710,
-                               0.1343283582089550,
-                               0.1343283582089550,
-                               0.1343283582089550,
-                               0.1343283582089550,
-                               0.1343283582089550,
-                               0.1343283582089550,
-                               0.1343283582089550,
-                               0.1343283582089550,
-                               0.1343283582089550,
-                               0.1343283582089550,
-                               0.1212121212121210,
-                               0.1230769230769230,
-                               0.1230769230769230,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1230769230769230,
-                               0.1230769230769230,
-                               0.1212121212121210,
-                               0.1212121212121210,
-                               0.1212121212121210,
-                               0.1212121212121210,
-                               0.1194029850746270,
-                               0.1142857142857140,
-                               0.1142857142857140,
-                               0.1014492753623190,
-                               0.1014492753623190,
-                               0.1014492753623190,
-                               0.1014492753623190,
-                               0.1014492753623190,
-                               0.1014492753623190,
-                               0.1029411764705880,
-                               0.1029411764705880,
-                               0.1029411764705880,
-                               0.1029411764705880,
-                               0.1029411764705880,
-                               0.1029411764705880,
-                               0.1029411764705880,
-                               0.1029411764705880,
-                               0.1029411764705880,
-                               0.1044776119402990,
-                               0.1060606060606060,
-                               0.1060606060606060,
-                               0.1060606060606060,
-                               0.1060606060606060,
-                               0.1060606060606060,
-                               0.1060606060606060,
-                               0.1044776119402990,
-                               0.1044776119402990,
-                               0.1014492753623190,
-                               0.1014492753623190,
-                               0.1014492753623190,
-                               0.1029411764705880,
-                               0.1029411764705880,
-                               0.1029411764705880,
-                               0.1029411764705880,
-                               0.1029411764705880,
-                               0.1029411764705880,
-                               0.1029411764705880,
-                               0.1029411764705880,
-                               0.1029411764705880,
-                               0.1029411764705880,
-                               0.1029411764705880,
-                               0.1029411764705880,
-                               0.1029411764705880,
-                               0.1060606060606060,
-                               0.1060606060606060,
-                               0.1076923076923080,
-                               0.1076923076923080,
-                               0.1076923076923080,
-                               0.1076923076923080,
-                               0.1076923076923080,
-                               0.1076923076923080,
-                               0.0937500000000000,
-                               0.0937500000000000,
-                               0.0937500000000000,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0857142857142857,
-                               0.0857142857142857,
-                               0.0845070422535211,
-                               0.0845070422535211,
-                               0.0845070422535211,
-                               0.0845070422535211,
-                               0.0845070422535211,
-                               0.0845070422535211,
-                               0.0845070422535211,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0704225352112676,
-                               0.0704225352112676,
-                               0.0704225352112676,
-                               0.0704225352112676,
-                               0.0704225352112676,
-                               0.0704225352112676,
-                               0.0704225352112676,
-                               0.0694444444444444,
-                               0.0694444444444444,
-                               0.0694444444444444,
-                               0.0694444444444444,
-                               0.0694444444444444,
-                               0.0694444444444444,
-                               0.0694444444444444,
-                               0.0694444444444444,
-                               0.0563380281690141,
-                               0.0563380281690141,
-                               0.0563380281690141,
-                               0.0563380281690141,
-                               0.0563380281690141,
-                               0.0563380281690141,
-                               0.0563380281690141,
-                               0.0563380281690141,
-                               0.0563380281690141,
-                               0.0563380281690141,
-                               0.0563380281690141,
-                               0.0563380281690141,
-                               0.0563380281690141,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0547945205479452,
-                               0.0547945205479452,
-                               0.0547945205479452,
-                               0.0547945205479452,
-                               0.0547945205479452,
-                               0.0547945205479452,
-                               0.0547945205479452,
-                               0.0547945205479452,
-                               0.0547945205479452,
-                               0.0547945205479452,
-                               0.0547945205479452,
-                               0.0547945205479452,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0540540540540541,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0405405405405405,
-                               0.0405405405405405,
-                               0.0405405405405405,
-                               0.0405405405405405,
-                               0.0405405405405405,
-                               0.0405405405405405,
-                               0.0405405405405405,
-                               0.0405405405405405,
-                               0.0405405405405405,
-                               0.0405405405405405,
-                               0.0405405405405405,
-                               0.0405405405405405,
-                               0.0405405405405405,
-                               0.0405405405405405,
-                               0.0405405405405405,
-                               0.0405405405405405,
-                               0.0405405405405405,
-                               0.0405405405405405,
-                               0.0405405405405405,
-                               0.0405405405405405,
-                               0.0405405405405405,
-                               0.0405405405405405,
-                               0.0405405405405405,
-                               0.0405405405405405,
-                               0.0405405405405405,
-                               0.0405405405405405,
-                               0.0405405405405405,
-                               0.0405405405405405,
-                               0.0405405405405405,
-                               0.0405405405405405,
-                               0.0405405405405405,
-                               0.0405405405405405,
-                               0.0405405405405405,
-                               0.0405405405405405,
-                               0.0405405405405405,
-                               0.0405405405405405,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0410958904109589,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0416666666666667,
-                               0.0422535211267606,
-                               0.0422535211267606,
-                               0.0422535211267606,
-                               0.0422535211267606,
-                               0.0422535211267606,
-                               0.0422535211267606,
-                               0.0422535211267606,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0428571428571429,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0454545454545455,
-                               0.0454545454545455,
-                               0.0454545454545455,
-                               0.0454545454545455,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0468750000000000,
-                               0.0468750000000000,
-                               0.0468750000000000,
-                               0.0468750000000000,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0317460317460317,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0333333333333333,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0338983050847458,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0344827586206897,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0333333333333333,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0322580645161290,
-                               0.0327868852459016,
-                               0.0322580645161290,
-                               0.0327868852459016,
-                               0.0327868852459016,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0350877192982456,
-                               0.0357142857142857,
-                               0.0357142857142857,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0357142857142857,
-                               0.0357142857142857,
-                               0.0357142857142857,
-                               0.0357142857142857,
-                               0.0357142857142857,
-                               0.0350877192982456,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0338983050847458,
-                               0.0344827586206897,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0500000000000000,
-                               0.0508474576271187,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0333333333333333,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0338983050847458,
-                               0.0333333333333333,
-                               0.0491803278688525,
-                               0.0491803278688525,
-                               0.0526315789473684,
-                               0.0517241379310345,
-                               0.0508474576271187,
-                               0.0517241379310345,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0566037735849057,
-                               0.0555555555555556,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0740740740740741,
-                               0.0740740740740741,
-                               0.0740740740740741,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0740740740740741,
-                               0.0740740740740741,
-                               0.0754716981132075,
-                               0.0784313725490196,
-                               0.0600000000000000,
-                               0.0612244897959184,
-                               0.0600000000000000,
-                               0.0600000000000000,
-                               0.0576923076923077,
-                               0.0576923076923077,
-                               0.0576923076923077,
-                               0.0566037735849057,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0483870967741936,
-                               0.0491803278688525,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0634920634920635,
-                               0.0625000000000000,
-                               0.0625000000000000,
-                               0.0625000000000000,
-                               0.0625000000000000,
-                               0.0625000000000000,
-                               0.0625000000000000,
-                               0.0615384615384615,
-                               0.0615384615384615,
-                               0.0615384615384615,
-                               0.0615384615384615,
-                               0.0615384615384615,
-                               0.0606060606060606,
-                               0.0606060606060606,
-                               0.0606060606060606,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0597014925373134,
-                               0.0597014925373134,
-                               0.0597014925373134,
-                               0.0597014925373134,
-                               0.0597014925373134,
-                               0.0597014925373134,
-                               0.0597014925373134,
-                               0.0597014925373134,
-                               0.0597014925373134,
-                               0.0597014925373134,
-                               0.0588235294117647,
-                               0.0597014925373134,
-                               0.0597014925373134,
-                               0.0597014925373134,
-                               0.0597014925373134,
-                               0.0597014925373134,
-                               0.0597014925373134,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0441176470588235,
-                               0.0447761194029851,
-                               0.0447761194029851,
-                               0.0447761194029851,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0597014925373134,
-                               0.0454545454545455,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0461538461538462,
-                               0.0606060606060606,
-                               0.0606060606060606,
-                               0.0597014925373134,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0724637681159420,
-                               0.0735294117647059,
-                               0.0735294117647059,
-                               0.0735294117647059,
-                               0.0735294117647059,
-                               0.0735294117647059,
-                               0.0735294117647059,
-                               0.0735294117647059,
-                               0.0735294117647059,
-                               0.0735294117647059,
-                               0.0735294117647059,
-                               0.0735294117647059,
-                               0.0735294117647059,
-                               0.0597014925373134,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0579710144927536,
-                               0.0571428571428571,
-                               0.0571428571428571,
-                               0.0571428571428571,
-                               0.0571428571428571,
-                               0.0571428571428571,
-                               0.0571428571428571,
-                               0.0571428571428571,
-                               0.0571428571428571,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0579710144927536,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0735294117647059,
-                               0.0606060606060606,
-                               0.0615384615384615,
-                               0.0615384615384615,
-                               0.0615384615384615,
-                               0.0625000000000000,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.1029411764705880,
-                               0.1029411764705880,
-                               0.1029411764705880,
-                               0.1029411764705880,
-                               0.1029411764705880,
-                               0.1029411764705880,
-                               0.1029411764705880,
-                               0.1029411764705880,
-                               0.1014492753623190,
-                               0.1159420289855070,
-                               0.1159420289855070,
-                               0.1176470588235290,
-                               0.1176470588235290,
-                               0.1194029850746270,
-                               0.1060606060606060,
-                               0.1060606060606060,
-                               0.1076923076923080,
-                               0.1212121212121210,
-                               0.1212121212121210,
-                               0.1076923076923080,
-                               0.1111111111111110,
-                               0.1269841269841270,
-                               0.1451612903225810,
-                               0.1500000000000000,
-                               0.1500000000000000,
-                               0.1525423728813560,
-                               0.1935483870967740,
-                               0.2000000000000000,
-                               0.1967213114754100,
-                               0.1967213114754100,
-                               0.1967213114754100,
-                               0.1967213114754100,
-                               0.1967213114754100,
-                               0.1935483870967740,
-                               0.1935483870967740,
-                               0.1935483870967740,
-                               0.1935483870967740,
-                               0.1904761904761900,
-                               0.1904761904761900,
-                               0.1904761904761900,
-                               0.1875000000000000,
-                               0.1875000000000000,
-                               0.1875000000000000,
-                               0.1875000000000000,
-                               0.1875000000000000,
-                               0.1875000000000000,
-                               0.1875000000000000,
-                               0.1846153846153850,
-                               0.1846153846153850,
-                               0.1846153846153850,
-                               0.1846153846153850,
-                               0.1846153846153850,
-                               0.1875000000000000,
-                               0.1875000000000000,
-                               0.1875000000000000,
-                               0.2000000000000000,
-                               0.1875000000000000,
-                               0.1904761904761900,
-                               0.1875000000000000,
-                               0.1904761904761900,
-                               0.1904761904761900,
-                               0.1935483870967740,
-                               0.2063492063492060,
-                               0.2063492063492060,
-                               0.2063492063492060,
-                               0.2063492063492060,
-                               0.2096774193548390,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2063492063492060,
-                               0.1935483870967740,
-                               0.1935483870967740,
-                               0.1935483870967740,
-                               0.1935483870967740,
-                               0.1803278688524590,
-                               0.1639344262295080,
-                               0.1639344262295080,
-                               0.1666666666666670,
-                               0.1666666666666670,
-                               0.1379310344827590,
-                               0.1206896551724140,
-                               0.1166666666666670,
-                               0.1166666666666670,
-                               0.1129032258064520,
-                               0.0983606557377049,
-                               0.0952380952380952,
-                               0.0937500000000000,
-                               0.0937500000000000,
-                               0.0937500000000000,
-                               0.0793650793650794,
-                               0.0781250000000000,
-                               0.0781250000000000,
-                               0.0781250000000000,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0666666666666667,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0666666666666667,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0645161290322581,
-                               0.0793650793650794,
-                               0.0781250000000000,
-                               0.0781250000000000,
-                               0.0781250000000000,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.0937500000000000,
-                               0.0937500000000000,
-                               0.0937500000000000,
-                               0.0937500000000000,
-                               0.0937500000000000,
-                               0.0937500000000000,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.0923076923076923,
-                               0.1060606060606060,
-                               0.1060606060606060,
-                               0.1076923076923080,
-                               0.1076923076923080,
-                               0.0937500000000000,
-                               0.0937500000000000,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.0967741935483871,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0847457627118644,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.0833333333333333,
-                               0.0819672131147541,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0806451612903226,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0952380952380952,
-                               0.0952380952380952,
-                               0.0952380952380952,
-                               0.0952380952380952,
-                               0.0952380952380952,
-                               0.0952380952380952,
-                               0.0952380952380952,
-                               0.0952380952380952,
-                               0.0806451612903226,
-                               0.0819672131147541,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0983606557377049,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0952380952380952,
-                               0.0952380952380952,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0952380952380952,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0819672131147541,
-                               0.0819672131147541,
-                               0.0967741935483871,
-                               0.0983606557377049,
-                               0.0967741935483871,
-                               0.1000000000000000,
-                               0.1147540983606560,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.1000000000000000,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0967741935483871,
-                               0.0952380952380952,
-                               0.0967741935483871,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.1000000000000000,
-                               0.1016949152542370,
-                               0.1016949152542370,
-                               0.1016949152542370,
-                               0.1016949152542370,
-                               0.1016949152542370,
-                               0.1016949152542370,
-                               0.1016949152542370,
-                               0.0862068965517241,
-                               0.0847457627118644,
-                               0.1000000000000000,
-                               0.1147540983606560,
-                               0.1166666666666670,
-                               0.1166666666666670,
-                               0.1186440677966100,
-                               0.1186440677966100,
-                               0.1186440677966100,
-                               0.1186440677966100,
-                               0.1206896551724140,
-                               0.1186440677966100,
-                               0.1206896551724140,
-                               0.1228070175438600,
-                               0.1228070175438600,
-                               0.1228070175438600,
-                               0.1525423728813560,
-                               0.1500000000000000,
-                               0.1525423728813560,
-                               0.1525423728813560,
-                               0.1525423728813560,
-                               0.1525423728813560,
-                               0.1666666666666670,
-                               0.1666666666666670,
-                               0.1694915254237290,
-                               0.1694915254237290,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1578947368421050,
-                               0.1724137931034480,
-                               0.1724137931034480,
-                               0.1724137931034480,
-                               0.1724137931034480,
-                               0.1724137931034480,
-                               0.1724137931034480,
-                               0.1724137931034480,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1754385964912280,
-                               0.1896551724137930,
-                               0.1896551724137930,
-                               0.1896551724137930,
-                               0.1896551724137930,
-                               0.1754385964912280,
-                               0.1818181818181820,
-                               0.2105263157894740,
-                               0.2105263157894740,
-                               0.2105263157894740,
-                               0.2142857142857140,
-                               0.2068965517241380,
-                               0.2105263157894740,
-                               0.2105263157894740,
-                               0.2142857142857140,
-                               0.2037037037037040,
-                               0.2037037037037040,
-                               0.2037037037037040,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.2037037037037040,
-                               0.2037037037037040,
-                               0.2037037037037040,
-                               0.2037037037037040,
-                               0.2037037037037040,
-                               0.2115384615384620,
-                               0.2115384615384620,
-                               0.2156862745098040,
-                               0.2156862745098040,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.1800000000000000,
-                               0.1800000000000000,
-                               0.1923076923076920,
-                               0.1923076923076920,
-                               0.1923076923076920,
-                               0.2264150943396230,
-                               0.2264150943396230,
-                               0.2264150943396230,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2456140350877190,
-                               0.2456140350877190,
-                               0.2545454545454540,
-                               0.2545454545454540,
-                               0.2545454545454540,
-                               0.2592592592592590,
-                               0.2641509433962260,
-                               0.2641509433962260,
-                               0.2692307692307690,
-                               0.2692307692307690,
-                               0.2692307692307690,
-                               0.2549019607843140,
-                               0.2549019607843140,
-                               0.2641509433962260,
-                               0.2777777777777780,
-                               0.2962962962962960,
-                               0.3018867924528300,
-                               0.3148148148148150,
-                               0.3018867924528300,
-                               0.3018867924528300,
-                               0.3018867924528300,
-                               0.3018867924528300,
-                               0.2884615384615380,
-                               0.2745098039215690,
-                               0.2745098039215690,
-                               0.2745098039215690,
-                               0.2857142857142860,
-                               0.2857142857142860,
-                               0.3000000000000000,
-                               0.3137254901960780,
-                               0.3076923076923080,
-                               0.3137254901960780,
-                               0.3200000000000000,
-                               0.3200000000000000,
-                               0.3200000000000000,
-                               0.3200000000000000,
-                               0.3137254901960780,
-                               0.3269230769230770,
-                               0.3600000000000000,
-                               0.3600000000000000,
-                               0.3600000000000000,
-                               0.3529411764705880,
-                               0.3461538461538460,
-                               0.3461538461538460,
-                               0.3269230769230770,
-                               0.3269230769230770,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3137254901960780,
-                               0.3137254901960780,
-                               0.3076923076923080,
-                               0.2884615384615380,
-                               0.2745098039215690,
-                               0.2549019607843140,
-                               0.2549019607843140,
-                               0.2400000000000000,
-                               0.2500000000000000,
-                               0.2352941176470590,
-                               0.2400000000000000,
-                               0.2400000000000000,
-                               0.2352941176470590,
-                               0.2200000000000000,
-                               0.2115384615384620,
-                               0.2115384615384620,
-                               0.2115384615384620,
-                               0.2115384615384620,
-                               0.2115384615384620,
-                               0.2075471698113210,
-                               0.1851851851851850,
-                               0.1851851851851850,
-                               0.1698113207547170,
-                               0.1666666666666670,
-                               0.1698113207547170,
-                               0.1698113207547170,
-                               0.1538461538461540,
-                               0.1538461538461540,
-                               0.1509433962264150,
-                               0.1509433962264150,
-                               0.1568627450980390,
-                               0.1600000000000000,
-                               0.1730769230769230,
-                               0.1851851851851850,
-                               0.1538461538461540,
-                               0.1538461538461540,
-                               0.1698113207547170,
-                               0.1730769230769230,
-                               0.1698113207547170,
-                               0.1698113207547170,
-                               0.1698113207547170,
-                               0.1698113207547170,
-                               0.1698113207547170,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1568627450980390,
-                               0.1568627450980390,
-                               0.1568627450980390,
-                               0.1568627450980390,
-                               0.1568627450980390,
-                               0.1568627450980390,
-                               0.1568627450980390,
-                               0.1568627450980390,
-                               0.1568627450980390,
-                               0.1568627450980390,
-                               0.1568627450980390,
-                               0.1568627450980390,
-                               0.1568627450980390,
-                               0.1851851851851850,
-                               0.1851851851851850,
-                               0.1698113207547170,
-                               0.1698113207547170,
-                               0.1698113207547170,
-                               0.1851851851851850,
-                               0.1851851851851850,
-                               0.1851851851851850,
-                               0.1851851851851850,
-                               0.2000000000000000,
-                               0.1851851851851850,
-                               0.1851851851851850,
-                               0.2105263157894740,
-                               0.2105263157894740,
-                               0.2372881355932200,
-                               0.2295081967213110,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2096774193548390,
-                               0.2096774193548390,
-                               0.2096774193548390,
-                               0.2063492063492060,
-                               0.2063492063492060,
-                               0.2096774193548390,
-                               0.2096774193548390,
-                               0.2222222222222220,
-                               0.2295081967213110,
-                               0.2295081967213110,
-                               0.2295081967213110,
-                               0.2166666666666670,
-                               0.2419354838709680,
-                               0.2419354838709680,
-                               0.2419354838709680,
-                               0.2419354838709680,
-                               0.2459016393442620,
-                               0.2622950819672130,
-                               0.2622950819672130,
-                               0.2500000000000000,
-                               0.2372881355932200,
-                               0.2372881355932200,
-                               0.2372881355932200,
-                               0.2372881355932200,
-                               0.2372881355932200,
-                               0.2000000000000000,
-                               0.2280701754385960,
-                               0.2280701754385960,
-                               0.2241379310344830,
-                               0.2241379310344830,
-                               0.2105263157894740,
-                               0.2105263157894740,
-                               0.2105263157894740,
-                               0.2105263157894740,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.1964285714285710,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1754385964912280,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1403508771929820,
-                               0.1379310344827590,
-                               0.1379310344827590,
-                               0.1379310344827590,
-                               0.1379310344827590,
-                               0.1379310344827590,
-                               0.1379310344827590,
-                               0.1379310344827590,
-                               0.1379310344827590,
-                               0.1666666666666670,
-                               0.1666666666666670,
-                               0.1666666666666670,
-                               0.1666666666666670,
-                               0.1694915254237290,
-                               0.1694915254237290,
-                               0.1694915254237290,
-                               0.1694915254237290,
-                               0.1694915254237290,
-                               0.1694915254237290,
-                               0.1694915254237290,
-                               0.1694915254237290,
-                               0.1639344262295080,
-                               0.1639344262295080,
-                               0.1639344262295080,
-                               0.1774193548387100,
-                               0.1746031746031750,
-                               0.1746031746031750,
-                               0.1746031746031750,
-                               0.1746031746031750,
-                               0.1746031746031750,
-                               0.1746031746031750,
-                               0.1746031746031750,
-                               0.1746031746031750,
-                               0.1746031746031750,
-                               0.1746031746031750,
-                               0.1746031746031750,
-                               0.1746031746031750,
-                               0.1774193548387100,
-                               0.1774193548387100,
-                               0.1774193548387100,
-                               0.1774193548387100,
-                               0.1774193548387100,
-                               0.1666666666666670,
-                               0.1666666666666670,
-                               0.1666666666666670,
-                               0.1639344262295080,
-                               0.1639344262295080,
-                               0.1639344262295080,
-                               0.1587301587301590,
-                               0.1587301587301590,
-                               0.1587301587301590,
-                               0.1587301587301590,
-                               0.1587301587301590,
-                               0.1587301587301590,
-                               0.1639344262295080,
-                               0.1612903225806450,
-                               0.1612903225806450,
-                               0.1612903225806450,
-                               0.1612903225806450,
-                               0.1612903225806450,
-                               0.1612903225806450,
-                               0.1612903225806450,
-                               0.1475409836065570,
-                               0.1475409836065570,
-                               0.1475409836065570,
-                               0.1475409836065570,
-                               0.1475409836065570,
-                               0.1500000000000000,
-                               0.1475409836065570,
-                               0.1475409836065570,
-                               0.1475409836065570,
-                               0.1475409836065570,
-                               0.1475409836065570,
-                               0.1475409836065570,
-                               0.1475409836065570,
-                               0.1475409836065570,
-                               0.1475409836065570,
-                               0.1475409836065570,
-                               0.1475409836065570,
-                               0.1475409836065570,
-                               0.1475409836065570,
-                               0.1475409836065570,
-                               0.1475409836065570,
-                               0.1475409836065570,
-                               0.1475409836065570,
-                               0.1500000000000000,
-                               0.1475409836065570,
-                               0.1475409836065570,
-                               0.1333333333333330,
-                               0.1333333333333330,
-                               0.1333333333333330,
-                               0.1311475409836070,
-                               0.1311475409836070,
-                               0.1311475409836070,
-                               0.1311475409836070,
-                               0.1311475409836070,
-                               0.1290322580645160,
-                               0.1290322580645160,
-                               0.1290322580645160,
-                               0.1290322580645160,
-                               0.1290322580645160,
-                               0.1290322580645160,
-                               0.1290322580645160,
-                               0.1290322580645160,
-                               0.1290322580645160,
-                               0.1290322580645160,
-                               0.1290322580645160,
-                               0.1290322580645160,
-                               0.1290322580645160,
-                               0.1290322580645160,
-                               0.1290322580645160,
-                               0.1290322580645160,
-                               0.1290322580645160,
-                               0.1290322580645160,
-                               0.1290322580645160,
-                               0.1290322580645160,
-                               0.1290322580645160,
-                               0.1147540983606560,
-                               0.1147540983606560,
-                               0.1147540983606560,
-                               0.1129032258064520,
-                               0.1129032258064520,
-                               0.1129032258064520,
-                               0.1129032258064520,
-                               0.1129032258064520,
-                               0.1129032258064520,
-                               0.1129032258064520,
-                               0.1147540983606560,
-                               0.1147540983606560,
-                               0.1147540983606560,
-                               0.1147540983606560,
-                               0.1147540983606560,
-                               0.1147540983606560,
-                               0.1147540983606560,
-                               0.1147540983606560,
-                               0.1147540983606560,
-                               0.1147540983606560,
-                               0.1147540983606560,
-                               0.1166666666666670,
-                               0.1147540983606560,
-                               0.1147540983606560,
-                               0.1147540983606560,
-                               0.1147540983606560,
-                               0.1147540983606560,
-                               0.1147540983606560,
-                               0.1129032258064520,
-                               0.1129032258064520,
-                               0.1269841269841270,
-                               0.1269841269841270,
-                               0.1269841269841270,
-                               0.1269841269841270,
-                               0.1290322580645160,
-                               0.1290322580645160,
-                               0.1290322580645160,
-                               0.1147540983606560,
-                               0.1147540983606560,
-                               0.1147540983606560,
-                               0.1147540983606560,
-                               0.1147540983606560,
-                               0.1147540983606560,
-                               0.1147540983606560,
-                               0.1000000000000000,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0983606557377049,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0967741935483871,
-                               0.0952380952380952,
-                               0.0952380952380952,
-                               0.0952380952380952,
-                               0.0952380952380952,
-                               0.0952380952380952,
-                               0.0952380952380952,
-                               0.0952380952380952,
-                               0.0952380952380952,
-                               0.0952380952380952,
-                               0.0952380952380952,
-                               0.0952380952380952,
-                               0.0952380952380952,
-                               0.0937500000000000,
-                               0.0937500000000000,
-                               0.0923076923076923,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0895522388059701,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0746268656716418,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0757575757575758,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0769230769230769,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0793650793650794,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0806451612903226,
-                               0.0645161290322581,
-                               0.0655737704918033,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0655737704918033,
-                               0.0666666666666667,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0655737704918033,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0701754385964912,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0925925925925926,
-                               0.0943396226415094,
-                               0.0961538461538462,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.0943396226415094,
-                               0.0943396226415094,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0909090909090909,
-                               0.0925925925925926,
-                               0.0877192982456140,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0892857142857143,
-                               0.0909090909090909,
-                               0.0925925925925926,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.0943396226415094,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0925925925925926,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0943396226415094,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0943396226415094,
-                               0.0943396226415094,
-                               0.0925925925925926,
-                               0.0943396226415094,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0943396226415094,
-                               0.0943396226415094,
-                               0.0943396226415094,
-                               0.0943396226415094,
-                               0.0925925925925926,
-                               0.0943396226415094,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.0980392156862745,
-                               0.0961538461538462,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0816326530612245,
-                               0.0816326530612245,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0833333333333333,
-                               0.0851063829787234,
-                               0.0652173913043478,
-                               0.0652173913043478,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0652173913043478,
-                               0.0652173913043478,
-                               0.0652173913043478,
-                               0.0666666666666667,
-                               0.0697674418604651,
-                               0.0697674418604651,
-                               0.0681818181818182,
-                               0.0666666666666667,
-                               0.0869565217391304,
-                               0.1063829787234040,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1136363636363640,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1041666666666670,
-                               0.1041666666666670,
-                               0.1063829787234040,
-                               0.1063829787234040,
-                               0.1063829787234040,
-                               0.1063829787234040,
-                               0.1063829787234040,
-                               0.1063829787234040,
-                               0.1063829787234040,
-                               0.1086956521739130,
-                               0.0869565217391304,
-                               0.0666666666666667,
-                               0.0625000000000000,
-                               0.0625000000000000,
-                               0.0625000000000000,
-                               0.0625000000000000,
-                               0.0600000000000000,
-                               0.0612244897959184,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0588235294117647,
-                               0.0576923076923077,
-                               0.0576923076923077,
-                               0.0576923076923077,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0727272727272727,
-                               0.0740740740740741,
-                               0.0740740740740741,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0877192982456140,
-                               0.0714285714285714,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0714285714285714,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0714285714285714,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0666666666666667,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0517241379310345,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0535714285714286,
-                               0.0535714285714286,
-                               0.0535714285714286,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0862068965517241,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0892857142857143,
-                               0.0925925925925926,
-                               0.0943396226415094,
-                               0.0943396226415094,
-                               0.0943396226415094,
-                               0.0943396226415094,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.0784313725490196,
-                               0.0784313725490196,
-                               0.0754716981132075,
-                               0.0754716981132075,
-                               0.0740740740740741,
-                               0.0740740740740741,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0535714285714286,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0535714285714286,
-                               0.0535714285714286,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0535714285714286,
-                               0.0535714285714286,
-                               0.0535714285714286,
-                               0.0535714285714286,
-                               0.0535714285714286,
-                               0.0535714285714286,
-                               0.0535714285714286,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0545454545454545,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0508474576271187,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0500000000000000,
-                               0.0508474576271187,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0517241379310345,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0689655172413793,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0714285714285714,
-                               0.0701754385964912,
-                               0.0862068965517241,
-                               0.0862068965517241,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0847457627118644,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0535714285714286,
-                               0.0535714285714286,
-                               0.0535714285714286,
-                               0.0535714285714286,
-                               0.0535714285714286,
-                               0.0535714285714286,
-                               0.0535714285714286,
-                               0.0535714285714286,
-                               0.0535714285714286,
-                               0.0535714285714286,
-                               0.0526315789473684,
-                               0.0526315789473684,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0517241379310345,
-                               0.0677966101694915,
-                               0.0677966101694915,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0701754385964912,
-                               0.0689655172413793,
-                               0.0689655172413793,
-                               0.0714285714285714,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0555555555555556,
-                               0.0377358490566038,
-                               0.0377358490566038,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0370370370370370,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0566037735849057,
-                               0.0566037735849057,
-                               0.0555555555555556,
-                               0.0740740740740741,
-                               0.0740740740740741,
-                               0.0740740740740741,
-                               0.0566037735849057,
-                               0.0566037735849057,
-                               0.0576923076923077,
-                               0.0576923076923077,
-                               0.0588235294117647,
-                               0.0600000000000000,
-                               0.0600000000000000,
-                               0.0612244897959184,
-                               0.0408163265306122,
-                               0.0408163265306122,
-                               0.0408163265306122,
-                               0.0408163265306122,
-                               0.0400000000000000,
-                               0.0400000000000000,
-                               0.0400000000000000,
-                               0.0400000000000000,
-                               0.0400000000000000,
-                               0.0400000000000000,
-                               0.0400000000000000,
-                               0.0400000000000000,
-                               0.0400000000000000,
-                               0.0400000000000000,
-                               0.0392156862745098,
-                               0.0392156862745098,
-                               0.0392156862745098,
-                               0.0392156862745098,
-                               0.0400000000000000,
-                               0.0204081632653061,
-                               0.0208333333333333,
-                               0.0204081632653061,
-                               0.0200000000000000,
-                               0.0200000000000000,
-                               0.0200000000000000,
-                               0.0392156862745098,
-                               0.0392156862745098,
-                               0.0392156862745098,
-                               0.0392156862745098,
-                               0.0392156862745098,
-                               0.0392156862745098,
-                               0.0384615384615385,
-                               0.0377358490566038,
-                               0.0377358490566038,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0535714285714286,
-                               0.0535714285714286,
-                               0.0535714285714286,
-                               0.0566037735849057,
-                               0.0566037735849057,
-                               0.0566037735849057,
-                               0.0566037735849057,
-                               0.0566037735849057,
-                               0.0576923076923077,
-                               0.0566037735849057,
-                               0.0566037735849057,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0555555555555556,
-                               0.0566037735849057,
-                               0.0754716981132075,
-                               0.0754716981132075,
-                               0.0740740740740741,
-                               0.0740740740740741,
-                               0.0727272727272727,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0714285714285714,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0862068965517241,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0877192982456140,
-                               0.0892857142857143,
-                               0.0892857142857143,
-                               0.0892857142857143,
-                               0.0892857142857143,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.1111111111111110,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0943396226415094,
-                               0.0943396226415094,
-                               0.0943396226415094,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.0943396226415094,
-                               0.0943396226415094,
-                               0.0943396226415094,
-                               0.0943396226415094,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.0980392156862745,
-                               0.1153846153846150,
-                               0.1153846153846150,
-                               0.1153846153846150,
-                               0.1153846153846150,
-                               0.1153846153846150,
-                               0.1153846153846150,
-                               0.1153846153846150,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0961538461538462,
-                               0.0980392156862745,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.0800000000000000,
-                               0.0816326530612245,
-                               0.0816326530612245,
-                               0.0816326530612245,
-                               0.0816326530612245,
-                               0.0816326530612245,
-                               0.0833333333333333,
-                               0.0816326530612245,
-                               0.0816326530612245,
-                               0.0816326530612245,
-                               0.0833333333333333,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.1000000000000000,
-                               0.1200000000000000,
-                               0.1224489795918370,
-                               0.1224489795918370,
-                               0.1224489795918370,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1428571428571430,
-                               0.1372549019607840,
-                               0.1372549019607840,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1458333333333330,
-                               0.1458333333333330,
-                               0.1489361702127660,
-                               0.1458333333333330,
-                               0.1489361702127660,
-                               0.1304347826086960,
-                               0.1333333333333330,
-                               0.1333333333333330,
-                               0.1333333333333330,
-                               0.1333333333333330,
-                               0.1521739130434780,
-                               0.1521739130434780,
-                               0.1702127659574470,
-                               0.1739130434782610,
-                               0.1818181818181820,
-                               0.1777777777777780,
-                               0.1818181818181820,
-                               0.1818181818181820,
-                               0.1904761904761900,
-                               0.1860465116279070,
-                               0.1818181818181820,
-                               0.1818181818181820,
-                               0.1860465116279070,
-                               0.2045454545454550,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2272727272727270,
-                               0.2325581395348840,
-                               0.2380952380952380,
-                               0.2380952380952380,
-                               0.2195121951219510,
-                               0.2195121951219510,
-                               0.2142857142857140,
-                               0.2142857142857140,
-                               0.2093023255813950,
-                               0.2093023255813950,
-                               0.2045454545454550,
-                               0.2045454545454550,
-                               0.1860465116279070,
-                               0.1860465116279070,
-                               0.1860465116279070,
-                               0.1860465116279070,
-                               0.1860465116279070,
-                               0.1904761904761900,
-                               0.2093023255813950,
-                               0.2093023255813950,
-                               0.2142857142857140,
-                               0.2142857142857140,
-                               0.2272727272727270,
-                               0.2142857142857140,
-                               0.2045454545454550,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2127659574468080,
-                               0.2173913043478260,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2400000000000000,
-                               0.2400000000000000,
-                               0.2400000000000000,
-                               0.2400000000000000,
-                               0.2549019607843140,
-                               0.2600000000000000,
-                               0.2600000000000000,
-                               0.2600000000000000,
-                               0.2600000000000000,
-                               0.2549019607843140,
-                               0.2692307692307690,
-                               0.2692307692307690,
-                               0.2692307692307690,
-                               0.2830188679245280,
-                               0.2830188679245280,
-                               0.2830188679245280,
-                               0.2830188679245280,
-                               0.2692307692307690,
-                               0.2745098039215690,
-                               0.2745098039215690,
-                               0.2745098039215690,
-                               0.2745098039215690,
-                               0.2448979591836730,
-                               0.2448979591836730,
-                               0.2448979591836730,
-                               0.2448979591836730,
-                               0.2448979591836730,
-                               0.2600000000000000,
-                               0.2600000000000000,
-                               0.2600000000000000,
-                               0.2600000000000000,
-                               0.2600000000000000,
-                               0.2600000000000000,
-                               0.2600000000000000,
-                               0.2653061224489800,
-                               0.2600000000000000,
-                               0.2600000000000000,
-                               0.2600000000000000,
-                               0.2600000000000000,
-                               0.2600000000000000,
-                               0.2600000000000000,
-                               0.2600000000000000,
-                               0.2600000000000000,
-                               0.2448979591836730,
-                               0.2448979591836730,
-                               0.2400000000000000,
-                               0.2244897959183670,
-                               0.2244897959183670,
-                               0.2244897959183670,
-                               0.2244897959183670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2244897959183670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2127659574468080,
-                               0.2127659574468080,
-                               0.2127659574468080,
-                               0.2083333333333330,
-                               0.2083333333333330,
-                               0.2083333333333330,
-                               0.2127659574468080,
-                               0.2127659574468080,
-                               0.2127659574468080,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2600000000000000,
-                               0.2745098039215690,
-                               0.2692307692307690,
-                               0.2692307692307690,
-                               0.2692307692307690,
-                               0.2641509433962260,
-                               0.2830188679245280,
-                               0.2830188679245280,
-                               0.2830188679245280,
-                               0.2830188679245280,
-                               0.2830188679245280,
-                               0.2830188679245280,
-                               0.2641509433962260,
-                               0.2641509433962260,
-                               0.2692307692307690,
-                               0.2692307692307690,
-                               0.2692307692307690,
-                               0.2692307692307690,
-                               0.2549019607843140,
-                               0.2549019607843140,
-                               0.2549019607843140,
-                               0.2549019607843140,
-                               0.2549019607843140,
-                               0.2549019607843140,
-                               0.2549019607843140,
-                               0.2549019607843140,
-                               0.2549019607843140,
-                               0.2549019607843140,
-                               0.2549019607843140,
-                               0.2549019607843140,
-                               0.2400000000000000,
-                               0.2400000000000000,
-                               0.2400000000000000,
-                               0.2400000000000000,
-                               0.2400000000000000,
-                               0.2400000000000000,
-                               0.2400000000000000,
-                               0.2400000000000000,
-                               0.2400000000000000,
-                               0.2400000000000000,
-                               0.2352941176470590,
-                               0.2352941176470590,
-                               0.2200000000000000,
-                               0.2200000000000000,
-                               0.2200000000000000,
-                               0.2156862745098040,
-                               0.2156862745098040,
-                               0.2156862745098040,
-                               0.2156862745098040,
-                               0.2156862745098040,
-                               0.2115384615384620,
-                               0.2115384615384620,
-                               0.2115384615384620,
-                               0.2115384615384620,
-                               0.2075471698113210,
-                               0.2075471698113210,
-                               0.2075471698113210,
-                               0.2075471698113210,
-                               0.2075471698113210,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2181818181818180,
-                               0.2321428571428570,
-                               0.2363636363636360,
-                               0.2363636363636360,
-                               0.2363636363636360,
-                               0.2363636363636360,
-                               0.2500000000000000,
-                               0.2500000000000000,
-                               0.2500000000000000,
-                               0.2500000000000000,
-                               0.2545454545454540,
-                               0.2678571428571430,
-                               0.2678571428571430,
-                               0.2545454545454540,
-                               0.2545454545454540,
-                               0.2545454545454540,
-                               0.2545454545454540,
-                               0.2407407407407410,
-                               0.2407407407407410,
-                               0.2264150943396230,
-                               0.2264150943396230,
-                               0.2264150943396230,
-                               0.2264150943396230,
-                               0.2307692307692310,
-                               0.2156862745098040,
-                               0.2156862745098040,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.1960784313725490,
-                               0.1960784313725490,
-                               0.2264150943396230,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2075471698113210,
-                               0.1960784313725490,
-                               0.1960784313725490,
-                               0.1960784313725490,
-                               0.1960784313725490,
-                               0.1960784313725490,
-                               0.1960784313725490,
-                               0.2075471698113210,
-                               0.2075471698113210,
-                               0.2037037037037040,
-                               0.2037037037037040,
-                               0.2037037037037040,
-                               0.2037037037037040,
-                               0.2037037037037040,
-                               0.2037037037037040,
-                               0.2037037037037040,
-                               0.2037037037037040,
-                               0.2037037037037040,
-                               0.2037037037037040,
-                               0.2075471698113210,
-                               0.2075471698113210,
-                               0.2075471698113210,
-                               0.2075471698113210,
-                               0.2075471698113210,
-                               0.2075471698113210,
-                               0.2075471698113210,
-                               0.2037037037037040,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1896551724137930,
-                               0.1896551724137930,
-                               0.1896551724137930,
-                               0.1896551724137930,
-                               0.1896551724137930,
-                               0.1896551724137930,
-                               0.1896551724137930,
-                               0.1896551724137930,
-                               0.1896551724137930,
-                               0.1896551724137930,
-                               0.1896551724137930,
-                               0.1896551724137930,
-                               0.1896551724137930,
-                               0.1896551724137930,
-                               0.1896551724137930,
-                               0.1896551724137930,
-                               0.1896551724137930,
-                               0.1896551724137930,
-                               0.1896551724137930,
-                               0.1896551724137930,
-                               0.1896551724137930,
-                               0.1896551724137930,
-                               0.1896551724137930,
-                               0.1896551724137930,
-                               0.1754385964912280,
-                               0.1754385964912280,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1481481481481480,
-                               0.1481481481481480,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1454545454545450,
-                               0.1454545454545450,
-                               0.1454545454545450,
-                               0.1454545454545450,
-                               0.1454545454545450,
-                               0.1454545454545450,
-                               0.1454545454545450,
-                               0.1454545454545450,
-                               0.1454545454545450,
-                               0.1454545454545450,
-                               0.1454545454545450,
-                               0.1454545454545450,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1090909090909090,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1132075471698110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1111111111111110,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1272727272727270,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1296296296296300,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1320754716981130,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1372549019607840,
-                               0.1372549019607840,
-                               0.1372549019607840,
-                               0.1372549019607840,
-                               0.1372549019607840,
-                               0.1372549019607840,
-                               0.1176470588235290,
-                               0.1176470588235290,
-                               0.1176470588235290,
-                               0.1176470588235290,
-                               0.1176470588235290,
-                               0.1176470588235290,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1346153846153850,
-                               0.1372549019607840,
-                               0.1372549019607840,
-                               0.1372549019607840,
-                               0.1372549019607840,
-                               0.1372549019607840,
-                               0.1372549019607840,
-                               0.1372549019607840,
-                               0.1372549019607840,
-                               0.1372549019607840,
-                               0.1372549019607840,
-                               0.1372549019607840,
-                               0.1200000000000000,
-                               0.1200000000000000,
-                               0.1224489795918370,
-                               0.1224489795918370,
-                               0.1224489795918370,
-                               0.1224489795918370,
-                               0.1224489795918370,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1224489795918370,
-                               0.1041666666666670,
-                               0.1041666666666670,
-                               0.1041666666666670,
-                               0.1041666666666670,
-                               0.1224489795918370,
-                               0.1224489795918370,
-                               0.1224489795918370,
-                               0.1224489795918370,
-                               0.1224489795918370,
-                               0.1224489795918370,
-                               0.1224489795918370,
-                               0.1224489795918370,
-                               0.1200000000000000,
-                               0.1200000000000000,
-                               0.1200000000000000,
-                               0.1200000000000000,
-                               0.1200000000000000,
-                               0.1200000000000000,
-                               0.1200000000000000,
-                               0.1200000000000000,
-                               0.1200000000000000,
-                               0.1200000000000000,
-                               0.1020408163265310,
-                               0.1020408163265310,
-                               0.1020408163265310,
-                               0.1020408163265310,
-                               0.1020408163265310,
-                               0.1020408163265310,
-                               0.1020408163265310,
-                               0.1020408163265310,
-                               0.1020408163265310,
-                               0.1020408163265310,
-                               0.1020408163265310,
-                               0.1020408163265310,
-                               0.1200000000000000,
-                               0.1372549019607840,
-                               0.1428571428571430,
-                               0.1458333333333330,
-                               0.1458333333333330,
-                               0.1489361702127660,
-                               0.1521739130434780,
-                               0.1521739130434780,
-                               0.1521739130434780,
-                               0.1702127659574470,
-                               0.1875000000000000,
-                               0.2040816326530610,
-                               0.2083333333333330,
-                               0.2083333333333330,
-                               0.2083333333333330,
-                               0.2083333333333330,
-                               0.2083333333333330,
-                               0.2127659574468080,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2340425531914890,
-                               0.2340425531914890,
-                               0.2391304347826090,
-                               0.2391304347826090,
-                               0.2391304347826090,
-                               0.2391304347826090,
-                               0.2553191489361700,
-                               0.2553191489361700,
-                               0.2608695652173910,
-                               0.2608695652173910,
-                               0.2444444444444440,
-                               0.2272727272727270,
-                               0.2093023255813950,
-                               0.2045454545454550,
-                               0.2045454545454550,
-                               0.2045454545454550,
-                               0.2045454545454550,
-                               0.2045454545454550,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2391304347826090,
-                               0.2391304347826090,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2222222222222220,
-                               0.2391304347826090,
-                               0.2391304347826090,
-                               0.2391304347826090,
-                               0.2391304347826090,
-                               0.2391304347826090,
-                               0.2391304347826090,
-                               0.2553191489361700,
-                               0.2708333333333330,
-                               0.2708333333333330,
-                               0.2708333333333330,
-                               0.2708333333333330,
-                               0.2708333333333330,
-                               0.2553191489361700,
-                               0.2553191489361700,
-                               0.2391304347826090,
-                               0.2391304347826090,
-                               0.2391304347826090,
-                               0.2391304347826090,
-                               0.2391304347826090,
-                               0.2391304347826090,
-                               0.2391304347826090,
-                               0.2553191489361700,
-                               0.2553191489361700,
-                               0.2553191489361700,
-                               0.2444444444444440,
-                               0.2391304347826090,
-                               0.2340425531914890,
-                               0.2340425531914890,
-                               0.2500000000000000,
-                               0.2500000000000000,
-                               0.2653061224489800,
-                               0.2708333333333330,
-                               0.2765957446808510,
-                               0.2708333333333330,
-                               0.2857142857142860,
-                               0.2857142857142860,
-                               0.2553191489361700,
-                               0.2553191489361700,
-                               0.2608695652173910,
-                               0.2608695652173910,
-                               0.2608695652173910,
-                               0.2608695652173910,
-                               0.3061224489795920,
-                               0.2978723404255320,
-                               0.2978723404255320,
-                               0.2978723404255320,
-                               0.2978723404255320,
-                               0.3125000000000000,
-                               0.3125000000000000,
-                               0.3125000000000000,
-                               0.3125000000000000,
-                               0.3191489361702130,
-                               0.3191489361702130,
-                               0.3191489361702130,
-                               0.3191489361702130,
-                               0.2888888888888890,
-                               0.2826086956521740,
-                               0.2888888888888890,
-                               0.2727272727272730,
-                               0.2727272727272730,
-                               0.2790697674418600,
-                               0.3111111111111110,
-                               0.3111111111111110,
-                               0.3111111111111110,
-                               0.3111111111111110,
-                               0.3111111111111110,
-                               0.3260869565217390,
-                               0.3260869565217390,
-                               0.3260869565217390,
-                               0.3191489361702130,
-                               0.3043478260869570,
-                               0.3043478260869570,
-                               0.3043478260869570,
-                               0.3191489361702130,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3265306122448980,
-                               0.3333333333333330,
-                               0.3469387755102040,
-                               0.3600000000000000,
-                               0.3600000000000000,
-                               0.3469387755102040,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3265306122448980,
-                               0.3061224489795920,
-                               0.3000000000000000,
-                               0.3000000000000000,
-                               0.3000000000000000,
-                               0.3137254901960780,
-                               0.3137254901960780,
-                               0.3000000000000000,
-                               0.3000000000000000,
-                               0.3000000000000000,
-                               0.3000000000000000,
-                               0.3000000000000000,
-                               0.2916666666666670,
-                               0.2978723404255320,
-                               0.2978723404255320,
-                               0.3125000000000000,
-                               0.3125000000000000,
-                               0.3125000000000000,
-                               0.2978723404255320,
-                               0.2916666666666670,
-                               0.2916666666666670,
-                               0.3061224489795920,
-                               0.3061224489795920,
-                               0.2916666666666670,
-                               0.3061224489795920,
-                               0.3000000000000000,
-                               0.3000000000000000,
-                               0.3137254901960780,
-                               0.3269230769230770,
-                               0.3333333333333330,
-                               0.3269230769230770,
-                               0.3269230769230770,
-                               0.3207547169811320,
-                               0.3207547169811320,
-                               0.3207547169811320,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3207547169811320,
-                               0.3269230769230770,
-                               0.3269230769230770,
-                               0.3207547169811320,
-                               0.3207547169811320,
-                               0.3207547169811320,
-                               0.3207547169811320,
-                               0.3207547169811320,
-                               0.3207547169811320,
-                               0.3207547169811320,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3454545454545450,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3396226415094340,
-                               0.3396226415094340,
-                               0.3396226415094340,
-                               0.3396226415094340,
-                               0.3396226415094340,
-                               0.3461538461538460,
-                               0.3584905660377360,
-                               0.3584905660377360,
-                               0.3584905660377360,
-                               0.3584905660377360,
-                               0.3584905660377360,
-                               0.3518518518518520,
-                               0.3518518518518520,
-                               0.3518518518518520,
-                               0.3396226415094340,
-                               0.3269230769230770,
-                               0.3137254901960780,
-                               0.3137254901960780,
-                               0.3137254901960780,
-                               0.3269230769230770,
-                               0.3269230769230770,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3200000000000000,
-                               0.3061224489795920,
-                               0.3200000000000000,
-                               0.3137254901960780,
-                               0.3137254901960780,
-                               0.3137254901960780,
-                               0.3269230769230770,
-                               0.3269230769230770,
-                               0.3269230769230770,
-                               0.3269230769230770,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3400000000000000,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3400000000000000,
-                               0.3529411764705880,
-                               0.3529411764705880,
-                               0.3529411764705880,
-                               0.3529411764705880,
-                               0.3600000000000000,
-                               0.3600000000000000,
-                               0.3600000000000000,
-                               0.3600000000000000,
-                               0.3469387755102040,
-                               0.3600000000000000,
-                               0.3600000000000000,
-                               0.3600000000000000,
-                               0.3600000000000000,
-                               0.3673469387755100,
-                               0.3800000000000000,
-                               0.3800000000000000,
-                               0.3800000000000000,
-                               0.4000000000000000,
-                               0.4000000000000000,
-                               0.4081632653061220,
-                               0.4081632653061220,
-                               0.4081632653061220,
-                               0.4081632653061220,
-                               0.4081632653061220,
-                               0.3958333333333330,
-                               0.3958333333333330,
-                               0.3958333333333330,
-                               0.3958333333333330,
-                               0.3958333333333330,
-                               0.3958333333333330,
-                               0.3958333333333330,
-                               0.3958333333333330,
-                               0.3958333333333330,
-                               0.3958333333333330,
-                               0.3958333333333330,
-                               0.3958333333333330,
-                               0.3958333333333330,
-                               0.4081632653061220,
-                               0.4081632653061220,
-                               0.4081632653061220,
-                               0.4081632653061220,
-                               0.4042553191489360,
-                               0.4042553191489360,
-                               0.4042553191489360,
-                               0.4042553191489360,
-                               0.4042553191489360,
-                               0.4130434782608700,
-                               0.4042553191489360,
-                               0.4042553191489360,
-                               0.4042553191489360,
-                               0.4042553191489360,
-                               0.4042553191489360,
-                               0.4166666666666670,
-                               0.4375000000000000,
-                               0.4375000000000000,
-                               0.4375000000000000,
-                               0.4375000000000000,
-                               0.4375000000000000,
-                               0.4375000000000000,
-                               0.4468085106382980,
-                               0.4468085106382980,
-                               0.4468085106382980,
-                               0.4347826086956520,
-                               0.4347826086956520,
-                               0.4347826086956520,
-                               0.4347826086956520,
-                               0.4347826086956520,
-                               0.4565217391304350,
-                               0.4565217391304350,
-                               0.4565217391304350,
-                               0.4444444444444440,
-                               0.4444444444444440,
-                               0.4444444444444440,
-                               0.4444444444444440,
-                               0.4444444444444440,
-                               0.4444444444444440,
-                               0.4444444444444440,
-                               0.4444444444444440,
-                               0.4347826086956520,
-                               0.4347826086956520,
-                               0.4347826086956520,
-                               0.4255319148936170,
-                               0.4255319148936170,
-                               0.4255319148936170,
-                               0.4255319148936170,
-                               0.4255319148936170,
-                               0.4130434782608700,
-                               0.4130434782608700,
-                               0.4255319148936170,
-                               0.4255319148936170,
-                               0.4255319148936170,
-                               0.4255319148936170,
-                               0.4042553191489360,
-                               0.4042553191489360,
-                               0.4042553191489360,
-                               0.4042553191489360,
-                               0.4042553191489360,
-                               0.4166666666666670,
-                               0.4166666666666670,
-                               0.4285714285714290,
-                               0.4166666666666670,
-                               0.4166666666666670,
-                               0.4166666666666670,
-                               0.4166666666666670,
-                               0.4166666666666670,
-                               0.4166666666666670,
-                               0.4166666666666670,
-                               0.4166666666666670,
-                               0.4166666666666670,
-                               0.4166666666666670,
-                               0.4166666666666670,
-                               0.4166666666666670,
-                               0.4200000000000000,
-                               0.4081632653061220,
-                               0.4081632653061220,
-                               0.4081632653061220,
-                               0.4081632653061220,
-                               0.4081632653061220,
-                               0.4000000000000000,
-                               0.4117647058823530,
-                               0.4038461538461540,
-                               0.4150943396226420,
-                               0.4074074074074070,
-                               0.4074074074074070,
-                               0.4150943396226420,
-                               0.4150943396226420,
-                               0.4150943396226420,
-                               0.4150943396226420,
-                               0.4150943396226420,
-                               0.4038461538461540,
-                               0.3962264150943400,
-                               0.4038461538461540,
-                               0.4038461538461540,
-                               0.4038461538461540,
-                               0.4038461538461540,
-                               0.4038461538461540,
-                               0.3877551020408160,
-                               0.3921568627450980,
-                               0.3921568627450980,
-                               0.3800000000000000,
-                               0.3800000000000000,
-                               0.3800000000000000,
-                               0.3800000000000000,
-                               0.3725490196078430,
-                               0.3725490196078430,
-                               0.3725490196078430,
-                               0.3725490196078430,
-                               0.3846153846153850,
-                               0.3962264150943400,
-                               0.4038461538461540,
-                               0.4038461538461540,
-                               0.4150943396226420,
-                               0.4150943396226420,
-                               0.4150943396226420,
-                               0.4181818181818180,
-                               0.4181818181818180,
-                               0.4181818181818180,
-                               0.4181818181818180,
-                               0.4181818181818180,
-                               0.4074074074074070,
-                               0.3962264150943400,
-                               0.3962264150943400,
-                               0.3962264150943400,
-                               0.4074074074074070,
-                               0.4074074074074070,
-                               0.4074074074074070,
-                               0.4000000000000000,
-                               0.4107142857142860,
-                               0.4107142857142860,
-                               0.4035087719298250,
-                               0.4035087719298250,
-                               0.4035087719298250,
-                               0.4035087719298250,
-                               0.4035087719298250,
-                               0.4035087719298250,
-                               0.4035087719298250,
-                               0.4035087719298250,
-                               0.4107142857142860,
-                               0.4107142857142860,
-                               0.4107142857142860,
-                               0.4107142857142860,
-                               0.4000000000000000,
-                               0.4000000000000000,
-                               0.4000000000000000,
-                               0.4000000000000000,
-                               0.3928571428571430,
-                               0.3818181818181820,
-                               0.3818181818181820,
-                               0.3818181818181820,
-                               0.3818181818181820,
-                               0.3818181818181820,
-                               0.3703703703703700,
-                               0.3818181818181820,
-                               0.3818181818181820,
-                               0.3818181818181820,
-                               0.3888888888888890,
-                               0.3962264150943400,
-                               0.4074074074074070,
-                               0.4074074074074070,
-                               0.4000000000000000,
-                               0.4000000000000000,
-                               0.3888888888888890,
-                               0.4000000000000000,
-                               0.4000000000000000,
-                               0.4000000000000000,
-                               0.3888888888888890,
-                               0.3888888888888890,
-                               0.3888888888888890,
-                               0.3888888888888890,
-                               0.3962264150943400,
-                               0.3962264150943400,
-                               0.3962264150943400,
-                               0.4074074074074070,
-                               0.4000000000000000,
-                               0.3962264150943400,
-                               0.3846153846153850,
-                               0.3846153846153850,
-                               0.3725490196078430,
-                               0.3725490196078430,
-                               0.3653846153846150,
-                               0.3653846153846150,
-                               0.3773584905660380,
-                               0.3773584905660380,
-                               0.3703703703703700,
-                               0.3703703703703700,
-                               0.3703703703703700,
-                               0.3584905660377360,
-                               0.3773584905660380,
-                               0.3773584905660380,
-                               0.3653846153846150,
-                               0.3653846153846150,
-                               0.3653846153846150,
-                               0.3653846153846150,
-                               0.3600000000000000,
-                               0.3600000000000000,
-                               0.3600000000000000,
-                               0.3600000000000000,
-                               0.3600000000000000,
-                               0.3600000000000000,
-                               0.3529411764705880,
-                               0.3529411764705880,
-                               0.3529411764705880,
-                               0.3529411764705880,
-                               0.3529411764705880,
-                               0.3584905660377360,
-                               0.3584905660377360,
-                               0.3584905660377360,
-                               0.3518518518518520,
-                               0.3518518518518520,
-                               0.3518518518518520,
-                               0.3518518518518520,
-                               0.3584905660377360,
-                               0.3584905660377360,
-                               0.3703703703703700,
-                               0.3703703703703700,
-                               0.3703703703703700,
-                               0.3518518518518520,
-                               0.3454545454545450,
-                               0.3454545454545450,
-                               0.3571428571428570,
-                               0.3571428571428570,
-                               0.3571428571428570,
-                               0.3571428571428570,
-                               0.3508771929824560,
-                               0.3508771929824560,
-                               0.3508771929824560,
-                               0.3508771929824560,
-                               0.3392857142857140,
-                               0.3333333333333330,
-                               0.3396226415094340,
-                               0.3461538461538460,
-                               0.3461538461538460,
-                               0.3461538461538460,
-                               0.3529411764705880,
-                               0.3653846153846150,
-                               0.3653846153846150,
-                               0.3653846153846150,
-                               0.3653846153846150,
-                               0.3653846153846150,
-                               0.3529411764705880,
-                               0.3529411764705880,
-                               0.3265306122448980,
-                               0.3265306122448980,
-                               0.3265306122448980,
-                               0.3265306122448980,
-                               0.3265306122448980,
-                               0.3333333333333330,
-                               0.3265306122448980,
-                               0.3265306122448980,
-                               0.3265306122448980,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3469387755102040,
-                               0.3469387755102040,
-                               0.3469387755102040,
-                               0.3469387755102040,
-                               0.3469387755102040,
-                               0.3541666666666670,
-                               0.3541666666666670,
-                               0.3541666666666670,
-                               0.3541666666666670,
-                               0.3541666666666670,
-                               0.3541666666666670,
-                               0.3541666666666670,
-                               0.3541666666666670,
-                               0.3541666666666670,
-                               0.3541666666666670,
-                               0.3541666666666670,
-                               0.3673469387755100,
-                               0.3673469387755100,
-                               0.3673469387755100,
-                               0.3800000000000000,
-                               0.3673469387755100,
-                               0.3673469387755100,
-                               0.3673469387755100,
-                               0.3600000000000000,
-                               0.3600000000000000,
-                               0.3529411764705880,
-                               0.3529411764705880,
-                               0.3529411764705880,
-                               0.3529411764705880,
-                               0.3653846153846150,
-                               0.3653846153846150,
-                               0.3800000000000000,
-                               0.3800000000000000,
-                               0.3800000000000000,
-                               0.3800000000000000,
-                               0.3800000000000000,
-                               0.3673469387755100,
-                               0.3469387755102040,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3469387755102040,
-                               0.3400000000000000,
-                               0.3400000000000000,
-                               0.3529411764705880,
-                               0.3529411764705880,
-                               0.3529411764705880,
-                               0.3529411764705880,
-                               0.3529411764705880,
-                               0.3600000000000000,
-                               0.3600000000000000,
-                               0.3469387755102040,
-                               0.3469387755102040,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3469387755102040,
-                               0.3469387755102040,
-                               0.3469387755102040,
-                               0.3469387755102040,
-                               0.3600000000000000,
-                               0.3725490196078430,
-                               0.3846153846153850,
-                               0.3846153846153850,
-                               0.3846153846153850,
-                               0.3846153846153850,
-                               0.3962264150943400,
-                               0.3962264150943400,
-                               0.4038461538461540,
-                               0.3962264150943400,
-                               0.3962264150943400,
-                               0.3962264150943400,
-                               0.3962264150943400,
-                               0.4038461538461540,
-                               0.4259259259259260,
-                               0.4259259259259260,
-                               0.4259259259259260,
-                               0.4259259259259260,
-                               0.4150943396226420,
-                               0.4150943396226420,
-                               0.4150943396226420,
-                               0.4150943396226420,
-                               0.4150943396226420,
-                               0.4150943396226420,
-                               0.4150943396226420,
-                               0.4000000000000000,
-                               0.3818181818181820,
-                               0.3818181818181820,
-                               0.3888888888888890,
-                               0.3888888888888890,
-                               0.3888888888888890,
-                               0.3888888888888890,
-                               0.3962264150943400,
-                               0.3888888888888890,
-                               0.3888888888888890,
-                               0.3888888888888890,
-                               0.3888888888888890,
-                               0.3888888888888890,
-                               0.4000000000000000,
-                               0.4000000000000000,
-                               0.4000000000000000,
-                               0.4000000000000000,
-                               0.4000000000000000,
-                               0.3888888888888890,
-                               0.3703703703703700,
-                               0.3703703703703700,
-                               0.3703703703703700,
-                               0.3703703703703700,
-                               0.3703703703703700,
-                               0.3703703703703700,
-                               0.3703703703703700,
-                               0.3584905660377360,
-                               0.3584905660377360,
-                               0.3584905660377360,
-                               0.3584905660377360,
-                               0.3584905660377360,
-                               0.3584905660377360,
-                               0.3584905660377360,
-                               0.3584905660377360,
-                               0.3584905660377360,
-                               0.3584905660377360,
-                               0.3584905660377360,
-                               0.3773584905660380,
-                               0.3773584905660380,
-                               0.3962264150943400,
-                               0.3962264150943400,
-                               0.3888888888888890,
-                               0.3818181818181820,
-                               0.3928571428571430,
-                               0.4035087719298250,
-                               0.4035087719298250,
-                               0.4035087719298250,
-                               0.4137931034482760,
-                               0.4137931034482760,
-                               0.4000000000000000,
-                               0.4000000000000000,
-                               0.4107142857142860,
-                               0.4107142857142860,
-                               0.4107142857142860,
-                               0.4107142857142860,
-                               0.4107142857142860,
-                               0.4107142857142860,
-                               0.4107142857142860,
-                               0.4107142857142860,
-                               0.4107142857142860,
-                               0.4107142857142860,
-                               0.4210526315789470,
-                               0.4107142857142860,
-                               0.4107142857142860,
-                               0.4107142857142860,
-                               0.4107142857142860,
-                               0.4107142857142860,
-                               0.4107142857142860,
-                               0.4210526315789470,
-                               0.4107142857142860,
-                               0.4107142857142860,
-                               0.4107142857142860,
-                               0.4107142857142860,
-                               0.4000000000000000,
-                               0.4000000000000000,
-                               0.4000000000000000,
-                               0.4000000000000000,
-                               0.4000000000000000,
-                               0.3888888888888890,
-                               0.3818181818181820,
-                               0.3818181818181820,
-                               0.3584905660377360,
-                               0.3584905660377360,
-                               0.3461538461538460,
-                               0.3461538461538460,
-                               0.3137254901960780,
-                               0.3000000000000000,
-                               0.3137254901960780,
-                               0.3137254901960780,
-                               0.3137254901960780,
-                               0.3137254901960780,
-                               0.3000000000000000,
-                               0.3000000000000000,
-                               0.3000000000000000,
-                               0.3000000000000000,
-                               0.3000000000000000,
-                               0.3000000000000000,
-                               0.2800000000000000,
-                               0.2653061224489800,
-                               0.3076923076923080,
-                               0.3076923076923080,
-                               0.3076923076923080,
-                               0.3076923076923080,
-                               0.2941176470588230,
-                               0.2941176470588230,
-                               0.2941176470588230,
-                               0.2941176470588230,
-                               0.2941176470588230,
-                               0.2941176470588230,
-                               0.3207547169811320,
-                               0.3207547169811320,
-                               0.3207547169811320,
-                               0.3207547169811320,
-                               0.3207547169811320,
-                               0.3207547169811320,
-                               0.3090909090909090,
-                               0.3090909090909090,
-                               0.2962962962962960,
-                               0.2962962962962960,
-                               0.2962962962962960,
-                               0.2962962962962960,
-                               0.2962962962962960,
-                               0.2962962962962960,
-                               0.2962962962962960,
-                               0.2962962962962960,
-                               0.2962962962962960,
-                               0.2962962962962960,
-                               0.2962962962962960,
-                               0.2909090909090910,
-                               0.2777777777777780,
-                               0.2641509433962260,
-                               0.2777777777777780,
-                               0.2777777777777780,
-                               0.2727272727272730,
-                               0.2857142857142860,
-                               0.2807017543859650,
-                               0.2758620689655170,
-                               0.2758620689655170,
-                               0.2758620689655170,
-                               0.2758620689655170,
-                               0.2758620689655170,
-                               0.2631578947368420,
-                               0.2631578947368420,
-                               0.2631578947368420,
-                               0.2586206896551720,
-                               0.2456140350877190,
-                               0.2456140350877190,
-                               0.2456140350877190,
-                               0.2456140350877190,
-                               0.2321428571428570,
-                               0.2321428571428570,
-                               0.2321428571428570,
-                               0.2321428571428570,
-                               0.2280701754385960,
-                               0.2280701754385960,
-                               0.2241379310344830,
-                               0.2241379310344830,
-                               0.2241379310344830,
-                               0.2241379310344830,
-                               0.2280701754385960,
-                               0.2280701754385960,
-                               0.2280701754385960,
-                               0.2280701754385960,
-                               0.2280701754385960,
-                               0.2280701754385960,
-                               0.2280701754385960,
-                               0.2280701754385960,
-                               0.2142857142857140,
-                               0.2142857142857140,
-                               0.2068965517241380,
-                               0.2068965517241380,
-                               0.2068965517241380,
-                               0.2068965517241380,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1929824561403510,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.1964285714285710,
-                               0.1818181818181820,
-                               0.1818181818181820,
-                               0.1818181818181820,
-                               0.1818181818181820,
-                               0.1818181818181820,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1785714285714290,
-                               0.1754385964912280,
-                               0.1754385964912280,
-                               0.1754385964912280,
-                               0.1754385964912280,
-                               0.1754385964912280,
-                               0.1754385964912280,
-                               0.1754385964912280,
-                               0.1754385964912280,
-                               0.1754385964912280,
-                               0.1754385964912280,
-                               0.1754385964912280,
-                               0.1754385964912280,
-                               0.1754385964912280,
-                               0.1754385964912280,
-                               0.1896551724137930,
-                               0.1896551724137930,
-                               0.1896551724137930,
-                               0.1896551724137930,
-                               0.1896551724137930,
-                               0.1896551724137930,
-                               0.1754385964912280,
-                               0.1754385964912280,
-                               0.1754385964912280,
-                               0.1754385964912280,
-                               0.1754385964912280,
-                               0.1754385964912280,
-                               0.1754385964912280,
-                               0.1754385964912280,
-                               0.1754385964912280,
-                               0.1754385964912280,
-                               0.1754385964912280,
-                               0.1754385964912280,
-                               0.1724137931034480,
-                               0.1724137931034480,
-                               0.1724137931034480,
-                               0.1724137931034480,
-                               0.1724137931034480,
-                               0.1724137931034480,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1578947368421050,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1607142857142860,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1636363636363640,
-                               0.1666666666666670,
-                               0.1666666666666670,
-                               0.1666666666666670,
-                               0.1666666666666670,
-                               0.1698113207547170,
-                               0.1698113207547170,
-                               0.1698113207547170,
-                               0.1698113207547170,
-                               0.1698113207547170,
-                               0.1698113207547170,
-                               0.1698113207547170,
-                               0.1698113207547170,
-                               0.1698113207547170,
-                               0.1698113207547170,
-                               0.1698113207547170,
-                               0.1698113207547170,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1730769230769230,
-                               0.1764705882352940,
-                               0.1764705882352940,
-                               0.1764705882352940,
-                               0.1764705882352940,
-                               0.1764705882352940,
-                               0.1764705882352940,
-                               0.1764705882352940,
-                               0.1764705882352940,
-                               0.1764705882352940,
-                               0.1764705882352940,
-                               0.1764705882352940,
-                               0.1764705882352940,
-                               0.1764705882352940,
-                               0.1764705882352940,
-                               0.1764705882352940,
-                               0.1764705882352940,
-                               0.1764705882352940,
-                               0.1764705882352940,
-                               0.1600000000000000,
-                               0.1600000000000000,
-                               0.1600000000000000,
-                               0.1600000000000000,
-                               0.1600000000000000,
-                               0.1600000000000000,
-                               0.1568627450980390,
-                               0.1568627450980390,
-                               0.1568627450980390,
-                               0.1568627450980390,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1224489795918370,
-                               0.1224489795918370,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1224489795918370,
-                               0.1224489795918370,
-                               0.1224489795918370,
-                               0.1224489795918370,
-                               0.1063829787234040,
-                               0.1063829787234040,
-                               0.1063829787234040,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1400000000000000,
-                               0.1224489795918370,
-                               0.1224489795918370,
-                               0.1224489795918370,
-                               0.1224489795918370,
-                               0.1224489795918370,
-                               0.1224489795918370,
-                               0.1224489795918370,
-                               0.1224489795918370,
-                               0.1224489795918370,
-                               0.1224489795918370,
-                               0.1224489795918370,
-                               0.1224489795918370,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1333333333333330,
-                               0.1333333333333330,
-                               0.1333333333333330,
-                               0.1333333333333330,
-                               0.1333333333333330,
-                               0.1333333333333330,
-                               0.1739130434782610,
-                               0.1739130434782610,
-                               0.1739130434782610,
-                               0.1739130434782610,
-                               0.1777777777777780,
-                               0.1956521739130430,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2244897959183670,
-                               0.2244897959183670,
-                               0.2244897959183670,
-                               0.2244897959183670,
-                               0.2244897959183670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2448979591836730,
-                               0.2448979591836730,
-                               0.2448979591836730,
-                               0.2448979591836730,
-                               0.2448979591836730,
-                               0.2448979591836730,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2653061224489800,
-                               0.2653061224489800,
-                               0.2708333333333330,
-                               0.2708333333333330,
-                               0.2708333333333330,
-                               0.2708333333333330,
-                               0.2708333333333330,
-                               0.2708333333333330,
-                               0.2708333333333330,
-                               0.2708333333333330,
-                               0.2708333333333330,
-                               0.2765957446808510,
-                               0.2916666666666670,
-                               0.2978723404255320,
-                               0.3125000000000000,
-                               0.3265306122448980,
-                               0.3265306122448980,
-                               0.3333333333333330,
-                               0.3191489361702130,
-                               0.3191489361702130,
-                               0.3260869565217390,
-                               0.3260869565217390,
-                               0.3260869565217390,
-                               0.3260869565217390,
-                               0.3333333333333330,
-                               0.3181818181818180,
-                               0.3181818181818180,
-                               0.3181818181818180,
-                               0.3181818181818180,
-                               0.3333333333333330,
-                               0.3260869565217390,
-                               0.3043478260869570,
-                               0.3043478260869570,
-                               0.2954545454545450,
-                               0.2954545454545450,
-                               0.2954545454545450,
-                               0.2790697674418600,
-                               0.2666666666666670,
-                               0.2666666666666670,
-                               0.2826086956521740,
-                               0.2826086956521740,
-                               0.2888888888888890,
-                               0.2888888888888890,
-                               0.2727272727272730,
-                               0.2558139534883720,
-                               0.2558139534883720,
-                               0.2558139534883720,
-                               0.2500000000000000,
-                               0.2666666666666670,
-                               0.2608695652173910,
-                               0.2608695652173910,
-                               0.2553191489361700,
-                               0.2553191489361700,
-                               0.2708333333333330,
-                               0.2500000000000000,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2448979591836730,
-                               0.2448979591836730,
-                               0.2500000000000000,
-                               0.2500000000000000,
-                               0.2500000000000000,
-                               0.2448979591836730,
-                               0.2448979591836730,
-                               0.2400000000000000,
-                               0.2400000000000000,
-                               0.2549019607843140,
-                               0.2549019607843140,
-                               0.2400000000000000,
-                               0.2400000000000000,
-                               0.2400000000000000,
-                               0.2400000000000000,
-                               0.2448979591836730,
-                               0.2448979591836730,
-                               0.2448979591836730,
-                               0.2500000000000000,
-                               0.2500000000000000,
-                               0.2500000000000000,
-                               0.2653061224489800,
-                               0.2653061224489800,
-                               0.2653061224489800,
-                               0.2653061224489800,
-                               0.2653061224489800,
-                               0.2800000000000000,
-                               0.2653061224489800,
-                               0.2653061224489800,
-                               0.2800000000000000,
-                               0.2500000000000000,
-                               0.2500000000000000,
-                               0.2500000000000000,
-                               0.2500000000000000,
-                               0.2500000000000000,
-                               0.2500000000000000,
-                               0.2448979591836730,
-                               0.2500000000000000,
-                               0.2500000000000000,
-                               0.2500000000000000,
-                               0.2500000000000000,
-                               0.2500000000000000,
-                               0.2553191489361700,
-                               0.2608695652173910,
-                               0.2608695652173910,
-                               0.2608695652173910,
-                               0.2608695652173910,
-                               0.2608695652173910,
-                               0.2553191489361700,
-                               0.2708333333333330,
-                               0.2708333333333330,
-                               0.2708333333333330,
-                               0.2708333333333330,
-                               0.2708333333333330,
-                               0.2708333333333330,
-                               0.2708333333333330,
-                               0.2653061224489800,
-                               0.2653061224489800,
-                               0.2653061224489800,
-                               0.2653061224489800,
-                               0.2653061224489800,
-                               0.2800000000000000,
-                               0.2800000000000000,
-                               0.2800000000000000,
-                               0.2800000000000000,
-                               0.2800000000000000,
-                               0.2857142857142860,
-                               0.2916666666666670,
-                               0.2916666666666670,
-                               0.2916666666666670,
-                               0.2916666666666670,
-                               0.2916666666666670,
-                               0.2857142857142860,
-                               0.2916666666666670,
-                               0.2916666666666670,
-                               0.3061224489795920,
-                               0.3061224489795920,
-                               0.2978723404255320,
-                               0.2978723404255320,
-                               0.2826086956521740,
-                               0.2826086956521740,
-                               0.2727272727272730,
-                               0.2727272727272730,
-                               0.2888888888888890,
-                               0.3043478260869570,
-                               0.3043478260869570,
-                               0.3043478260869570,
-                               0.3043478260869570,
-                               0.3043478260869570,
-                               0.3191489361702130,
-                               0.3260869565217390,
-                               0.3260869565217390,
-                               0.3260869565217390,
-                               0.3260869565217390,
-                               0.3260869565217390,
-                               0.3260869565217390,
-                               0.3260869565217390,
-                               0.3260869565217390,
-                               0.3260869565217390,
-                               0.3260869565217390,
-                               0.3260869565217390,
-                               0.3260869565217390,
-                               0.3111111111111110,
-                               0.3181818181818180,
-                               0.3181818181818180,
-                               0.3181818181818180,
-                               0.3181818181818180,
-                               0.3023255813953490,
-                               0.3023255813953490,
-                               0.2790697674418600,
-                               0.2857142857142860,
-                               0.3023255813953490,
-                               0.3023255813953490,
-                               0.3023255813953490,
-                               0.3181818181818180,
-                               0.3333333333333330,
-                               0.3617021276595740,
-                               0.3877551020408160,
-                               0.3877551020408160,
-                               0.4000000000000000,
-                               0.4000000000000000,
-                               0.4117647058823530,
-                               0.4117647058823530,
-                               0.4117647058823530,
-                               0.4117647058823530,
-                               0.4000000000000000,
-                               0.3877551020408160,
-                               0.3750000000000000,
-                               0.3750000000000000,
-                               0.3750000000000000,
-                               0.3750000000000000,
-                               0.3877551020408160,
-                               0.3877551020408160,
-                               0.3800000000000000,
-                               0.3800000000000000,
-                               0.3673469387755100,
-                               0.3673469387755100,
-                               0.3673469387755100,
-                               0.3673469387755100,
-                               0.3673469387755100,
-                               0.3673469387755100,
-                               0.3673469387755100,
-                               0.3541666666666670,
-                               0.3404255319148940,
-                               0.3404255319148940,
-                               0.3404255319148940,
-                               0.3404255319148940,
-                               0.3404255319148940,
-                               0.3404255319148940,
-                               0.3404255319148940,
-                               0.3404255319148940,
-                               0.3404255319148940,
-                               0.3404255319148940,
-                               0.3404255319148940,
-                               0.3478260869565220,
-                               0.3478260869565220,
-                               0.3478260869565220,
-                               0.3404255319148940,
-                               0.3260869565217390,
-                               0.3260869565217390,
-                               0.3260869565217390,
-                               0.3260869565217390,
-                               0.3191489361702130,
-                               0.3191489361702130,
-                               0.3043478260869570,
-                               0.2727272727272730,
-                               0.2727272727272730,
-                               0.2727272727272730,
-                               0.2727272727272730,
-                               0.2727272727272730,
-                               0.2727272727272730,
-                               0.2727272727272730,
-                               0.2727272727272730,
-                               0.2888888888888890,
-                               0.2888888888888890,
-                               0.2826086956521740,
-                               0.2888888888888890,
-                               0.2888888888888890,
-                               0.3043478260869570,
-                               0.3191489361702130,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3409090909090910,
-                               0.3409090909090910,
-                               0.3409090909090910,
-                               0.3409090909090910,
-                               0.3409090909090910,
-                               0.3555555555555560,
-                               0.3555555555555560,
-                               0.3555555555555560,
-                               0.3555555555555560,
-                               0.3555555555555560,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3333333333333330,
-                               0.3478260869565220,
-                               0.3478260869565220,
-                               0.3478260869565220,
-                               0.3555555555555560,
-                               0.3478260869565220,
-                               0.3478260869565220,
-                               0.3617021276595740,
-                               0.3617021276595740,
-                               0.3617021276595740,
-                               0.3617021276595740,
-                               0.3478260869565220,
-                               0.3617021276595740,
-                               0.3617021276595740,
-                               0.3478260869565220,
-                               0.3478260869565220,
-                               0.3404255319148940,
-                               0.3404255319148940,
-                               0.3404255319148940,
-                               0.3404255319148940,
-                               0.3404255319148940,
-                               0.3404255319148940,
-                               0.3541666666666670,
-                               0.3541666666666670,
-                               0.3617021276595740,
-                               0.3617021276595740,
-                               0.3617021276595740,
-                               0.3617021276595740,
-                               0.3541666666666670,
-                               0.3600000000000000,
-                               0.3600000000000000,
-                               0.3600000000000000,
-                               0.3725490196078430,
-                               0.3725490196078430,
-                               0.3725490196078430,
-                               0.3800000000000000,
-                               0.4000000000000000,
-                               0.4000000000000000,
-                               0.4000000000000000,
-                               0.4000000000000000,
-                               0.4000000000000000,
-                               0.3877551020408160,
-                               0.3877551020408160,
-                               0.3877551020408160,
-                               0.3877551020408160,
-                               0.4000000000000000,
-                               0.4000000000000000,
-                               0.4000000000000000,
-                               0.4000000000000000,
-                               0.4000000000000000,
-                               0.4000000000000000,
-                               0.4000000000000000,
-                               0.3877551020408160,
-                               0.3877551020408160,
-                               0.3750000000000000,
-                               0.3750000000000000,
-                               0.3695652173913040,
-                               0.3695652173913040,
-                               0.3695652173913040,
-                               0.3695652173913040,
-                               0.3555555555555560,
-                               0.3555555555555560,
-                               0.3695652173913040,
-                               0.3695652173913040,
-                               0.3695652173913040,
-                               0.3695652173913040,
-                               0.3617021276595740,
-                               0.3695652173913040,
-                               0.3555555555555560,
-                               0.3409090909090910,
-                               0.3555555555555560,
-                               0.3555555555555560,
-                               0.3777777777777780,
-                               0.3863636363636360,
-                               0.3953488372093020,
-                               0.3953488372093020,
-                               0.3953488372093020,
-                               0.3953488372093020,
-                               0.3863636363636360,
-                               0.3863636363636360,
-                               0.3863636363636360,
-                               0.3863636363636360,
-                               0.3863636363636360,
-                               0.3863636363636360,
-                               0.3863636363636360,
-                               0.3863636363636360,
-                               0.3777777777777780,
-                               0.3777777777777780,
-                               0.3777777777777780,
-                               0.3777777777777780,
-                               0.3777777777777780,
-                               0.3777777777777780,
-                               0.3777777777777780,
-                               0.3777777777777780,
-                               0.3777777777777780,
-                               0.3777777777777780,
-                               0.3777777777777780,
-                               0.3777777777777780,
-                               0.3913043478260870,
-                               0.3913043478260870,
-                               0.3913043478260870,
-                               0.3913043478260870,
-                               0.3636363636363640,
-                               0.3777777777777780,
-                               0.3777777777777780,
-                               0.3777777777777780,
-                               0.3777777777777780,
-                               0.3777777777777780,
-                               0.3777777777777780,
-                               0.3636363636363640,
-                               0.3636363636363640,
-                               0.3636363636363640,
-                               0.3636363636363640,
-                               0.3636363636363640,
-                               0.3555555555555560,
-                               0.3555555555555560,
-                               0.3555555555555560,
-                               0.3555555555555560,
-                               0.3409090909090910,
-                               0.3409090909090910,
-                               0.3255813953488370,
-                               0.3255813953488370,
-                               0.3255813953488370,
-                               0.3255813953488370,
-                               0.3414634146341460,
-                               0.3170731707317070,
-                               0.3095238095238100,
-                               0.3255813953488370,
-                               0.3255813953488370,
-                               0.3255813953488370,
-                               0.3095238095238100,
-                               0.3095238095238100,
-                               0.3255813953488370,
-                               0.3255813953488370,
-                               0.3095238095238100,
-                               0.3095238095238100,
-                               0.3095238095238100,
-                               0.3255813953488370,
-                               0.3255813953488370,
-                               0.3255813953488370,
-                               0.3255813953488370,
-                               0.3255813953488370,
-                               0.3095238095238100,
-                               0.3095238095238100,
-                               0.3255813953488370,
-                               0.3255813953488370,
-                               0.3409090909090910,
-                               0.3409090909090910,
-                               0.3555555555555560,
-                               0.3555555555555560,
-                               0.3555555555555560,
-                               0.3555555555555560,
-                               0.3555555555555560,
-                               0.3409090909090910,
-                               0.3409090909090910,
-                               0.3488372093023260,
-                               0.3636363636363640,
-                               0.3636363636363640,
-                               0.3636363636363640,
-                               0.3636363636363640,
-                               0.3636363636363640,
-                               0.3913043478260870,
-                               0.3913043478260870,
-                               0.3913043478260870,
-                               0.3913043478260870,
-                               0.3913043478260870,
-                               0.3913043478260870,
-                               0.3913043478260870,
-                               0.3913043478260870,
-                               0.3913043478260870,
-                               0.3913043478260870,
-                               0.3913043478260870,
-                               0.3913043478260870,
-                               0.3829787234042550,
-                               0.3913043478260870,
-                               0.3913043478260870,
-                               0.3913043478260870,
-                               0.3913043478260870,
-                               0.4042553191489360,
-                               0.4042553191489360,
-                               0.4042553191489360,
-                               0.3913043478260870,
-                               0.4000000000000000,
-                               0.4000000000000000,
-                               0.3863636363636360,
-                               0.3636363636363640,
-                               0.3636363636363640,
-                               0.3636363636363640,
-                               0.3636363636363640,
-                               0.3488372093023260,
-                               0.3488372093023260,
-                               0.3488372093023260,
-                               0.3409090909090910,
-                               0.3255813953488370,
-                               0.3255813953488370,
-                               0.3181818181818180,
-                               0.3181818181818180,
-                               0.3111111111111110,
-                               0.3111111111111110,
-                               0.3111111111111110,
-                               0.3260869565217390,
-                               0.3404255319148940,
-                               0.3404255319148940,
-                               0.3260869565217390,
-                               0.3023255813953490,
-                               0.3181818181818180,
-                               0.3111111111111110,
-                               0.3111111111111110,
-                               0.3043478260869570,
-                               0.3043478260869570,
-                               0.3043478260869570,
-                               0.3043478260869570,
-                               0.3043478260869570,
-                               0.3111111111111110,
-                               0.3111111111111110,
-                               0.3111111111111110,
-                               0.3260869565217390,
-                               0.3260869565217390,
-                               0.3111111111111110,
-                               0.3111111111111110,
-                               0.3111111111111110,
-                               0.3111111111111110,
-                               0.3111111111111110,
-                               0.3111111111111110,
-                               0.3260869565217390,
-                               0.3111111111111110,
-                               0.3111111111111110,
-                               0.2954545454545450,
-                               0.2954545454545450,
-                               0.2954545454545450,
-                               0.2954545454545450,
-                               0.3260869565217390,
-                               0.3191489361702130,
-                               0.3191489361702130,
-                               0.3191489361702130,
-                               0.3191489361702130,
-                               0.3191489361702130,
-                               0.3125000000000000,
-                               0.3125000000000000,
-                               0.3125000000000000,
-                               0.3125000000000000,
-                               0.2978723404255320,
-                               0.2826086956521740,
-                               0.2826086956521740,
-                               0.2765957446808510,
-                               0.2978723404255320,
-                               0.2978723404255320,
-                               0.2916666666666670,
-                               0.2765957446808510,
-                               0.2765957446808510,
-                               0.2765957446808510,
-                               0.2765957446808510,
-                               0.2916666666666670,
-                               0.2916666666666670,
-                               0.3061224489795920,
-                               0.3061224489795920,
-                               0.3061224489795920,
-                               0.3061224489795920,
-                               0.2916666666666670,
-                               0.2916666666666670,
-                               0.2916666666666670,
-                               0.2916666666666670,
-                               0.2708333333333330,
-                               0.2500000000000000,
-                               0.2500000000000000,
-                               0.2500000000000000,
-                               0.2500000000000000,
-                               0.2500000000000000,
-                               0.2340425531914890,
-                               0.2340425531914890,
-                               0.2173913043478260,
-                               0.2173913043478260,
-                               0.1956521739130430,
-                               0.1956521739130430,
-                               0.1956521739130430,
-                               0.1956521739130430,
-                               0.2173913043478260,
-                               0.2173913043478260,
-                               0.2000000000000000,
-                               0.2000000000000000,
-                               0.2173913043478260,
-                               0.2173913043478260,
-                               0.1956521739130430,
-                               0.1956521739130430,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2291666666666670,
-                               0.2244897959183670,
-                               0.2083333333333330,
-                               0.1914893617021280,
-                               0.1914893617021280,
-                               0.1875000000000000,
-                               0.1914893617021280,
-                               0.1914893617021280,
-                               0.1914893617021280,
-                               0.1914893617021280,
-                               0.1914893617021280,
-                               0.1739130434782610,
-                               0.1702127659574470,
-                               0.1666666666666670,
-                               0.1666666666666670,
-                               0.1666666666666670,
-                               0.1666666666666670,
-                               0.1836734693877550,
-                               0.1875000000000000,
-                               0.1914893617021280,
-                               0.1914893617021280,
-                               0.1739130434782610,
-                               0.1739130434782610,
-                               0.1739130434782610,
-                               0.1739130434782610,
-                               0.1739130434782610,
-                               0.1739130434782610,
-                               0.1739130434782610,
-                               0.1739130434782610,
-                               0.1739130434782610,
-                               0.1739130434782610,
-                               0.1777777777777780,
-                               0.1702127659574470,
-                               0.1702127659574470,
-                               0.1702127659574470,
-                               0.1702127659574470,
-                               0.1702127659574470,
-                               0.1875000000000000,
-                               0.1875000000000000,
-                               0.1875000000000000,
-                               0.1875000000000000,
-                               0.1875000000000000,
-                               0.1875000000000000,
-                               0.1875000000000000,
-                               0.1875000000000000,
-                               0.1836734693877550,
-                               0.1836734693877550,
-                               0.1666666666666670,
-                               0.1666666666666670,
-                               0.1666666666666670,
-                               0.1458333333333330,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1428571428571430,
-                               0.1458333333333330,
-                               0.1458333333333330,
-                               0.1458333333333330,
-                               0.1276595744680850,
-                               0.1276595744680850,
-                               0.1276595744680850,
-                               0.1276595744680850,
-                               0.1276595744680850,
-                               0.1276595744680850,
-                               0.1276595744680850,
-                               0.1276595744680850,
-                               0.1276595744680850,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1224489795918370,
-                               0.1224489795918370,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1250000000000000,
-                               0.1224489795918370,
-                               0.1224489795918370,
-                               0.1224489795918370,
-                               0.1224489795918370,
-                               0.1224489795918370,
-                               0.1224489795918370,
-                               0.1041666666666670,
-                               0.1041666666666670,
-                               0.1041666666666670,
-                               0.1041666666666670,
-                               0.1041666666666670,
-                               0.1020408163265310,
-                               0.1020408163265310,
-                               0.1020408163265310,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1020408163265310,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0800000000000000,
-                               0.0800000000000000,
-                               0.0800000000000000,
-                               0.0800000000000000,
-                               0.0800000000000000,
-                               0.0800000000000000,
-                               0.0800000000000000,
-                               0.0800000000000000,
-                               0.0800000000000000,
-                               0.0800000000000000,
-                               0.0800000000000000,
-                               0.0800000000000000,
-                               0.0800000000000000,
-                               0.0800000000000000,
-                               0.0800000000000000,
-                               0.0816326530612245,
-                               0.1000000000000000,
-                               0.1000000000000000,
-                               0.0980392156862745,
-                               0.0980392156862745,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.0961538461538462,
-                               0.0943396226415094,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0909090909090909,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0925925925925926,
-                               0.0909090909090909,
-                               0.0740740740740741,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0727272727272727,
-                               0.0714285714285714,
-                               0.0545454545454545,
-                               0.0545454545454545,
-                               0.0535714285714286,
-                               0.0535714285714286,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0363636363636364,
-                               0.0357142857142857,
-                               0.0357142857142857,
-                               0.0357142857142857,
-                               0.0357142857142857,
-                               0.0357142857142857,
-                               0.0357142857142857,
-                               0.0357142857142857,
-                               0.0357142857142857,
-                               0.0357142857142857,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0350877192982456,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0344827586206897,
-                               0.0175438596491228,
-                               0.0175438596491228,
-                               0.0175438596491228
-                       }
-               }
-       };
-
-}      /* namespace prob_features */
-
-}      /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_FEATURES_MODEL_H_ */
diff --git a/src/place/recognition/user_places/similarity.h b/src/place/recognition/user_places/similarity.h
deleted file mode 100644 (file)
index 5938ef5..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_SIMILAR_H_
-#define _CONTEXT_PLACE_RECOGNITION_SIMILAR_H_
-
-#include "user_places_types.h"
-
-namespace ctx {
-
-namespace similarity {
-
-       template <class T> ctx::share_t overlap1stOver2nd(const T &s1, const T &s2)
-       {
-               if (s2.empty()) {
-                       return 0;
-               }
-               int count = 0;
-               for (auto e : s2) {
-                       if (s1.find(e) != s1.end()) {
-                               count++;
-                       }
-               }
-               return (ctx::share_t) count / s2.size();
-       }
-
-       template <class T> ctx::share_t overlapBiggerOverSmaller(const T &s1, const T &s2)
-       {
-               if (s1.size() > s2.size()) {
-                       return similarity::overlap1stOver2nd(s1, s2);
-               } else {
-                       return similarity::overlap1stOver2nd(s2, s1);
-               }
-       }
-
-       template <class T> bool isJoint(const T &s1, const T &s2)
-       {
-               for (auto e : s2) {
-                       if (s1.find(e) != s1.end()) {
-                               return true;
-                       }
-               }
-               return false;
-       }
-
-}      /* namespace similarity */
-
-}      /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_SIMILAR_H_ */
diff --git a/src/place/recognition/user_places/user_places.cpp b/src/place/recognition/user_places/user_places.cpp
deleted file mode 100644 (file)
index ca237ea..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <ctime>
-#include <memory>
-#include <Types.h>
-#include "user_places.h"
-#include "places_detector.h"
-#include "../place_recognition_types.h"
-
-ctx::UserPlaces::UserPlaces(PlaceRecogMode energyMode):
-       __visitDetector(nullptr),
-       __placesDetector(nullptr),
-       __placesDetectorTimerId(-1)
-{
-       time_t now = std::time(nullptr);
-       __visitDetector = new(std::nothrow) VisitDetector(now, energyMode);
-       if (__visitDetector == nullptr) {
-               _E("Cannot initialize __visitDetector");
-               return;
-       }
-
-       __placesDetector = new(std::nothrow) PlacesDetector();
-       if (__placesDetector == nullptr) {
-               _E("Cannot initialize __placesDetector");
-               return;
-       }
-
-       __placesDetectorTimerId = __timerManager.setAt( // execute once every night
-                       PLACES_DETECTOR_TASK_START_HOUR,
-                       PLACES_DETECTOR_TASK_START_MINUTE,
-                       DayOfWeek::EVERYDAY,
-                       __placesDetector);
-       if (__placesDetectorTimerId < 0) {
-               _E("PlacesDetector timer set FAIL");
-               return;
-       } else {
-               _D("PlacesDetector timer set SUCCESS");
-       }
-}
-
-ctx::UserPlaces::~UserPlaces()
-{
-       if (__placesDetectorTimerId >= 0) {
-               __timerManager.remove(__placesDetectorTimerId);
-               _D("PlacesDetector timer removed");
-       }
-
-       if (__visitDetector) {
-               delete __visitDetector;
-       }
-
-       if (__placesDetector) {
-               delete __placesDetector;
-       }
-};
-
-std::vector<std::shared_ptr<ctx::Place>> ctx::UserPlaces::getPlaces()
-{
-       if (__placesDetector) {
-               return __placesDetector->getPlaces();
-       } else {
-               return std::vector<std::shared_ptr<ctx::Place>>();
-       }
-}
-
-/*
- * Example JSON output:
- * ------------------------------------------------
- * {
- *       "PlacesList": [
- *             {
- *               "TypeId": 2,
- *               "Name": "Work",
- *               "GeoLatitude": 10.94433,
- *               "GeoLongitude": 50.85504,
- *               "WifiAPs": "00:1f:f3:5b:2b:1f,15:34:56:78:9a:ba,13:34:56:78:9a:ba",
- *               "CreateDate": 12132567
- *             },
- *             {
- *               "TypeId": 1,
- *               "Name": "Home",
- *               "GeoLatitude": 10.96233,
- *               "GeoLongitude": 50.84304,
- *               "WifiAPs": "aa:bb:cc:dd:ee:ff,10:34:56:78:9a:bc",
- *               "CreateDate": 12132889
- *             },
- *             {
- *               "TypeId": 3,
- *               "Name": "Other",
- *               "GeoLatitude": 10.96553,
- *               "GeoLongitude": 50.80404,
- *               "WifiAPs": "12:34:56:78:9a:ba",
- *               "CreateDate": 12132346
- *             }
- *       ]
- * }
- */
-ctx::Json ctx::UserPlaces::composeJson(std::vector<std::shared_ptr<Place>> places)
-{
-       ctx::Json data;
-       for (std::shared_ptr<ctx::Place> place : places) {
-               ctx::Json placeJson;
-               placeJson.set(NULL, PLACE_CATEG_ID, place->categId);
-               placeJson.set(NULL, PLACE_CATEG_CONFIDENCE, place->categConfidence);
-               placeJson.set(NULL, PLACE_NAME, place->name);
-               if (place->locationValid) {
-                       placeJson.set(NULL, PLACE_GEO_LATITUDE, place->location.latitude);
-                       placeJson.set(NULL, PLACE_GEO_LONGITUDE, place->location.longitude);
-               }
-               placeJson.set(NULL, PLACE_WIFI_APS, place->wifiAps);
-               placeJson.set(NULL, PLACE_CREATE_DATE, static_cast<int>(place->createDate));
-               data.append(NULL, DATA_READ, placeJson);
-       }
-       return data;
-}
-
-void ctx::UserPlaces::setMode(PlaceRecogMode energyMode)
-{
-       if (__visitDetector) {
-               __visitDetector->setMode(energyMode);
-       }
-}
diff --git a/src/place/recognition/user_places/user_places.h b/src/place/recognition/user_places/user_places.h
deleted file mode 100644 (file)
index 1df6388..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_USER_PLACES_H_
-#define _CONTEXT_PLACE_RECOGNITION_USER_PLACES_H_
-
-#include <vector>
-#include <Json.h>
-#include <TimerManager.h>
-#include "visit_detector.h"
-#include "places_detector.h"
-#include "user_places_types.h"
-
-namespace ctx {
-
-       class UserPlaces {
-
-       private:
-               VisitDetector *__visitDetector;
-               PlacesDetector *__placesDetector;
-               int __placesDetectorTimerId;
-               TimerManager __timerManager;
-
-       public:
-               UserPlaces(PlaceRecogMode energyMode = PLACE_RECOG_HIGH_ACCURACY_MODE);
-               ~UserPlaces();
-
-               void setMode(PlaceRecogMode energyMode);
-               std::vector<std::shared_ptr<Place>> getPlaces();
-               static Json composeJson(std::vector<std::shared_ptr<Place>> places);
-
-       };      /* class UserPlaces */
-
-}      /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_USER_PLACES_H_ */
diff --git a/src/place/recognition/user_places/user_places_params.h b/src/place/recognition/user_places/user_places_params.h
deleted file mode 100644 (file)
index ec70a29..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_USER_PLACES_PARAMS_H_
-#define _CONTEXT_PLACE_RECOGNITION_USER_PLACES_PARAMS_H_
-
-/*
- * WiFi scanning frequency (in minutes) in PLACE_RECOG_HIGH_ACCURACY_MODE.
- */
-#define WIFI_LOGGER_INTERVAL_MINUTES_HIGH_ACCURACY 3
-
-/*
- * WiFi scanning frequency (in minutes) in PLACE_RECOG_LOW_POWER_MODE.
- */
-#define WIFI_LOGGER_INTERVAL_MINUTES_LOW_POWER 60
-
-/*
- * Time window taken into consideration (in seconds) in PLACE_RECOG_HIGH_ACCURACY_MODE.
- */
-#define VISIT_DETECTOR_PERIOD_SECONDS_HIGH_ACCURACY 360
-
-/*
- * Time window taken into consideration (in seconds) in PLACE_RECOG_LOW_POWER_MODE.
- */
-#define VISIT_DETECTOR_PERIOD_SECONDS_LOW_POWER 3600
-
-/*
- * Overlap threshold between two sets of mac addresses (overlap
- * coefficient for two sets should be higher than this threshold
- * in order to detect stable radio environment); =< 1.0
- * New parameter in algorithm compared to original version of PlaceSense!
- */
-#define VISIT_DETECTOR_OVERLAP 0.8f
-
-/*
- * Specifies how many stable intervals must be seen to
- * indicate an entrance to a place; >= 1
- */
-#define VISIT_DETECTOR_STABLE_DEPTH 1
-
-/*
- * Representatives threshold (representatnive beacon
- * response rate should be higher than this threshold); =< 1.0
- */
-#define VISIT_DETECTOR_REP_THRESHOLD 0.9f
-
-/*
- * Specifies how long scans must be unstable to indicate a leave form a place; >= 1
- */
-#define VISIT_DETECTOR_TOLERANCE_DEPTH 3
-
-#define PLACES_DETECTOR_TASK_START_HOUR 3
-#define PLACES_DETECTOR_TASK_START_MINUTE 11
-#define PLACES_DETECTOR_RETENTION_DAYS 30
-#define PLACES_DETECTOR_RETENTION_SECONDS 24 * 60 * 60 * PLACES_DETECTOR_RETENTION_DAYS
-
-/*
- * Number of digits after decimal point used in geo coordinates.
- */
-#define GEO_LOCATION_PRECISION 7
-
-/*
- * Minimal duration of visit (in minutes) taking into account for place detection
- */
-#define PLACES_DETECTOR_MIN_VISIT_DURATION_MINUTES 15
-
-/*
- * Maximum duration of visit (in minutes) taking into account for place detection
- */
-#define PLACES_DETECTOR_MAX_VISIT_DURATION_MINUTES 5 * 24 * 60
-
-/*
- * Minimum visits number per place
- */
-#define PLACES_DETECTOR_MIN_VISITS_PER_PLACE 1
-
-/*
- * Minimum visits number per big place
- */
-#define PLACES_DETECTOR_MIN_VISITS_PER_BIG_PLACE 4
-
-/*
- * Minimal visit category score for taking this visit into consideration during
- * place categorization
- */
-#define PLACES_CATEGER_MIN_VISITS_SCORE 0.1
-
-/*
- * Minimum visits number per home
- */
-#define PLACES_CATEGER_MIN_VISITS_PER_HOME 3
-
-/*
- * Minimum visits number per work
- */
-#define PLACES_CATEGER_MIN_VISITS_PER_WORK 2
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_USER_PLACES_PARAMS_H_ */
diff --git a/src/place/recognition/user_places/user_places_types.cpp b/src/place/recognition/user_places/user_places_types.cpp
deleted file mode 100644 (file)
index 14b1355..0000000
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <set>
-#include <iostream>
-#include <iomanip>
-#include <sstream>
-#include <algorithm>
-#include <Types.h>
-#include "user_places_types.h"
-#include "user_places_params.h"
-#include "debug_utils.h"
-
-#define __MAC_STRING_COMPONENTS_SEPARATOR ':'
-#define __MAC_SET_STRING_DELIMITER ','
-
-ctx::Mac::Mac(const std::string& str)
-{
-       std::stringstream ss(str);
-       try {
-               ss >> *this;
-       } catch (std::runtime_error &e) {
-               _E("%s", e.what());
-       }
-}
-
-ctx::Mac::Mac(const char *str)
-{
-       std::stringstream ss(str);
-       try {
-               ss >> *this;
-       } catch (std::runtime_error &e) {
-               _E("%s", e.what());
-       }
-}
-
-std::istream& ctx::operator>>(std::istream &input, ctx::Mac &mac)
-{
-       int h;
-       char colon;
-       for (size_t i = 0; i < ctx::Mac::MAC_SIZE; i++) {
-               input >> std::hex;
-               input >> h;
-               mac.c[i] = h;
-               if (i + 1 >= ctx::Mac::MAC_SIZE) {
-                       break;
-               }
-               input >> colon;
-               if (colon != __MAC_STRING_COMPONENTS_SEPARATOR) {
-                       throw std::runtime_error("Invalid MAC format");
-               }
-       }
-       input >> std::dec;
-       return input;
-}
-
-std::ostream& ctx::operator<<(std::ostream &output, const ctx::Mac &mac)
-{
-       size_t i = 0;
-       while (true) {
-               output << std::hex << std::setfill('0') << std::setw(2);
-               output << static_cast<int>(mac.c[i]);
-               i++;
-               if (i >= Mac::MAC_SIZE) {
-                       break;
-               }
-               output << __MAC_STRING_COMPONENTS_SEPARATOR;
-       }
-       output << std::dec;
-       return output;
-}
-
-ctx::Mac::operator std::string() const
-{
-       std::stringstream ss;
-       ss << *this;
-       return ss.str();
-}
-
-bool ctx::operator==(const Mac &m1, const Mac &m2)
-{
-       for (size_t i = 0; i < Mac::MAC_SIZE; i++) {
-               if (m1.c[i] != m2.c[i]) {
-                       return false;
-               }
-       }
-       return true;
-}
-
-bool ctx::operator!=(const Mac &m1, const Mac &m2)
-{
-       return !(m1 == m2);
-}
-
-bool ctx::operator<(const Mac &m1, const Mac &m2)
-{
-       unsigned char c1, c2;
-       for (size_t i = 0; i < Mac::MAC_SIZE; i++) {
-               c1 = m1.c[i];
-               c2 = m2.c[i];
-               if (c1 < c2) {
-                       return true;
-               }
-               if (c1 > c2) {
-                       return false;
-               }
-       }
-       return false; // they are equal
-}
-
-std::istream& ctx::operator>>(std::istream &input, ctx::MacSet &macSet)
-{
-       Mac mac;
-       char delimeter;
-       while (!input.eof()) {
-               try {
-                       input >> mac;
-               } catch (std::runtime_error &e) {
-                       _E("Cannot read macSet. Exception: %s", e.what());
-                       break;
-               }
-               macSet.insert(mac);
-               if (input.eof()) {
-                       break;
-               }
-               delimeter = input.get();
-               if (delimeter != __MAC_SET_STRING_DELIMITER) {
-                       input.unget();
-                       break;
-               }
-       }
-       return input;
-}
-
-std::ostream& ctx::operator<<(std::ostream &output, const ctx::MacSet &macSet)
-{
-       std::vector<Mac> macVec(macSet.size());
-       std::copy(macSet.begin(), macSet.end(), macVec.begin());
-       std::sort(macVec.begin(), macVec.end());
-
-       bool first = true;
-       for (auto &mac: macVec) {
-               if (first) {
-                       first = false;
-               } else {
-                       output << __MAC_SET_STRING_DELIMITER;
-               }
-               output << mac;
-       }
-       return output;
-}
-
-void ctx::LocationEvent::log()
-{
-       std::string time_str = DebugUtils::humanReadableDateTime(timestamp, "%T", 9);
-#ifdef TIZEN_ENGINEER_MODE
-       _D("location lat=%.8f, lon=%.8f, acc=%.2f[m], time=%s, method=%d",
-                       coordinates.latitude,
-                       coordinates.longitude,
-                       coordinates.accuracy,
-                       time_str.c_str(),
-                       method);
-#else /* TIZEN_ENGINEER_MODE */
-       _D("location lat=%.8f, lon=%.8f, acc=%.2f[m], time=%s",
-                       coordinates.latitude,
-                       coordinates.longitude,
-                       coordinates.accuracy,
-                       time_str.c_str());
-#endif /* TIZEN_ENGINEER_MODE */
-}
-
-void ctx::Visit::setLocation(Location location_)
-{
-       locationValid = true;
-       location = location_;
-}
-
-void ctx::Visit::printShort2Stream(std::ostream &out) const
-{
-       // print only valid visits
-       if (interval.end != 0) {
-               float duration = ((float) (interval.end - interval.start)) / 3600; // [h]
-               out << "__VISIT " << duration << "h: ";
-                       out << DebugUtils::humanReadableDateTime(interval.start, "%m/%d %H:%M", 15) << " Ã· ";
-                       out << DebugUtils::humanReadableDateTime(interval.end, "%m/%d %H:%M", 15) << std::endl;
-       }
-}
-
-bool ctx::operator==(const ctx::Visit &v1, const ctx::Visit &v2)
-{
-       return v1.interval.start == v2.interval.start
-                       && v1.interval.end == v2.interval.end
-                       && v1.categs == v2.categs
-                       && v1.location.latitude == v2.location.latitude
-                       && v1.location.longitude == v2.location.longitude
-                       && v1.location.accuracy == v2.location.accuracy
-                       && v1.locationValid == v2.locationValid
-                       && v1.macSet == v2.macSet;
-}
-
-ctx::MacSet ctx::macSetFromString(const std::string &str)
-{
-       MacSet macSet;
-       std::stringstream ss;
-       ss << str;
-       ss >> macSet;
-       return macSet;
-}
-
-bool ctx::operator>(const Mac &m1, const Mac &m2)
-{
-       return m2 < m1;
-}
-
-std::shared_ptr<ctx::MacSet> ctx::macSetFromMacs2Counts(const Macs2Counts &macs2Counts)
-{
-       std::shared_ptr<MacSet> macSet(std::make_shared<MacSet>());
-       for (auto &macCount: macs2Counts) {
-               macSet->insert(macCount.first);
-       }
-       return macSet;
-}
-
-std::shared_ptr<ctx::MacSet> ctx::macSetsUnion(const std::vector<std::shared_ptr<MacSet>> &macSets)
-{
-       std::shared_ptr<MacSet> unionSet = std::make_shared<MacSet>();
-       for (std::shared_ptr<MacSet> macSet : macSets) {
-               unionSet->insert(macSet->begin(), macSet->end());
-       }
-       return unionSet;
-}
-
-ctx::Interval::Interval(time_t start_, time_t end_) : start(start_), end(end_) {
-       if (end_ < start_) {
-               _E("Negative interval, start=%d, end=%d", start_, end_);
-       }
-}
-
-void ctx::Place::print2Stream(std::ostream &out) const
-{
-       out << "PLACE:" << std::endl;
-       out << "__CATEGORY: " << name << std::endl;
-       if (locationValid) {
-               out << "__LOCATION: lat=" << std::setprecision(GEO_LOCATION_PRECISION + 2) << location.latitude;
-               out << ", lon=" << location.longitude << std::setprecision(5) << std::endl;
-       }
-       out << "__WIFI:" << wifiAps << std::endl;
-       out << "__CREATE_DATE: " << DebugUtils::humanReadableDateTime(createDate, "%F %T", 80) << std::endl;
-}
diff --git a/src/place/recognition/user_places/user_places_types.h b/src/place/recognition/user_places/user_places_types.h
deleted file mode 100644 (file)
index cdf7be4..0000000
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_USER_PLACES_TYPES_H_
-#define _CONTEXT_PLACE_RECOGNITION_USER_PLACES_TYPES_H_
-
-#include <memory>
-#include <vector>
-#include <map>
-#include <unordered_map>
-#include <unordered_set>
-#include "graph.h"
-#include "../place_recognition_types.h"
-#include <string>
-#include <ctime>
-
-namespace ctx {
-
-       /*
-        * type for numerical computations
-        */
-       typedef double num_t;
-
-       /*
-        * mac address
-        */
-       class Mac {
-
-       public:
-               const static size_t MAC_SIZE = 6;  // number of bytes for mac address.
-               unsigned char c[MAC_SIZE];
-
-               Mac() {};
-               Mac(const std::string &str);
-               Mac(const char *str);
-               operator std::string() const;
-
-       };      /* class Mac */
-
-       std::istream &operator>>(std::istream &input, ctx::Mac &mac);
-       std::ostream &operator<<(std::ostream &output, const ctx::Mac &mac);
-       bool operator==(const ctx::Mac &m1, const ctx::Mac &m2);
-       bool operator!=(const ctx::Mac &m1, const ctx::Mac &m2);
-       bool operator<(const ctx::Mac &m1, const ctx::Mac &m2);
-       bool operator>(const ctx::Mac &m1, const ctx::Mac &m2);
-
-}      /* namespace ctx */
-
-namespace std {
-
-       template <> struct hash<ctx::Mac> {
-               size_t operator()(const ctx::Mac & m) const {
-                       size_t h = 1;
-                       for (size_t i = 0; i < ctx::Mac::MAC_SIZE; i++) {
-                               h = h * 37 + m.c[i];
-                       }
-                       return h;
-               }
-       };
-
-}      /* namespace std */
-
-namespace ctx {
-
-       typedef float share_t;
-       typedef int count_t;
-
-       typedef std::unordered_map<ctx::Mac, ctx::count_t> Macs2Counts;
-       typedef std::unordered_map<ctx::Mac, ctx::share_t> Macs2Shares;
-
-       typedef std::unordered_set<ctx::Mac> MacSet;
-
-       std::istream &operator>>(std::istream &input, ctx::MacSet &macSet);
-       std::ostream &operator<<(std::ostream &output, const ctx::MacSet &macSet);
-       ctx::MacSet macSetFromString(const std::string &str);
-
-       std::shared_ptr<MacSet> macSetsUnion(const std::vector<std::shared_ptr<MacSet>> &macSets);
-
-       struct Interval {
-               time_t start;
-               time_t end;
-
-               Interval(time_t start, time_t end);
-       };
-
-}      /* namespace ctx */
-
-namespace std {
-
-       template <> struct hash<ctx::Interval> {
-               size_t operator()(const ctx::Interval & interval) const {
-                       return interval.end * interval.start;
-               }
-       };
-
-}      /* namespace std */
-
-namespace ctx {
-
-       /*
-        * fully describes interval data after the interval is finished
-        */
-       struct Frame {
-               Interval interval;
-               count_t numberOfTimestamps;
-               Macs2Counts macs2Counts;
-
-               Frame(Interval interval_) : interval(interval_), numberOfTimestamps(0) {};
-       };
-
-       /*
-        * mac address + its timestamp
-        */
-       struct MacEvent {
-               time_t timestamp;
-               Mac mac;
-
-               MacEvent(time_t timestamp_, Mac mac_) : timestamp(timestamp_), mac(mac_) {}
-       };
-
-       typedef std::map<int, num_t> Categs; // scores of categories
-
-       struct Location {
-               double latitude;
-               double longitude;
-               double accuracy; // [m]
-
-               Location(double latitude_ = 0.0, double longitude_ = 0.0, double accuracy_ = -1.0)
-                       : latitude(latitude_), longitude(longitude_), accuracy(accuracy_) {}
-
-       };      /* struct Location */
-
-#ifdef TIZEN_ENGINEER_MODE
-       enum LocationSource {
-               LOCATION_METHOD_REQUEST = 0,
-               LOCATION_METHOD_GET_LOCATION = 1,
-               LOCATION_METHOD_GET_LAST_LOCATION = 2
-       };
-#endif /* TIZEN_ENGINEER_MODE */
-
-       /*
-        * location + timestamp + method
-        */
-       struct LocationEvent {
-               Location coordinates;
-               time_t timestamp;
-
-#ifdef TIZEN_ENGINEER_MODE
-               LocationSource method;
-
-               LocationEvent(double latitude_, double longitude_, double accuracy_, time_t timestamp_, LocationSource method_) :
-                       coordinates(latitude_, longitude_, accuracy_),
-                       timestamp(timestamp_), method(method_) {}
-#else /* TIZEN_ENGINEER_MODE */
-               LocationEvent(double latitude_, double longitude_, double accuracy_, time_t timestamp_) :
-                       coordinates(latitude_, longitude_, accuracy_),
-                       timestamp(timestamp_) {}
-#endif /* TIZEN_ENGINEER_MODE */
-
-               void log();
-
-       };      /* struct LocationEvent */
-
-       struct Visit {
-               Interval interval;
-               std::shared_ptr<MacSet> macSet;
-               Categs categs;
-               bool locationValid;
-               Location location; // makes sense if locationValid == true;
-
-               Visit(Interval interval_, std::shared_ptr<MacSet> macSet_ = std::make_shared<MacSet>(), Categs categs_ = Categs()) :
-                       interval(interval_),
-                       macSet(macSet_),
-                       categs(categs_),
-                       locationValid(false) {}
-               void setLocation(Location location);
-               void printShort2Stream(std::ostream &out) const;
-
-       };      /* struct Visit */
-
-       bool operator==(const Visit &v1, const Visit &v2);
-       typedef std::vector<Visit> Visits;
-       typedef std::vector<MacEvent> MacEvents; // used to store current interval logs
-
-       std::shared_ptr<MacSet> macSetFromMacs2Counts(const Macs2Counts &macs2Counts);
-
-       typedef float confidence_t;
-
-       class Place {
-
-       public:
-               PlaceCategId categId; // category of a place (work/home/other)
-               confidence_t categConfidence; // confidence of the above category - between [0,1]
-               std::string name; // for now: "work"/"home"/"other"
-               bool locationValid;
-               Location location; // makes sense if locationValid == true;
-               std::string wifiAps; // WiFi APs MAC addresses separated by ","
-               time_t createDate; // The last update time of this place
-
-               void print2Stream(std::ostream &out) const;
-
-       };      /* class Place */
-
-}      /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_USER_PLACES_TYPES_H_ */
diff --git a/src/place/recognition/user_places/visit_categer.cpp b/src/place/recognition/user_places/visit_categer.cpp
deleted file mode 100644 (file)
index 1d4c0c6..0000000
+++ /dev/null
@@ -1,422 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "visit_categer.h"
-#include "mahal.h"
-#include <time.h>
-#include "../place_recognition_types.h"
-#include "prob_features_model.h"
-#include <Types.h>
-
-// categorizer model parameters trained offline (implemented in python):
-const std::map<int, ctx::MahalModel> ctx::VisitCateger::__models({
-{
-       PLACE_CATEG_ID_HOME,
-       ctx::MahalModel(
-       {
-               0.588408417316, 0.475154840361, -0.564085141865, 0.077711893790, 0.782630398597, -0.650926403250, -0.101943950378
-       },
-       {
-               0.797977863370, -0.133179879257, 0.242803062646, -0.059448581046, -0.117039646748, 0.097645535057, 0.014250290052,
-               -0.133179879257, 1.028900241400, -0.252245407243, 0.058455883835, -0.283950879851, 0.172204076583, 0.247906065767,
-               0.242803062646, -0.252245407243, 1.832134785177, 0.327188225606, 0.874905851092, -0.371088938012, -1.289816938938,
-               -0.059448581046, 0.058455883835, 0.327188225606, 1.455090164348, 0.138363721074, 0.216985279422, -1.113021128017,
-               -0.117039646748, -0.283950879851, 0.874905851092, 0.138363721074, 1.379674755873, -0.977922749615, -0.738895486376,
-               0.097645535057, 0.172204076583, -0.371088938012, 0.216985279422, -0.977922749615, 0.899928922718, -0.158101631251,
-               0.014250290052, 0.247906065767, -1.289816938938, -1.113021128017, -0.738895486376, -0.158101631251, 2.644105309746
-       })
-},
-{
-       PLACE_CATEG_ID_WORK,
-       ctx::MahalModel(
-       {
-               -0.128092670982, -0.762177819157, 0.262924477521, -0.412038966097, -1.049141893517, 1.104760800499, -0.628939955525
-       },
-       {
-               15.751249839350, 11.389025401325, -9.885346240379, -0.010809392387, -1.308837060762, 0.970778241189, 0.558946631235,
-               11.389025401325, 12.830223040140, -8.517695939156, 0.293693134532, -0.845784968295, 1.418175236596, -2.246658259974,
-               -9.885346240379, -8.517695939156, 10.222750966685, 0.390448668966, 1.095218945062, -0.403733435617, -1.815103304859,
-               -0.010809392387, 0.293693134532, 0.390448668966, 2.256864603458, 0.632080300647, -0.019551779384, -1.751417951792,
-               -1.308837060762, -0.845784968295, 1.095218945062, 0.632080300647, 3.132753467561, -1.427748733399, -4.291958669471,
-               0.970778241189, 1.418175236596, -0.403733435617, -0.019551779384, -1.427748733399, 1.183055586213, 0.200571452172,
-               0.558946631235, -2.246658259974, -1.815103304859, -1.751417951792, -4.291958669471, 0.200571452172, 11.668888615934
-       })
-},
-{
-       PLACE_CATEG_ID_OTHER,
-       ctx::MahalModel(
-       {
-               -0.542340098504, 0.184789511765, 0.387451546413, 0.301902661472, 0.109392397093, -0.310468874039, 0.709513920221
-       },
-       {
-               2.153884992301, -0.129488409324, 0.136236052776, -0.138043678532, -0.227492557156, 0.117810812390, 0.265072329266,
-               -0.129488409324, 3.165213522741, -1.751520714507, 0.467831090302, -0.483916138161, 0.376293684450, 0.149387541935,
-               0.136236052776, -1.751520714507, 2.483475248800, 0.384085303028, 0.338642175318, -0.052000492068, -0.801404345627,
-               -0.138043678532, 0.467831090302, 0.384085303028, 1.972390458477, -0.025332052563, 0.393845805027, -1.225948397955,
-               -0.227492557156, -0.483916138161, 0.338642175318, -0.025332052563, 0.890301343360, -0.549163112351, -0.746838701215,
-               0.117810812390, 0.376293684450, -0.052000492068, 0.393845805027, -0.549163112351, 0.474674836872, 0.012417969474,
-               0.265072329266, 0.149387541935, -0.801404345627, -1.225948397955, -0.746838701215, 0.012417969474, 2.104629121515
-       })
-}});
-
-ctx::PiecewiseLin ctx::VisitCateger::__chiApprox(
-{
-       0.  ,  0.01,  0.02,  0.03,  0.04,  0.05,  0.06,  0.07,  0.08,
-       0.09,  0.1 ,  0.11,  0.12,  0.13,  0.14,  0.15,  0.16,  0.17,
-       0.18,  0.19,  0.2 ,  0.21,  0.22,  0.23,  0.24,  0.25,  0.26,
-       0.27,  0.28,  0.29,  0.3 ,  0.31,  0.32,  0.33,  0.34,  0.35,
-       0.36,  0.37,  0.38,  0.39,  0.4 ,  0.41,  0.42,  0.43,  0.44,
-       0.45,  0.46,  0.47,  0.48,  0.49,  0.5 ,  0.51,  0.52,  0.53,
-       0.54,  0.55,  0.56,  0.57,  0.58,  0.59,  0.6 ,  0.61,  0.62,
-       0.63,  0.64,  0.65,  0.66,  0.67,  0.68,  0.69,  0.7 ,  0.71,
-       0.72,  0.73,  0.74,  0.75,  0.76,  0.77,  0.78,  0.79,  0.8 ,
-       0.81,  0.82,  0.83,  0.84,  0.85,  0.86,  0.87,  0.88,  0.89,
-       0.9 ,  0.91,  0.92,  0.93,  0.94,  0.95,  0.96,  0.97,  0.98,
-       0.99,  1.  ,  1.01,  1.02,  1.03,  1.04,  1.05,  1.06,  1.07,
-       1.08,  1.09,  1.1 ,  1.11,  1.12,  1.13,  1.14,  1.15,  1.16,
-       1.17,  1.18,  1.19,  1.2 ,  1.21,  1.22,  1.23,  1.24,  1.25,
-       1.26,  1.27,  1.28,  1.29,  1.3 ,  1.31,  1.32,  1.33,  1.34,
-       1.35,  1.36,  1.37,  1.38,  1.39,  1.4 ,  1.41,  1.42,  1.43,
-       1.44,  1.45,  1.46,  1.47,  1.48,  1.49,  1.5 ,  1.51,  1.52,
-       1.53,  1.54,  1.55,  1.56,  1.57,  1.58,  1.59,  1.6 ,  1.61,
-       1.62,  1.63,  1.64,  1.65,  1.66,  1.67,  1.68,  1.69,  1.7 ,
-       1.71,  1.72,  1.73,  1.74,  1.75,  1.76,  1.77,  1.78,  1.79,
-       1.8 ,  1.81,  1.82,  1.83,  1.84,  1.85,  1.86,  1.87,  1.88,
-       1.89,  1.9 ,  1.91,  1.92,  1.93,  1.94,  1.95,  1.96,  1.97,
-       1.98,  1.99,  2.  ,  2.01,  2.02,  2.03,  2.04,  2.05,  2.06,
-       2.07,  2.08,  2.09,  2.1 ,  2.11,  2.12,  2.13,  2.14,  2.15,
-       2.16,  2.17,  2.18,  2.19,  2.2 ,  2.21,  2.22,  2.23,  2.24,
-       2.25,  2.26,  2.27,  2.28,  2.29,  2.3 ,  2.31,  2.32,  2.33,
-       2.34,  2.35,  2.36,  2.37,  2.38,  2.39,  2.4 ,  2.41,  2.42,
-       2.43,  2.44,  2.45,  2.46,  2.47,  2.48,  2.49,  2.5 ,  2.51,
-       2.52,  2.53,  2.54,  2.55,  2.56,  2.57,  2.58,  2.59,  2.6 ,
-       2.61,  2.62,  2.63,  2.64,  2.65,  2.66,  2.67,  2.68,  2.69,
-       2.7 ,  2.71,  2.72,  2.73,  2.74,  2.75,  2.76,  2.77,  2.78,
-       2.79,  2.8 ,  2.81,  2.82,  2.83,  2.84,  2.85,  2.86,  2.87,
-       2.88,  2.89,  2.9 ,  2.91,  2.92,  2.93,  2.94,  2.95,  2.96,
-       2.97,  2.98,  2.99,  3.  ,  3.01,  3.02,  3.03,  3.04,  3.05,
-       3.06,  3.07,  3.08,  3.09,  3.1 ,  3.11,  3.12,  3.13,  3.14,
-       3.15,  3.16,  3.17,  3.18,  3.19,  3.2 ,  3.21,  3.22,  3.23,
-       3.24,  3.25,  3.26,  3.27,  3.28,  3.29,  3.3 ,  3.31,  3.32,
-       3.33,  3.34,  3.35,  3.36,  3.37,  3.38,  3.39,  3.4 ,  3.41,
-       3.42,  3.43,  3.44,  3.45,  3.46,  3.47,  3.48,  3.49,  3.5 ,
-       3.51,  3.52,  3.53,  3.54,  3.55,  3.56,  3.57,  3.58,  3.59,
-       3.6 ,  3.61,  3.62,  3.63,  3.64,  3.65,  3.66,  3.67,  3.68,
-       3.69,  3.7 ,  3.71,  3.72,  3.73,  3.74,  3.75,  3.76,  3.77,
-       3.78,  3.79,  3.8 ,  3.81,  3.82,  3.83,  3.84,  3.85,  3.86,
-       3.87,  3.88,  3.89,  3.9 ,  3.91,  3.92,  3.93,  3.94,  3.95,
-       3.96,  3.97,  3.98,  3.99,  4.  ,  4.01,  4.02,  4.03,  4.04,
-       4.05,  4.06,  4.07,  4.08,  4.09,  4.1 ,  4.11,  4.12,  4.13,
-       4.14,  4.15,  4.16,  4.17,  4.18,  4.19,  4.2 ,  4.21,  4.22,
-       4.23,  4.24,  4.25,  4.26,  4.27,  4.28,  4.29,  4.3 ,  4.31,
-       4.32,  4.33,  4.34,  4.35,  4.36,  4.37,  4.38,  4.39,  4.4 ,
-       4.41,  4.42,  4.43,  4.44,  4.45,  4.46,  4.47,  4.48,  4.49,
-       4.5 ,  4.51,  4.52,  4.53,  4.54,  4.55,  4.56,  4.57,  4.58,
-       4.59,  4.6 ,  4.61,  4.62,  4.63,  4.64,  4.65,  4.66,  4.67,
-       4.68,  4.69,  4.7 ,  4.71,  4.72,  4.73,  4.74,  4.75,  4.76,
-       4.77,  4.78,  4.79,  4.8 ,  4.81,  4.82,  4.83,  4.84,  4.85,
-       4.86,  4.87,  4.88,  4.89,  4.9 ,  4.91,  4.92,  4.93,  4.94,
-       4.95,  4.96,  4.97,  4.98,  4.99,  5.  ,  5.01,  5.02,  5.03,
-       5.04,  5.05,  5.06,  5.07,  5.08,  5.09,  5.1 ,  5.11,  5.12,
-       5.13,  5.14,  5.15,  5.16,  5.17,  5.18,  5.19,  5.2 ,  5.21,
-       5.22,  5.23,  5.24,  5.25,  5.26,  5.27,  5.28,  5.29,  5.3 ,
-       5.31,  5.32,  5.33,  5.34,  5.35,  5.36,  5.37,  5.38,  5.39,
-       5.4 ,  5.41,  5.42,  5.43,  5.44,  5.45,  5.46,  5.47,  5.48,
-       5.49,  5.5 ,  5.51,  5.52,  5.53,  5.54,  5.55,  5.56,  5.57,
-       5.58,  5.59,  5.6 ,  5.61,  5.62,  5.63,  5.64,  5.65,  5.66,
-       5.67,  5.68,  5.69,  5.7 ,  5.71,  5.72,  5.73,  5.74,  5.75,
-       5.76,  5.77,  5.78,  5.79,  5.8 ,  5.81,  5.82,  5.83,  5.84,
-       5.85,  5.86,  5.87,  5.88,  5.89,  5.9 ,  5.91,  5.92,  5.93,
-       5.94,  5.95,  5.96,  5.97,  5.98,  5.99,  6.  ,  6.01,  6.02,
-       6.03,  6.04,  6.05,  6.06,  6.07,  6.08,  6.09,  6.1 ,  6.11,
-       6.12,  6.13,  6.14,  6.15,  6.16,  6.17,  6.18,  6.19,  6.2 ,
-       6.21,  6.22,  6.23,  6.24,  6.25,  6.26,  6.27,  6.28,  6.29,
-       6.3 ,  6.31,  6.32,  6.33,  6.34,  6.35,  6.36,  6.37,  6.38,
-       6.39,  6.4 ,  6.41,  6.42,  6.43,  6.44,  6.45,  6.46,  6.47,
-       6.48,  6.49,  6.5 ,  6.51,  6.52,  6.53,  6.54,  6.55,  6.56,
-       6.57,  6.58,  6.59,  6.6 ,  6.61,  6.62,  6.63,  6.64,  6.65,
-       6.66,  6.67,  6.68,  6.69,  6.7 ,  6.71,  6.72,  6.73,  6.74,
-       6.75,  6.76,  6.77,  6.78,  6.79,  6.8 ,  6.81,  6.82,  6.83,
-       6.84,  6.85,  6.86,  6.87,  6.88,  6.89,  6.9 ,  6.91,  6.92,
-       6.93,  6.94,  6.95,  6.96,  6.97,  6.98,  6.99,  7.
-},
-{
-       0.      ,  0.      ,  0.      ,  0.      ,  0.      ,  0.      ,
-       0.      ,  0.      ,  0.      ,  0.      ,  0.      ,  0.      ,
-       0.      ,  0.      ,  0.      ,  0.      ,  0.      ,  0.      ,
-       0.      ,  0.      ,  0.      ,  0.      ,  0.      ,  0.      ,
-       0.      ,  0.      ,  0.000001,  0.000001,  0.000001,  0.000001,
-       0.000002,  0.000002,  0.000003,  0.000003,  0.000004,  0.000005,
-       0.000006,  0.000007,  0.000008,  0.00001 ,  0.000012,  0.000014,
-       0.000016,  0.000019,  0.000023,  0.000026,  0.000031,  0.000035,
-       0.000041,  0.000047,  0.000054,  0.000062,  0.00007 ,  0.00008 ,
-       0.000091,  0.000103,  0.000116,  0.000131,  0.000147,  0.000165,
-       0.000185,  0.000207,  0.000231,  0.000257,  0.000285,  0.000316,
-       0.00035 ,  0.000387,  0.000427,  0.000471,  0.000518,  0.000569,
-       0.000624,  0.000683,  0.000747,  0.000816,  0.00089 ,  0.00097 ,
-       0.001055,  0.001147,  0.001245,  0.001349,  0.001461,  0.00158 ,
-       0.001708,  0.001843,  0.001987,  0.002141,  0.002303,  0.002476,
-       0.002659,  0.002854,  0.003059,  0.003276,  0.003506,  0.003748,
-       0.004004,  0.004274,  0.004558,  0.004857,  0.005171,  0.005502,
-       0.00585 ,  0.006215,  0.006597,  0.006999,  0.007419,  0.007859,
-       0.00832 ,  0.008802,  0.009305,  0.009831,  0.01038 ,  0.010953,
-       0.01155 ,  0.012172,  0.01282 ,  0.013495,  0.014197,  0.014927,
-       0.015686,  0.016473,  0.017291,  0.01814 ,  0.019021,  0.019933,
-       0.020879,  0.021858,  0.022872,  0.023921,  0.025006,  0.026127,
-       0.027285,  0.028482,  0.029717,  0.030992,  0.032306,  0.033662,
-       0.035059,  0.036497,  0.037979,  0.039504,  0.041073,  0.042687,
-       0.044345,  0.04605 ,  0.047801,  0.049599,  0.051445,  0.053339,
-       0.055282,  0.057273,  0.059315,  0.061406,  0.063548,  0.065742,
-       0.067986,  0.070283,  0.072632,  0.075034,  0.077488,  0.079996,
-       0.082558,  0.085174,  0.087843,  0.090568,  0.093346,  0.09618 ,
-       0.099069,  0.102013,  0.105012,  0.108066,  0.111176,  0.114342,
-       0.117563,  0.120839,  0.124171,  0.127558,  0.131001,  0.134499,
-       0.138052,  0.141659,  0.145322,  0.149039,  0.15281 ,  0.156635,
-       0.160514,  0.164446,  0.168431,  0.172469,  0.176559,  0.180701,
-       0.184894,  0.189138,  0.193432,  0.197776,  0.202169,  0.206611,
-       0.211101,  0.215639,  0.220223,  0.224853,  0.229528,  0.234248,
-       0.239012,  0.24382 ,  0.248669,  0.25356 ,  0.258492,  0.263464,
-       0.268474,  0.273523,  0.278608,  0.283731,  0.288888,  0.29408 ,
-       0.299305,  0.304562,  0.309851,  0.31517 ,  0.320519,  0.325895,
-       0.331299,  0.336729,  0.342185,  0.347664,  0.353166,  0.35869 ,
-       0.364234,  0.369798,  0.375381,  0.38098 ,  0.386596,  0.392227,
-       0.397871,  0.403529,  0.409197,  0.414876,  0.420565,  0.426261,
-       0.431964,  0.437673,  0.443387,  0.449103,  0.454822,  0.460543,
-       0.466263,  0.471981,  0.477698,  0.483411,  0.48912 ,  0.494822,
-       0.500518,  0.506206,  0.511886,  0.517554,  0.523212,  0.528858,
-       0.53449 ,  0.540108,  0.545711,  0.551297,  0.556866,  0.562417,
-       0.567948,  0.573459,  0.578949,  0.584417,  0.589861,  0.595282,
-       0.600677,  0.606048,  0.611391,  0.616707,  0.621995,  0.627254,
-       0.632483,  0.637681,  0.642848,  0.647984,  0.653086,  0.658155,
-       0.66319 ,  0.66819 ,  0.673155,  0.678084,  0.682976,  0.687831,
-       0.692649,  0.697428,  0.702168,  0.70687 ,  0.711531,  0.716153,
-       0.720733,  0.725273,  0.729772,  0.734228,  0.738643,  0.743015,
-       0.747344,  0.75163 ,  0.755873,  0.760072,  0.764227,  0.768339,
-       0.772406,  0.776428,  0.780406,  0.784339,  0.788228,  0.792071,
-       0.795869,  0.799622,  0.80333 ,  0.806992,  0.810609,  0.814181,
-       0.817707,  0.821188,  0.824624,  0.828015,  0.83136 ,  0.83466 ,
-       0.837916,  0.841126,  0.844292,  0.847413,  0.85049 ,  0.853522,
-       0.85651 ,  0.859455,  0.862355,  0.865212,  0.868026,  0.870796,
-       0.873524,  0.876209,  0.878852,  0.881452,  0.884011,  0.886528,
-       0.889005,  0.89144 ,  0.893834,  0.896189,  0.898503,  0.900778,
-       0.903014,  0.90521 ,  0.907369,  0.909488,  0.911571,  0.913615,
-       0.915623,  0.917594,  0.919528,  0.921427,  0.92329 ,  0.925118,
-       0.926911,  0.92867 ,  0.930395,  0.932086,  0.933745,  0.93537 ,
-       0.936963,  0.938525,  0.940055,  0.941554,  0.943022,  0.94446 ,
-       0.945869,  0.947248,  0.948598,  0.949919,  0.951213,  0.952478,
-       0.953717,  0.954928,  0.956113,  0.957273,  0.958406,  0.959514,
-       0.960598,  0.961657,  0.962692,  0.963703,  0.964692,  0.965657,
-       0.9666  ,  0.967521,  0.968421,  0.969299,  0.970156,  0.970993,
-       0.97181 ,  0.972607,  0.973385,  0.974144,  0.974884,  0.975605,
-       0.976309,  0.976996,  0.977665,  0.978317,  0.978953,  0.979572,
-       0.980176,  0.980764,  0.981337,  0.981895,  0.982438,  0.982967,
-       0.983482,  0.983984,  0.984472,  0.984947,  0.985409,  0.985858,
-       0.986296,  0.986721,  0.987135,  0.987537,  0.987929,  0.988309,
-       0.988678,  0.989038,  0.989387,  0.989726,  0.990056,  0.990376,
-       0.990687,  0.990989,  0.991282,  0.991566,  0.991843,  0.992111,
-       0.992371,  0.992624,  0.992869,  0.993106,  0.993337,  0.99356 ,
-       0.993777,  0.993988,  0.994191,  0.994389,  0.99458 ,  0.994766,
-       0.994946,  0.99512 ,  0.995289,  0.995452,  0.99561 ,  0.995764,
-       0.995912,  0.996056,  0.996195,  0.996329,  0.99646 ,  0.996586,
-       0.996708,  0.996825,  0.996939,  0.99705 ,  0.997156,  0.99726 ,
-       0.997359,  0.997456,  0.997549,  0.997639,  0.997726,  0.99781 ,
-       0.997891,  0.997969,  0.998045,  0.998118,  0.998189,  0.998257,
-       0.998323,  0.998386,  0.998447,  0.998506,  0.998563,  0.998618,
-       0.998671,  0.998723,  0.998772,  0.998819,  0.998865,  0.998909,
-       0.998952,  0.998993,  0.999033,  0.999071,  0.999107,  0.999143,
-       0.999177,  0.99921 ,  0.999241,  0.999272,  0.999301,  0.999329,
-       0.999356,  0.999382,  0.999407,  0.999431,  0.999455,  0.999477,
-       0.999498,  0.999519,  0.999539,  0.999558,  0.999576,  0.999594,
-       0.999611,  0.999627,  0.999643,  0.999658,  0.999672,  0.999686,
-       0.999699,  0.999712,  0.999724,  0.999736,  0.999747,  0.999758,
-       0.999769,  0.999779,  0.999788,  0.999797,  0.999806,  0.999815,
-       0.999823,  0.99983 ,  0.999838,  0.999845,  0.999852,  0.999858,
-       0.999865,  0.999871,  0.999876,  0.999882,  0.999887,  0.999892,
-       0.999897,  0.999902,  0.999906,  0.99991 ,  0.999915,  0.999918,
-       0.999922,  0.999926,  0.999929,  0.999932,  0.999936,  0.999938,
-       0.999941,  0.999944,  0.999947,  0.999949,  0.999952,  0.999954,
-       0.999956,  0.999958,  0.99996 ,  0.999962,  0.999964,  0.999965,
-       0.999967,  0.999969,  0.99997 ,  0.999972,  0.999973,  0.999974,
-       0.999975,  0.999977,  0.999978,  0.999979,  0.99998 ,  0.999981,
-       0.999982,  0.999983,  0.999984,  0.999984,  0.999985,  0.999986,
-       0.999987,  0.999987,  0.999988,  0.999988,  0.999989,  0.99999 ,
-       0.99999 ,  0.999991,  0.999991,  0.999992,  0.999992,  0.999992,
-       0.999993,  0.999993,  0.999993,  0.999994,  0.999994,  0.999994,
-       0.999995,  0.999995,  0.999995,  0.999995,  0.999996,  0.999996,
-       0.999996,  0.999996,  0.999997,  0.999997,  0.999997,  0.999997,
-       0.999997,  0.999997,  0.999998,  0.999998,  0.999998,  0.999998,
-       0.999998,  0.999998,  0.999998,  0.999998,  0.999998,  0.999998,
-       0.999999,  0.999999,  0.999999,  0.999999,  0.999999,  0.999999,
-       0.999999,  0.999999,  0.999999,  0.999999,  0.999999,  0.999999,
-       0.999999,  0.999999,  0.999999,  0.999999,  0.999999,  0.999999,
-       0.999999,  1.      ,  1.      ,  1.      ,  1.      ,  1.      ,
-       1.      ,  1.      ,  1.      ,  1.      ,  1.      ,  1.      ,
-       1.      ,  1.      ,  1.      ,  1.      ,  1.      ,  1.      ,
-       1.      ,  1.      ,  1.      ,  1.      ,  1.      ,  1.      ,
-       1.      ,  1.      ,  1.      ,  1.      ,  1.      ,  1.      ,
-       1.      ,  1.      ,  1.      ,  1.      ,  1.      ,  1.      ,
-       1.      ,  1.      ,  1.      ,  1.      ,  1.      ,  1.      ,
-       1.      ,  1.      ,  1.      ,  1.      ,  1.      ,  1.      ,
-       1.      ,  1.      ,  1.      ,  1.      ,  1.
-} // this is chi cdf for 7 degrees of freedom (because we have 7 features)
-);
-
-const std::vector<ctx::num_t> ctx::VisitCateger::__featuresMean(
-{
-       344.542975696503,
-       894.178423236515,
-       868.300533491405,
-       2.820391227030,
-       0.511747454052,
-       0.348669092762,
-       0.139583453187
-});
-
-const std::vector<ctx::num_t> ctx::VisitCateger::__featuresStd(
-{
-       416.061437196941,
-       301.401812101781,
-       300.774466281622,
-       1.916233112930,
-       0.314254748759,
-       0.360707461975,
-       0.109386661911
-});
-
-ctx::TimeFeatures ctx::VisitCateger::timeFeatures(const time_t &time)
-{
-       struct tm *timeinfo = localtime(&time);
-       if (timeinfo == NULL) {
-               return {0, 0, 0, false};
-       }
-       int minutesSinceMidnight = 60 * timeinfo->tm_hour + timeinfo->tm_min;
-       int weekday = (timeinfo->tm_wday + 6) % 7; // Monday is 0, Sunday is 6
-       bool weekend = weekday > 4;
-       int minutesSinceBeginingOfTheWeek = 24 * 60 * weekday + minutesSinceMidnight;
-       return {
-               minutesSinceMidnight,
-               minutesSinceBeginingOfTheWeek,
-               weekday,
-               weekend
-       };
-}
-
-int ctx::VisitCateger::weeksScope(const TimeFeatures &startF, const Interval &interval)
-{
-       int durationMinutes = (interval.end - interval.start) / 60;
-       int scopeMinutes = startF.minutesSinceBeginingOfTheWeek + durationMinutes;
-       int weeksScope = scopeMinutes / __MINUTES_IN_WEEK;
-       if (scopeMinutes % __MINUTES_IN_WEEK > 0) {
-               weeksScope++;
-       }
-       return weeksScope;
-}
-
-ctx::num_t ctx::VisitCateger::__sum(const std::vector<num_t> model, const size_t &from, const size_t &to)
-{
-       size_t toSecure = to;
-       if (to >= model.size()) {
-               _E("'to' exceeds model size");
-               toSecure = model.size() - 1;
-       }
-
-       if (from > to) {
-               _E("'from' greater than 'to'");
-       }
-
-       num_t result = 0.0;
-       for (size_t i = from; i <= toSecure; i++) {
-               result += model[i];
-       }
-
-       return result;
-}
-
-ctx::num_t ctx::VisitCateger::__weekModelMeanValue(PlaceCategId categ, const Interval &interval,
-               const TimeFeatures &startF, const TimeFeatures &endF)
-{
-       num_t ret = 0.0;
-       int minutes = 0;
-       int ws = weeksScope(startF, interval);
-       for (int week = 1; week <= ws; week++) {
-               size_t startIndex = (week == 1)
-                               ? startF.minutesSinceBeginingOfTheWeek
-                               : 0;
-               size_t endIndex = (week == ws)
-                               ? endF.minutesSinceBeginingOfTheWeek
-                               : __MINUTES_IN_WEEK - 1;
-               ret += __sum(prob_features::weekModel[categ], startIndex, endIndex);
-               minutes += endIndex - startIndex + 1;
-       }
-       if (minutes > 0) {
-               return ret / minutes;
-       }
-       return ret;
-}
-
-ctx::Categs ctx::VisitCateger::weekModelFeatures(const Interval &interval, const TimeFeatures &startF, const TimeFeatures &endF)
-{
-       ctx::Categs categs;
-       for (const auto &item : prob_features::weekModel) {
-               categs[item.first] = __weekModelMeanValue(item.first, interval, startF, endF);
-       }
-       _D("categs: H=%.12f, W=%.12f, O=%.12f",
-                       categs[PLACE_CATEG_ID_HOME],
-                       categs[PLACE_CATEG_ID_WORK],
-                       categs[PLACE_CATEG_ID_OTHER]);
-       return categs;
-}
-
-ctx::IntervalFeatures ctx::VisitCateger::intervalFeatures(const Interval &interval)
-{
-       num_t durationMinutes = 1.0 * (interval.end - interval.start) / 60;
-       TimeFeatures startFeatures = timeFeatures(interval.start);
-       TimeFeatures endFeatures = timeFeatures(interval.end);
-       Categs weekFeatures = weekModelFeatures(interval, startFeatures, endFeatures);
-       return {
-               durationMinutes,
-               (num_t) startFeatures.minutesSinceMidnight,
-               (num_t) endFeatures.minutesSinceMidnight,
-               (num_t) startFeatures.weekday,
-               weekFeatures[PLACE_CATEG_ID_HOME],
-               weekFeatures[PLACE_CATEG_ID_WORK],
-               weekFeatures[PLACE_CATEG_ID_OTHER]
-       };
-}
-
-void ctx::VisitCateger::__normalize(std::vector<ctx::num_t> &features)
-{
-       size_t n = features.size();
-       for (size_t i = 0; i < n; i++) {
-               features[i] -= __featuresMean[i];
-               features[i] /= __featuresStd[i];
-       }
-}
-
-void ctx::VisitCateger::categorize(ctx::Visit &visit)
-{
-       IntervalFeatures features = intervalFeatures(visit.interval);
-       __normalize(features);
-
-       for (auto &modelPair : __models) {
-               int categId = modelPair.first;
-               MahalModel model = modelPair.second;
-
-               num_t distance = model.distance(features);
-               num_t probability = 1 - __chiApprox.value(distance); // sth like probability but not exactly
-               visit.categs[categId] = probability;
-       }
-}
diff --git a/src/place/recognition/user_places/visit_categer.h b/src/place/recognition/user_places/visit_categer.h
deleted file mode 100644 (file)
index b9d4940..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_VISIT_CATEGER_H_
-#define _CONTEXT_PLACE_RECOGNITION_VISIT_CATEGER_H_
-
-#include "user_places_types.h"
-#include "mahal.h"
-#include "piecewise_lin.h"
-#include <map>
-
-namespace ctx {
-
-       struct TimeFeatures {
-           int minutesSinceMidnight;
-           int minutesSinceBeginingOfTheWeek;
-           int weekday;
-           bool weekend;
-       };
-
-       typedef std::vector<num_t> IntervalFeatures;
-
-       /*
-        * visit categorizer class
-        */
-       class VisitCateger {
-
-       private:
-               static const int __MINUTES_IN_WEEK = 60 * 24 * 7;
-               static const std::map<int, MahalModel> __models;
-               static const std::vector<num_t> __featuresMean;
-               static const std::vector<num_t> __featuresStd;
-               static num_t __sum(const std::vector<num_t> model, const size_t &from, const size_t &to);
-               static num_t __weekModelMeanValue(PlaceCategId categ, const Interval &interval,
-                               const TimeFeatures &startF, const TimeFeatures &endF);
-               static void __normalize(std::vector<num_t> &features);
-               static PiecewiseLin __chiApprox; // tabled chi function approximator
-
-       public:
-               /**
-                * Function interpret time in timestamp input argument,
-                *
-                * @param  time          timestamp
-                * @return TimeFeatures  structure with interpretations of timestamp
-                */
-               static TimeFeatures timeFeatures(const time_t &time);
-
-               static int weeksScope(const TimeFeatures &startF, const Interval &interval);
-
-               /**
-                * Function interpret time interval input argument and calculates scores
-                * that argument interval is home, work or other based on whole week model.
-                *
-                * @param  interval  time interval
-                * @param  startF        start time features
-                * @param  endF      end time features
-                * @return Categs    score that argument interval is home, work or other
-                */
-               static Categs weekModelFeatures(const Interval &interval, const TimeFeatures &startF,
-                               const TimeFeatures &endF);
-
-               /**
-                * Function interpret time interval input argument,
-                *
-                * @param  interval          time interval
-                * @return IntervalFeatures  vector with interpretations of input time interval
-                */
-               static IntervalFeatures intervalFeatures(const Interval &interval);
-
-               /**
-                * Function categorize visit based on visits time interval and fill its categories values.
-                */
-               static void categorize(ctx::Visit &visit);
-
-       };      /* class VisitCateger */
-
-}      /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_VISIT_CATEGER_H_ */
diff --git a/src/place/recognition/user_places/visit_detector.cpp b/src/place/recognition/user_places/visit_detector.cpp
deleted file mode 100644 (file)
index e0ba642..0000000
+++ /dev/null
@@ -1,444 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <set>
-#include <iostream>
-#include <iomanip>
-#include <sstream>
-#include <Types.h>
-#include <Json.h>
-#include "../place_recognition_types.h"
-#include "visit_detector.h"
-#include "user_places_params.h"
-#include "visit_categer.h"
-#include "similarity.h"
-#include "median.h"
-#include "debug_utils.h"
-
-#ifdef TIZEN_ENGINEER_MODE
-#define __VISIT_TABLE_COLUMNS \
-       VISIT_COLUMN_WIFI_APS " TEXT, "\
-       VISIT_COLUMN_START_TIME " timestamp, "\
-       VISIT_COLUMN_END_TIME " timestamp, "\
-       VISIT_COLUMN_START_TIME_HUMAN " TEXT, "\
-       VISIT_COLUMN_END_TIME_HUMAN " TEXT, "\
-       VISIT_COLUMN_LOCATION_VALID " INTEGER, "\
-       VISIT_COLUMN_LOCATION_LATITUDE " REAL, "\
-       VISIT_COLUMN_LOCATION_LONGITUDE " REAL, "\
-       VISIT_COLUMN_CATEG_HOME " REAL, "\
-       VISIT_COLUMN_CATEG_WORK " REAL, "\
-       VISIT_COLUMN_CATEG_OTHER " REAL"
-#else /* TIZEN_ENGINEER_MODE */
-#define __VISIT_TABLE_COLUMNS \
-       VISIT_COLUMN_WIFI_APS " TEXT, "\
-       VISIT_COLUMN_START_TIME " timestamp, "\
-       VISIT_COLUMN_END_TIME " timestamp, "\
-       VISIT_COLUMN_LOCATION_VALID " INTEGER, "\
-       VISIT_COLUMN_LOCATION_LATITUDE " REAL, "\
-       VISIT_COLUMN_LOCATION_LONGITUDE " REAL, "\
-       VISIT_COLUMN_CATEG_HOME " REAL, "\
-       VISIT_COLUMN_CATEG_WORK " REAL, "\
-       VISIT_COLUMN_CATEG_OTHER " REAL"
-#endif /* TIZEN_ENGINEER_MODE */
-
-ctx::VisitDetector::VisitDetector(time_t startScan, PlaceRecogMode energyMode, bool testMode) :
-       __testMode(testMode),
-       __locationLogger(this, testMode),
-       __wifiLogger(this, energyMode, testMode),
-       __currentInterval(startScan, startScan + VISIT_DETECTOR_PERIOD_SECONDS_HIGH_ACCURACY),
-       __stableCounter(0),
-       __tolerance(VISIT_DETECTOR_TOLERANCE_DEPTH),
-       __entranceToPlace(false),
-       __periodSeconds(VISIT_DETECTOR_PERIOD_SECONDS_HIGH_ACCURACY),
-       __entranceTime(0),
-       __departureTime(0)
-{
-       __setPeriod(energyMode);
-       __currentInterval = Interval(startScan, startScan + __periodSeconds);
-       __currentMacEvents = std::make_shared<MacEvents>();
-       __stayMacs = std::make_shared<MacSet>();
-
-       if (__testMode) {
-               __detectedVisits = std::make_shared<ctx::Visits>();
-               return;
-       }
-
-       __listeners.push_back(&__locationLogger);
-       __listeners.push_back(&__wifiLogger);
-       __dbCreateTable();
-       __wifiLogger.startLogging();
-}
-
-ctx::VisitDetector::~VisitDetector()
-{
-}
-
-bool ctx::VisitDetector::__isValid(const ctx::Mac &mac)
-{
-       return mac != "00:00:00:00:00:00";
-}
-
-void ctx::VisitDetector::onWifiScan(ctx::MacEvent e)
-{
-       _D("timestamp=%d, curent_interval.end=%d, mac=%s", e.timestamp, __currentInterval.end, std::string(e.mac).c_str());
-       if (__isValid(e.mac)) {
-               while (e.timestamp > __currentInterval.end) {
-                       __processCurrentLogger();
-                       __shiftCurrentInterval();
-               }
-               __currentMacEvents->push_back(e);
-       }
-}
-
-void ctx::VisitDetector::__processCurrentLogger()
-{
-       _D("");
-       std::shared_ptr<ctx::Frame> frame = __makeFrame(__currentMacEvents, __currentInterval);
-       __detectEntranceOrDeparture(frame);
-       __currentMacEvents->clear();
-}
-
-std::shared_ptr<ctx::Frame> ctx::VisitDetector::__makeFrame(std::shared_ptr<ctx::MacEvents> logger, ctx::Interval interval)
-{
-       std::set<time_t> timestamps;
-       std::shared_ptr<Frame> frame = std::make_shared<Frame>(interval);
-       for (auto log : *logger) {
-               timestamps.insert(log.timestamp);
-               if (frame->macs2Counts.find(log.mac) == frame->macs2Counts.end()) {
-                       frame->macs2Counts[log.mac] = 1;
-               } else {
-                       frame->macs2Counts[log.mac] += 1;
-               }
-       }
-       frame->numberOfTimestamps = timestamps.size();
-       return frame;
-}
-
-void ctx::VisitDetector::__shiftCurrentInterval()
-{
-       __currentInterval.end += __periodSeconds;
-       __currentInterval.start += __periodSeconds;
-}
-
-void ctx::VisitDetector::__detectEntranceOrDeparture(std::shared_ptr<ctx::Frame> frame)
-{
-       __entranceToPlace ? __detectDeparture(frame) : __detectEntrance(frame);
-}
-
-bool ctx::VisitDetector::__isDisjoint(const ctx::Macs2Counts &macs2Counts, const ctx::MacSet &macSet)
-{
-       for (auto &mac : macSet) {
-               if (macs2Counts.find(mac) != macs2Counts.end()) {
-                       return false;
-               }
-       }
-       return true;
-}
-
-bool ctx::VisitDetector::__protrudesFrom(const ctx::Macs2Counts &macs2Counts, const ctx::MacSet &macSet)
-{
-       for (auto &macCount : macs2Counts) {
-               if (macSet.find(macCount.first) == macSet.end()) {
-                       return true;
-               }
-       }
-       return false;
-}
-
-void ctx::VisitDetector::__detectDeparture(std::shared_ptr<ctx::Frame> frame)
-{
-       if (__tolerance == VISIT_DETECTOR_TOLERANCE_DEPTH) {
-               __departureTime = frame->interval.start;
-               __bufferedFrames.clear();
-       } else { // __tolerance < VISIT_DETECTOR_TOLERANCE_DEPTH
-               __bufferedFrames.push_back(frame);
-       }
-       if (__isDisjoint(frame->macs2Counts, *__representativesMacs)) {
-               if (frame->macs2Counts.empty() || __protrudesFrom(frame->macs2Counts, *__stayMacs)) {
-                       __tolerance--;
-               } else { // no new macs
-                       __bufferedFrames.clear();
-               }
-               if (__tolerance == 0) { // departure detected
-                       __visitEndDetected();
-                       __processBuffer(frame);
-               }
-       } else if (__tolerance < VISIT_DETECTOR_TOLERANCE_DEPTH) {
-               __tolerance++;
-       }
-}
-
-void ctx::VisitDetector::__visitStartDetected()
-{
-       __entranceToPlace = true;
-
-       __locationEvents.clear();
-       if (!__testMode) {
-               for (IVisitListener* listener : __listeners) {
-                       listener->onVisitStart();
-               }
-       }
-       __representativesMacs = __selectRepresentatives(__historyFrames);
-       __entranceTime = __historyFrames[0]->interval.start;
-       _I("Entrance detected, timestamp: %d", __entranceTime);
-       __resetHistory();
-}
-
-void ctx::VisitDetector::__visitEndDetected()
-{
-       if (!__testMode) {
-               for (IVisitListener* listener : __listeners) {
-                       listener->onVisitEnd();
-               }
-       }
-       _I("Departure detected, timestamp: %d", __departureTime);
-
-       Interval interval(__entranceTime, __departureTime);
-       Visit visit(interval, __representativesMacs);
-       VisitCateger::categorize(visit);
-
-       __putLocationToVisit(visit);
-
-       if (__testMode) {
-               __detectedVisits->push_back(visit);
-       } else {
-               __dbInsertVisit(visit);
-       }
-
-       // cleaning
-       __entranceToPlace = false;
-       __representativesMacs.reset();
-       __tolerance = VISIT_DETECTOR_TOLERANCE_DEPTH;
-}
-
-void ctx::VisitDetector::__putLocationToVisit(ctx::Visit &visit)
-{
-       // TODO: remove small accuracy locations from vectors?
-       std::vector<double> latitudes;
-       std::vector<double> longitudes;
-       visit.locationValid = false;
-       for (LocationEvent location : __locationEvents) {
-               if (location.timestamp >= __entranceTime && location.timestamp <= __departureTime) {
-                       latitudes.push_back(location.coordinates.latitude);
-                       longitudes.push_back(location.coordinates.longitude);
-                       visit.locationValid = true;
-               }
-       }
-       if (visit.locationValid) {
-               visit.location.latitude = median(latitudes);
-               visit.location.longitude = median(longitudes);
-               _D("visit location set: lat=%.8f, lon=%.8f", visit.location.latitude, visit.location.longitude);
-       } else {
-               _D("visit location not set");
-       }
-}
-
-void ctx::VisitDetector::__processBuffer(std::shared_ptr<ctx::Frame> frame)
-{
-       if (__bufferedFrames.empty()) {
-               __historyFrames.push_back(frame);
-       } else {
-               __historyFrames.push_back(__bufferedFrames[0]);
-               for (size_t i = 1; i < __bufferedFrames.size(); i++) {
-                       __detectEntrance(__bufferedFrames[i]);
-                       if (__entranceToPlace) {
-                               break;
-                       }
-               }
-       }
-}
-
-void ctx::VisitDetector::__detectEntrance(std::shared_ptr<ctx::Frame> currentFrame)
-{
-       if (currentFrame->macs2Counts.empty() || __historyFrames.empty()) {
-               __resetHistory(currentFrame);
-               return;
-       }
-
-       if (__stableCounter == 0) {
-               std::shared_ptr<Frame> oldestHistoryFrame = __historyFrames[0];
-               __stayMacs = macSetFromMacs2Counts(oldestHistoryFrame->macs2Counts);
-       }
-
-       std::shared_ptr<MacSet> currentBeacons = macSetFromMacs2Counts(currentFrame->macs2Counts);
-
-       if (similarity::overlapBiggerOverSmaller(*currentBeacons, *__stayMacs) > VISIT_DETECTOR_OVERLAP) {
-               __stableCounter++;
-               __historyFrames.push_back(currentFrame);
-
-               if (__stableCounter == VISIT_DETECTOR_STABLE_DEPTH) { // entrance detected
-                       __visitStartDetected();
-               }
-       } else {
-               __resetHistory(currentFrame);
-       }
-       return;
-}
-
-void ctx::VisitDetector::__resetHistory()
-{
-       __stableCounter = 0;
-       __historyFrames.clear();
-}
-
-void ctx::VisitDetector::__resetHistory(std::shared_ptr<Frame> frame)
-{
-       __resetHistory();
-       __historyFrames.push_back(frame);
-}
-
-std::shared_ptr<ctx::MacSet> ctx::VisitDetector::__selectRepresentatives(const std::vector<std::shared_ptr<Frame>> &frames)
-{
-       Macs2Counts reprs2Counts;
-       count_t allCount = 0;
-
-       for (auto frame : frames) {
-               allCount += frame->numberOfTimestamps;
-               for (auto &c : frame->macs2Counts) {
-                       reprs2Counts[c.first] += c.second;
-               }
-       }
-
-       std::shared_ptr<Macs2Shares> reprs2Shares = __macSharesFromCounts(reprs2Counts, allCount);
-
-       share_t maxShare = __calcMaxShare(*reprs2Shares);
-       share_t threshold = maxShare < VISIT_DETECTOR_REP_THRESHOLD ? maxShare : VISIT_DETECTOR_REP_THRESHOLD;
-
-       std::shared_ptr<MacSet> reprsMacSet = __macSetOfGreaterOrEqualShare(*reprs2Shares, threshold);
-
-       return reprsMacSet;
-}
-
-ctx::share_t ctx::VisitDetector::__calcMaxShare(const ctx::Macs2Shares &macs2Shares)
-{
-       ctx::share_t maxShare = 0.0;
-       for (auto &macShare : macs2Shares) {
-               if (macShare.second > maxShare) {
-                       maxShare = macShare.second;
-               }
-       }
-       return maxShare;
-}
-
-std::shared_ptr<ctx::MacSet> ctx::VisitDetector::__macSetOfGreaterOrEqualShare(const ctx::Macs2Shares &macs2Shares, ctx::share_t threshold)
-{
-       std::shared_ptr<MacSet> macSet = std::make_shared<MacSet>();
-       for (auto &macShare : macs2Shares) {
-               if (macShare.second >= threshold) {
-                       macSet->insert(macShare.first);
-               }
-       }
-       return macSet;
-}
-
-std::shared_ptr<ctx::Macs2Shares> ctx::VisitDetector::__macSharesFromCounts(ctx::Macs2Counts const &macs2Counts, ctx::count_t denominator)
-{
-       std::shared_ptr<Macs2Shares> macs2Shares(std::make_shared<Macs2Shares>());
-       for (auto macCount : macs2Counts) {
-               (*macs2Shares)[macCount.first] = (share_t) macCount.second / denominator;
-       }
-       return macs2Shares;
-}
-
-std::shared_ptr<ctx::Visits> ctx::VisitDetector::getVisits()
-{
-       return __detectedVisits;
-}
-
-void ctx::VisitDetector::__dbCreateTable()
-{
-       bool ret = __dbManager.createTable(0, VISIT_TABLE, __VISIT_TABLE_COLUMNS);
-       _D("db: visit Table Creation Result: %s", ret ? "SUCCESS" : "FAIL");
-}
-
-void ctx::VisitDetector::__putVisitCategToJson(const char* key, const Categs &categs, int categType, Json &data)
-{
-       auto categ = categs.find(categType);
-       if (categ == categs.end()) {
-               _E("json_put_visit no type %d in categs", categType);
-       } else {
-               data.set(NULL, key, categ->second);
-       }
-}
-
-void ctx::VisitDetector::__putVisitCategsToJson(const Categs &categs, Json &data)
-{
-       __putVisitCategToJson(VISIT_COLUMN_CATEG_HOME, categs, PLACE_CATEG_ID_HOME, data);
-       __putVisitCategToJson(VISIT_COLUMN_CATEG_WORK, categs, PLACE_CATEG_ID_WORK, data);
-       __putVisitCategToJson(VISIT_COLUMN_CATEG_OTHER, categs, PLACE_CATEG_ID_OTHER, data);
-}
-
-int ctx::VisitDetector::__dbInsertVisit(Visit visit)
-{
-       std::stringstream ss;
-       ss << *visit.macSet;
-
-       Json data;
-       data.set(NULL, VISIT_COLUMN_WIFI_APS, ss.str().c_str());
-
-       data.set(NULL, VISIT_COLUMN_LOCATION_VALID, visit.locationValid);
-       data.set(NULL, VISIT_COLUMN_LOCATION_LATITUDE, visit.location.latitude);
-       data.set(NULL, VISIT_COLUMN_LOCATION_LONGITUDE, visit.location.longitude);
-
-       data.set(NULL, VISIT_COLUMN_START_TIME, static_cast<int>(visit.interval.start));
-       data.set(NULL, VISIT_COLUMN_END_TIME, static_cast<int>(visit.interval.end));
-
-#ifdef TIZEN_ENGINEER_MODE
-       std::string startTimeHuman = DebugUtils::humanReadableDateTime(visit.interval.start, "%F %T", 80);
-       std::string endTimeHuman = DebugUtils::humanReadableDateTime(visit.interval.end, "%F %T", 80);
-       data.set(NULL, VISIT_COLUMN_START_TIME_HUMAN, startTimeHuman.c_str());
-       data.set(NULL, VISIT_COLUMN_END_TIME_HUMAN, endTimeHuman.c_str());
-       _D("db: visit table insert interval: (%d, %d): (%s, %s)",
-                       visit.interval.start, visit.interval.end, startTimeHuman.c_str(), endTimeHuman.c_str());
-#else
-       _D("db: visit table insert interval: (%d, %d)", visit.interval.start, visit.interval.end);
-#endif /* TIZEN_ENGINEER_MODE */
-
-       __putVisitCategsToJson(visit.categs, data);
-
-       int64_t rowId;
-       bool ret = __dbManager.insertSync(VISIT_TABLE, data, &rowId);
-       _D("db: visit table insert result: %s", ret ? "SUCCESS" : "FAIL");
-       return ret;
-}
-
-void ctx::VisitDetector::onNewLocation(LocationEvent locationEvent)
-{
-       _D("");
-       locationEvent.log();
-       __locationEvents.push_back(locationEvent);
-};
-
-void ctx::VisitDetector::__setPeriod(PlaceRecogMode energyMode)
-{
-       switch (energyMode) {
-       case PLACE_RECOG_LOW_POWER_MODE:
-               __periodSeconds = VISIT_DETECTOR_PERIOD_SECONDS_LOW_POWER;
-               break;
-       case PLACE_RECOG_HIGH_ACCURACY_MODE:
-               __periodSeconds = VISIT_DETECTOR_PERIOD_SECONDS_HIGH_ACCURACY;
-               break;
-       default:
-               _E("Incorrect energy mode");
-       }
-}
-
-void ctx::VisitDetector::setMode(PlaceRecogMode energyMode)
-{
-       _D("");
-       __setPeriod(energyMode);
-       __wifiLogger.setMode(energyMode);
-}
diff --git a/src/place/recognition/user_places/visit_detector.h b/src/place/recognition/user_places/visit_detector.h
deleted file mode 100644 (file)
index ee6e7c2..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_VISIT_DETECTOR_H_
-#define _CONTEXT_PLACE_RECOGNITION_VISIT_DETECTOR_H_
-
-#include <memory>
-#include <vector>
-#include <map>
-#include <unordered_map>
-#include <unordered_set>
-#include "user_places_types.h"
-#include <Json.h>
-#include <DatabaseManager.h>
-#include "visit_listener_iface.h"
-#include "location_logger.h"
-#include "location_listener_iface.h"
-#include "wifi_listener_iface.h"
-#include "wifi_logger.h"
-
-namespace ctx {
-
-       class VisitDetector : public IWifiListener, ILocationListener {
-
-       private:
-               bool __testMode;
-               std::shared_ptr<Visits> __detectedVisits; // only used in test mode
-               LocationLogger __locationLogger;
-               WifiLogger __wifiLogger;
-               std::vector<IVisitListener*> __listeners;
-               std::shared_ptr<MacEvents> __currentMacEvents;
-               Interval __currentInterval;
-               std::vector<LocationEvent> __locationEvents;
-               std::vector<std::shared_ptr<Frame>> __historyFrames;  // python: history_scans  + history_times
-               std::vector<std::shared_ptr<Frame>> __bufferedFrames; // python: buffered_scans + buffered_times
-               int __stableCounter;
-               int __tolerance;
-               bool __entranceToPlace;
-               int __periodSeconds;
-               DatabaseManager __dbManager;
-
-               // fields that  are used only in case of entrance detection
-               std::shared_ptr<MacSet> __representativesMacs; // macs that represent the current place
-               std::shared_ptr<MacSet> __stayMacs; // macs that can appear in the current place
-               time_t __entranceTime;
-               time_t __departureTime;
-
-               bool __isValid(const Mac &mac);
-               void __shiftCurrentInterval();
-               void __detectEntranceOrDeparture(std::shared_ptr<Frame> frame);
-               void __detectEntrance(std::shared_ptr<Frame> frame);
-               void __detectDeparture(std::shared_ptr<Frame> frame);
-               void __processBuffer(std::shared_ptr<Frame> frame); // python: buffer_analysing
-               std::shared_ptr<Frame> __makeFrame(std::shared_ptr<MacEvents> macEvents, Interval interval);  // python: scans2fingerprint
-               void __resetHistory();
-               void __resetHistory(std::shared_ptr<Frame> frame);
-               void __visitStartDetected();
-               void __visitEndDetected();
-               void __putLocationToVisit(Visit &visit);
-               std::shared_ptr<MacSet> __selectRepresentatives(const std::vector<std::shared_ptr<Frame>> &frames);
-               std::shared_ptr<MacSet> __macSetOfGreaterOrEqualShare(const Macs2Shares &macs2Shares, share_t threshold);
-               std::shared_ptr<Macs2Shares> __macSharesFromCounts(Macs2Counts const &macs2Counts, count_t denominator); // python: response_rate
-               share_t __calcMaxShare(const Macs2Shares &macs2Shares);
-               bool __isDisjoint(const Macs2Counts &macs2Counts, const MacSet &macSet);
-               bool __protrudesFrom(const Macs2Counts &macs2Counts, const MacSet &macSet);
-               void __setPeriod(PlaceRecogMode mode);
-               void __processCurrentLogger();
-
-               /* DATABASE */
-               void __dbCreateTable();
-               int __dbInsertVisit(Visit visit);
-               void __putVisitCategToJson(const char* key, const Categs &categs, int categType, Json &data);
-               void __putVisitCategsToJson(const Categs &categs, Json &data);
-
-               /* INPUT */
-               void onWifiScan(MacEvent event);
-               void onNewLocation(LocationEvent location);
-
-       public:
-               VisitDetector(time_t startScan, PlaceRecogMode energyMode = PLACE_RECOG_HIGH_ACCURACY_MODE, bool testMode = false);
-               ~VisitDetector();
-
-               std::shared_ptr<Visits> getVisits(); // only used in test mode
-               void setMode(PlaceRecogMode energyMode);
-
-       };      /* class VisitDetector */
-
-}      /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_VISIT_DETECTOR_H_ */
diff --git a/src/place/recognition/user_places/visit_listener_iface.h b/src/place/recognition/user_places/visit_listener_iface.h
deleted file mode 100644 (file)
index fefc926..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_VISIT_LISTENER_IFACE_H_
-#define _CONTEXT_PLACE_RECOGNITION_VISIT_LISTENER_IFACE_H_
-
-namespace ctx {
-
-       class IVisitListener {
-
-       public:
-               virtual ~IVisitListener() {};
-               virtual void onVisitStart() = 0;
-               virtual void onVisitEnd() = 0;
-
-       };      /* class IVisitListener */
-
-}      /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_VISIT_LISTENER_IFACE_H_ */
diff --git a/src/place/recognition/user_places/wifi_listener_iface.h b/src/place/recognition/user_places/wifi_listener_iface.h
deleted file mode 100644 (file)
index 3b883d3..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_WIFI_LISTENER_IFACE_H_
-#define _CONTEXT_PLACE_RECOGNITION_WIFI_LISTENER_IFACE_H_
-
-#include "user_places_types.h"
-
-namespace ctx {
-
-       class IWifiListener {
-
-       public:
-               virtual ~IWifiListener() {};
-               virtual void onWifiScan(ctx::MacEvent macEvent) = 0;
-
-       };      /* IWifiListener */
-
-}      /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_WIFI_LISTENER_IFACE_H_ */
diff --git a/src/place/recognition/user_places/wifi_logger.cpp b/src/place/recognition/user_places/wifi_logger.cpp
deleted file mode 100644 (file)
index 3367276..0000000
+++ /dev/null
@@ -1,475 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <sstream>
-#include <Types.h>
-#include <DatabaseManager.h>
-#include "../place_recognition_types.h"
-#include "debug_utils.h"
-#include "wifi_logger.h"
-
-#define __WIFI_CREATE_TABLE_COLUMNS \
-       WIFI_COLUMN_TIMESTAMP " timestamp NOT NULL, "\
-       WIFI_COLUMN_BSSID " TEXT NOT NULL"
-
-#define __WIFI_ERROR_LOG(error) { \
-       if (error != WIFI_ERROR_NONE) { \
-               _E("ERROR == %s", __wifiError2Str(error)); \
-       } else { \
-               _D("SUCCESS"); \
-       } \
-}
-
-int ctx::WifiLogger::__dbCreateTable()
-{
-       ctx::DatabaseManager dbManager;
-       bool ret = dbManager.createTable(0, WIFI_TABLE_NAME, __WIFI_CREATE_TABLE_COLUMNS, NULL, NULL);
-       _D("Table Creation Request: %s", ret ? "SUCCESS" : "FAIL");
-       return ret;
-}
-
-int ctx::WifiLogger::__dbInsertLogs()
-{
-       if (__logs.size() > 0) {
-               ctx::DatabaseManager dbManager;
-               std::stringstream query;
-               const char* separator = " ";
-               query << "BEGIN TRANSACTION; \
-                               INSERT INTO " WIFI_TABLE_NAME " \
-                               ( " WIFI_COLUMN_BSSID ", " WIFI_COLUMN_TIMESTAMP " ) \
-                               VALUES";
-               for (MacEvent mac_event : __logs) {
-                       query << separator << "( '" << mac_event.mac << "', '" << mac_event.timestamp << "' )";
-                       separator = ", ";
-               }
-               __logs.clear();
-               query << "; \
-                               END TRANSACTION;";
-               bool ret = dbManager.execute(0, query.str().c_str(), NULL);
-               _D("DB insert request: %s", ret ? "SUCCESS" : "FAIL");
-               return ret;
-       }
-       _D("__logs vector empty -> nothing to insert");
-       return 0;
-}
-
-ctx::WifiLogger::WifiLogger(IWifiListener * listener, PlaceRecogMode energyMode, bool testMode) :
-       __timerOn(false),
-       __intervalMinutes(WIFI_LOGGER_INTERVAL_MINUTES_HIGH_ACCURACY),
-       __testMode(testMode),
-       __listener(listener),
-       __lastScanTime(time_t(0)),
-       __lasTimerCallbackTime(time_t(0)),
-       __duringVisit(false),
-       __connectedToWifiAp(false),
-       __started(false),
-       __running(false)
-{
-       _D("CONSTRUCTOR");
-       if (testMode) {
-               return;
-       }
-       __setInterval(energyMode);
-
-       if (WIFI_LOGGER_DATABASE) {
-               __dbCreateTable();
-       }
-
-       __logs = std::vector<MacEvent>();
-
-       __wifiInitializeRequest();
-       __wifiSetDeviceStateChangedCbRequest();
-       if (WIFI_LOGGER_LOW_POWER_MODE) {
-               __wifiSetConnectionStateChangedCbRequest();
-       }
-       wifi_connection_state_e state = __wifiGetConnectionStateRequest();
-       __connectedToWifiAp = (state == WIFI_CONNECTION_STATE_CONNECTED);
-       _D("__connectedToWifiAp = %d, __duringVisit = %d IN CONSTRUCTOR",
-                               static_cast<int>(__connectedToWifiAp),
-                               static_cast<int>(__duringVisit));
-}
-
-ctx::WifiLogger::~WifiLogger()
-{
-       _D("DESTRUCTOR");
-       stopLogging();
-       __wifiDeinitializeRequest();
-}
-
-void ctx::WifiLogger::__wifiDeviceStateChangedCb(wifi_device_state_e state, void *userData)
-{
-       ctx::WifiLogger* wifiLogger = (ctx::WifiLogger *)userData;
-       switch (state) {
-       case WIFI_DEVICE_STATE_DEACTIVATED:
-               _D("WIFI setting OFF");
-               if (wifiLogger->__started) {
-                       wifiLogger->__stopLogging();
-               }
-               break;
-       case WIFI_DEVICE_STATE_ACTIVATED:
-               _D("WIFI setting ON");
-               if (wifiLogger->__started) {
-                       wifiLogger->__startLogging();
-               }
-               break;
-       default:
-               break;
-       }
-}
-
-void ctx::WifiLogger::__wifiConnectionStateChangedCb(wifi_connection_state_e state, wifi_ap_h ap, void *userData)
-{
-       ctx::WifiLogger* wifiLogger = (ctx::WifiLogger *)userData;
-       switch (state) {
-       case WIFI_CONNECTION_STATE_CONNECTED:
-               _D("connected to AP");
-               wifiLogger->__connectedToWifiAp = true;
-               break;
-       default:
-               _D("disconnected from AP -> __lastScansPool.clear()");
-               wifiLogger->__connectedToWifiAp = false;
-               wifiLogger->__lastScansPool.clear();
-               break;
-       }
-       // TODO: Check if AP bssid (MAC Address) will be helpful somehow in LOW_POWER mode
-}
-
-bool ctx::WifiLogger::__wifiFoundApCb(wifi_ap_h ap, void *userData)
-{
-       ctx::WifiLogger* wifiLogger = (ctx::WifiLogger *)userData;
-
-       char *bssid = NULL;
-       int ret = __wifiApGetBssidRequest(ap, &bssid);
-       if (ret != WIFI_ERROR_NONE) {
-               return false;
-       }
-
-       Mac mac;
-       try {
-               mac = Mac(bssid);
-       } catch (std::runtime_error &e) {
-               _E("Cannot create mac_event. Exception: %s", e.what());
-               return false;
-       }
-
-       MacEvent log(wifiLogger->__lastScanTime, mac);
-       if (wifiLogger->__listener) {
-               wifiLogger->__listener->onWifiScan(log);
-               if (WIFI_LOGGER_LOW_POWER_MODE
-                               && (wifiLogger->__connectedToWifiAp || wifiLogger->__duringVisit) ) {
-                       // Add to last scans AP's set
-                       wifiLogger->__lastScansPool.insert(std::string(bssid));
-               }
-       }
-       if (WIFI_LOGGER_DATABASE) {
-               wifiLogger->__logs.push_back(log);
-       }
-
-       return true;
-}
-
-const char* ctx::WifiLogger::__wifiError2Str(int error)
-{
-       switch (error) {
-       case WIFI_ERROR_INVALID_PARAMETER:
-               return "WIFI_ERROR_INVALID_PARAMETER";
-       case WIFI_ERROR_OUT_OF_MEMORY:
-               return "WIFI_ERROR_OUT_OF_MEMORY";
-       case WIFI_ERROR_INVALID_OPERATION:
-               return "WIFI_ERROR_INVALID_OPERATION";
-       case WIFI_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED:
-               return "WIFI_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED";
-       case WIFI_ERROR_OPERATION_FAILED:
-               return "WIFI_ERROR_OPERATION_FAILED";
-       case WIFI_ERROR_NO_CONNECTION:
-               return "WIFI_ERROR_NO_CONNECTION";
-       case WIFI_ERROR_NOW_IN_PROGRESS:
-               return "WIFI_ERROR_NOW_IN_PROGRESS";
-       case WIFI_ERROR_ALREADY_EXISTS:
-               return "WIFI_ERROR_ALREADY_EXISTS";
-       case WIFI_ERROR_OPERATION_ABORTED:
-               return "WIFI_ERROR_OPERATION_ABORTED";
-       case WIFI_ERROR_DHCP_FAILED:
-               return "WIFI_ERROR_DHCP_FAILED";
-       case WIFI_ERROR_INVALID_KEY:
-               return "WIFI_ERROR_INVALID_KEY";
-       case WIFI_ERROR_NO_REPLY:
-               return "WIFI_ERROR_NO_REPLY";
-       case WIFI_ERROR_SECURITY_RESTRICTED:
-               return "WIFI_ERROR_SECURITY_RESTRICTED";
-       case WIFI_ERROR_PERMISSION_DENIED:
-               return "WIFI_ERROR_PERMISSION_DENIED";
-       default:
-               return "unknown wifi error code";
-       }
-}
-
-void ctx::WifiLogger::__wifiScanFinishedCb(wifi_error_e errorCode, void *userData)
-{
-       ctx::WifiLogger* wifiLogger = (ctx::WifiLogger *)userData;
-
-       time_t now = time(nullptr);
-#ifdef TIZEN_ENGINEER_MODE
-       double seconds = 0;
-       if (wifiLogger->__lastScanTime > 0) {
-               seconds = difftime(now, wifiLogger->__lastScanTime);
-       }
-       std::string timeStr = DebugUtils::humanReadableDateTime(now, "%T", 9);
-       _D("__connectedToWifiAp = %d, __duringVisit = %d, __lastScansPool.size() = %d -> scan %s (from last : %.1fs)",
-                       static_cast<int>(wifiLogger->__connectedToWifiAp),
-                       static_cast<int>(wifiLogger->__duringVisit),
-                       wifiLogger->__lastScansPool.size(),
-                       timeStr.c_str(),
-                       seconds);
-#endif /* TIZEN_ENGINEER_MODE */
-       wifiLogger->__lastScanTime = now;
-
-       int ret = __wifiForeachFoundApsRequest(userData);
-       if (ret != WIFI_ERROR_NONE) {
-               return;
-       }
-       if (WIFI_LOGGER_DATABASE) {
-               wifiLogger->__dbInsertLogs();
-       }
-}
-
-bool ctx::WifiLogger::__checkWifiIsActivated()
-{
-       bool wifiActivated = true;
-       int ret = wifi_is_activated(&wifiActivated);
-       __WIFI_ERROR_LOG(ret);
-       _D("Wi-Fi is %s", wifiActivated ? "ON" : "OFF");
-       return wifiActivated;
-}
-
-void ctx::WifiLogger::__wifiScanRequest()
-{
-       int ret = wifi_scan(__wifiScanFinishedCb, this);
-       __WIFI_ERROR_LOG(ret);
-}
-
-int ctx::WifiLogger::__wifiForeachFoundApsRequest(void *userData)
-{
-       int ret = wifi_foreach_found_aps(__wifiFoundApCb, userData);
-       __WIFI_ERROR_LOG(ret);
-       return ret;
-}
-
-wifi_connection_state_e ctx::WifiLogger::__wifiGetConnectionStateRequest()
-{
-       wifi_connection_state_e connectionState;
-       int ret = wifi_get_connection_state(&connectionState);
-       __WIFI_ERROR_LOG(ret);
-       return connectionState;
-}
-
-void ctx::WifiLogger::__wifiSetBackgroundScanCbRequest()
-{
-       int ret = wifi_set_background_scan_cb(__wifiScanFinishedCb, this);
-       __WIFI_ERROR_LOG(ret);
-}
-
-void ctx::WifiLogger::__wifiSetDeviceStateChangedCbRequest()
-{
-       int ret = wifi_set_device_state_changed_cb(__wifiDeviceStateChangedCb, this);
-       __WIFI_ERROR_LOG(ret);
-}
-
-void ctx::WifiLogger::__wifiSetConnectionStateChangedCbRequest()
-{
-       int ret = wifi_set_connection_state_changed_cb(__wifiConnectionStateChangedCb, this);
-       __WIFI_ERROR_LOG(ret);
-}
-
-int ctx::WifiLogger::__wifiApGetBssidRequest(wifi_ap_h ap, char **bssid)
-{
-       int ret = wifi_ap_get_bssid(ap, bssid);
-       __WIFI_ERROR_LOG(ret);
-       return ret;
-}
-
-void ctx::WifiLogger::__wifiInitializeRequest()
-{
-       int ret = wifi_initialize();
-       __WIFI_ERROR_LOG(ret);
-}
-
-void ctx::WifiLogger::__wifiDeinitializeRequest()
-{
-       int ret = wifi_deinitialize();
-       __WIFI_ERROR_LOG(ret);
-}
-
-bool ctx::WifiLogger::__checkTimerId(int id)
-{
-       _D("id == %d, __timerId == %d", id, __timerId);
-       return id == __timerId;
-}
-
-/*
- * Accepted time from last callback is >= than minimum interval
- */
-bool ctx::WifiLogger::__checkTimerTime(time_t now)
-{
-       double seconds = 0;
-       if (__lasTimerCallbackTime > 0) {
-               seconds = difftime(now, __lasTimerCallbackTime);
-               if (seconds < WIFI_LOGGER_ACTIVE_SCANNING_MIN_INTERVAL) {
-                       _D("last == %d, now == %d, diff = %.1fs -> Incorrect timer callback", __lasTimerCallbackTime, now, seconds);
-                       return false;
-               } else {
-                       _D("last == %d, now == %d, diff = %.1fs -> Correct timer callback", __lasTimerCallbackTime, now, seconds);
-               }
-       } else {
-               _D("last == %d, now == %d -> First callback", __lasTimerCallbackTime, now);
-       }
-       __lasTimerCallbackTime = now;
-       return true;
-}
-
-bool ctx::WifiLogger::onTimerExpired(int id)
-{
-       time_t now = time(nullptr);
-       _D("");
-       if (__checkTimerId(id) == false) {
-               // Incorrect callback call
-               return false;
-       }
-       if (__checkTimerTime(now) == false) {
-               // Prevention from double callback call bug
-               return __timerOn;
-       }
-       _D("__connectedToWifiAp = %d, __duringVisit = %d, __lastScansPool.size() = %d",
-                       static_cast<int>(__connectedToWifiAp),
-                       static_cast<int>(__duringVisit),
-                       __lastScansPool.size());
-       if (WIFI_LOGGER_LOW_POWER_MODE
-                       && __duringVisit
-                       && __connectedToWifiAp
-                       && __lastScansPool.size() > 0) {
-               _D("trying to send fake scan");
-               if (__listener) {
-                       _D("__listener != false -> CORRECT");
-                       for (std::string bssid : __lastScansPool) {
-                               Mac mac(bssid);
-                               MacEvent scan(now, mac);
-                               _D("send fake scan (%s)", bssid.c_str());
-                               __listener->onWifiScan(scan);
-                       }
-               }
-       } else {
-               __wifiScanRequest();
-       }
-       return __timerOn;
-}
-
-void ctx::WifiLogger::startLogging()
-{
-       _D("");
-       __started = true;
-       __startLogging();
-}
-
-void ctx::WifiLogger::__startLogging()
-{
-       _D("");
-       if (!__checkWifiIsActivated() || __running) {
-               return;
-       }
-       __running = true;
-
-       if (WIFI_LOGGER_ACTIVE_SCANNING) {
-               __timerStart(__intervalMinutes);
-               __wifiScanRequest();
-       }
-       if (WIFI_LOGGER_PASSIVE_SCANNING) {
-               __wifiSetBackgroundScanCbRequest();
-       }
-}
-
-void ctx::WifiLogger::stopLogging()
-{
-       _D("");
-       __started = false;
-       __stopLogging();
-}
-
-void ctx::WifiLogger::__stopLogging()
-{
-       _D("");
-       if (!__running) {
-               return;
-       }
-       if (WIFI_LOGGER_ACTIVE_SCANNING) {
-               // Unset timer
-               __timerOn = false;
-               // Remove timer
-               __timerManager.remove(__timerId);
-       }
-       if (WIFI_LOGGER_PASSIVE_SCANNING) {
-               wifi_unset_background_scan_cb();
-       }
-       __running = false;
-}
-
-void ctx::WifiLogger::__timerStart(time_t minutes)
-{
-       __timerOn = true;
-       __timerId = __timerManager.setFor(minutes, this);
-       _D("%s (minutes=%d)", __timerId >= 0 ? "SUCCESS" : "ERROR", minutes);
-}
-
-void ctx::WifiLogger::onVisitStart()
-{
-       _D("");
-       __duringVisit = true;
-}
-
-void ctx::WifiLogger::onVisitEnd()
-{
-       _D("__lastScansPool.clear()");
-       __duringVisit = false;
-       __lastScansPool.clear();
-}
-
-void ctx::WifiLogger::__setInterval(PlaceRecogMode energyMode)
-{
-       switch (energyMode) {
-       case PLACE_RECOG_LOW_POWER_MODE:
-               __intervalMinutes = WIFI_LOGGER_INTERVAL_MINUTES_LOW_POWER;
-               break;
-       case PLACE_RECOG_HIGH_ACCURACY_MODE:
-               __intervalMinutes = WIFI_LOGGER_INTERVAL_MINUTES_HIGH_ACCURACY;
-               break;
-       default:
-               _E("Incorrect energy mode");
-       }
-}
-
-void ctx::WifiLogger::__timerRestart()
-{
-       __timerManager.remove(__timerId);
-       __timerStart(__intervalMinutes);
-}
-
-void ctx::WifiLogger::setMode(PlaceRecogMode energyMode)
-{
-       _D("");
-       __setInterval(energyMode);
-       if (WIFI_LOGGER_ACTIVE_SCANNING && __timerOn) {
-               __timerRestart();
-       }
-}
diff --git a/src/place/recognition/user_places/wifi_logger.h b/src/place/recognition/user_places/wifi_logger.h
deleted file mode 100644 (file)
index 9938a2c..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_WIFI_LOGGER_H_
-#define _CONTEXT_PLACE_RECOGNITION_WIFI_LOGGER_H_
-
-#include <wifi.h>
-#include <time.h>
-#include <vector>
-#include <set>
-#include <TimerManager.h>
-#include "wifi_listener_iface.h"
-#include "visit_listener_iface.h"
-#include "user_places_params.h"
-
-/* Database usage flag */
-#define WIFI_LOGGER_DATABASE false
-
-/* Active scanning usage flag */
-#define WIFI_LOGGER_ACTIVE_SCANNING true
-
-/* Passive scanning usage flag */
-#define WIFI_LOGGER_PASSIVE_SCANNING true
-
-/* Active scanning minimum interval in seconds */
-#define WIFI_LOGGER_ACTIVE_SCANNING_MIN_INTERVAL 10
-
-/*
- * Low power scanning usage flag
- * (When phone is connected to some WiFi Access Point
- * last scan data is returned instead of new scan triggering)
- */
-#define WIFI_LOGGER_LOW_POWER_MODE false
-
-namespace ctx {
-
-       class WifiLogger : public ITimerListener, public IVisitListener {
-
-       public:
-               WifiLogger(IWifiListener * listener = nullptr,
-                               PlaceRecogMode energyMode = PLACE_RECOG_HIGH_ACCURACY_MODE,
-                               bool testMode = false);
-               ~WifiLogger();
-
-               void startLogging();
-               void stopLogging();
-               void setMode(PlaceRecogMode energyMode);
-
-       private:
-               /* INPUT */
-               void onVisitStart();
-               void onVisitEnd();
-
-               bool onTimerExpired(int timerId);
-
-               /* TIMER */
-               bool __timerOn;
-               int __timerId;
-               int __intervalMinutes;
-               TimerManager __timerManager;
-               void __setInterval(PlaceRecogMode energyMode);
-               bool __checkTimerId(int id);
-               bool __checkTimerTime(time_t now);
-               void __timerStart(time_t minutes);
-               void __timerRestart();
-
-               /* DATABASE */
-               static int __dbCreateTable();
-               int __dbInsertLogs();
-
-               /* SYSTEM CAPI WRAPPERS */
-               void __wifiSetBackgroundScanCbRequest();
-               void __wifiSetDeviceStateChangedCbRequest();
-               void __wifiSetConnectionStateChangedCbRequest();
-               static bool __checkWifiIsActivated();
-               void __wifiScanRequest();
-               static int __wifiForeachFoundApsRequest(void *userData);
-               static wifi_connection_state_e __wifiGetConnectionStateRequest();
-               static int __wifiApGetBssidRequest(wifi_ap_h ap, char **bssid);
-               void __wifiInitializeRequest();
-               void __wifiDeinitializeRequest();
-
-               /* SYSTEM CAPI CALLBACKS */
-               static void __wifiDeviceStateChangedCb(wifi_device_state_e state, void *userData);
-               static void __wifiConnectionStateChangedCb(wifi_connection_state_e state, wifi_ap_h ap, void *userData);
-               static bool __wifiFoundApCb(wifi_ap_h ap, void *userData);
-               static void __wifiScanFinishedCb(wifi_error_e errorCode, void *userData);
-
-               bool __testMode;
-               IWifiListener * const __listener;
-               std::vector<MacEvent> __logs;
-               std::set<std::string> __lastScansPool;
-               time_t __lastScanTime;
-               time_t __lasTimerCallbackTime;
-               bool __duringVisit;
-               bool __connectedToWifiAp;
-               bool __started;
-               bool __running;
-
-               void __startLogging();
-               void __stopLogging();
-               static const char* __wifiError2Str(int error);
-
-       };      /* class WifiLogger */
-
-}      /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_WIFI_LOGGER_H_ */
diff --git a/src/prediction/assoc_rule.cpp b/src/prediction/assoc_rule.cpp
new file mode 100644 (file)
index 0000000..05be246
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "assoc_rule.h"
+
+std::ostream& ctx::operator<<(std::ostream &out, const ctx::AssocRule &rule)
+{
+       return out << rule.antecedent << " => " << rule.consequent
+                       << "; support:" << rule.support << "; confidence:" << rule.confidence;
+}
+
+bool ctx::operator==(const ctx::AssocRule& left, const ctx::AssocRule& right)
+{
+       return  left.antecedent == right.antecedent &&
+                       left.consequent == right.consequent &&
+                       left.support == right.support &&
+                       left.confidence == right.confidence;
+}
diff --git a/src/prediction/assoc_rule.h b/src/prediction/assoc_rule.h
new file mode 100644 (file)
index 0000000..20d195d
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_ASSOC_RULE_H_
+#define _PREDICTION_ASSOC_RULE_H_
+
+#include "item_set.h"
+#include <iostream>
+
+namespace ctx {
+
+       struct AssocRule {
+               ItemSet antecedent;
+               ItemSet consequent;
+               double support;
+               double confidence;
+
+               AssocRule(const ItemSet& antecedent_,
+                               const ItemSet& consequent_,
+                               const double& support_,
+                               const double& confidence_)
+                               : antecedent(antecedent_)
+                               , consequent(consequent_)
+                               , support(support_)
+                               , confidence(confidence_) {}
+       };
+
+       bool operator==(const AssocRule& left, const AssocRule& right);
+
+       std::ostream& operator<<(std::ostream &out, const AssocRule &rule);
+
+}      /* namespace ctx */
+
+#endif /* _PREDICTION_ASSOC_RULE_H_ */
diff --git a/src/prediction/assoc_rule_miner.cpp b/src/prediction/assoc_rule_miner.cpp
new file mode 100644 (file)
index 0000000..a639af8
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "assoc_rule_miner.h"
+#include "single_category_item_id_filter.h"
+#include "basket_filter.h"
+#include "basket_compressor.h"
+#include "baskets_agregator.h"
+#include "assoc_rule_producer.h"
+#include "weight_apriori.h"
+
+std::list<ctx::AssocRule> ctx::AssocRuleMiner::mine_from_baskets(
+               std::list<ctx::Basket>& initBaskets,
+               ctx::ItemCatalogue& itemCatalogue,
+               double minSupport,
+               double minConfidence,
+               std::string consequentCategory)
+{
+       SingleCategoryItemIdFilter itemIdFilter(consequentCategory, itemCatalogue);
+       BasketFilter::filter_in_place(initBaskets,itemIdFilter);
+
+       std::list<Basket> compressedBaskets = BasketCompressor::compress(initBaskets);
+
+       BasketsAgregator basketsAgregator(compressedBaskets);
+       basketsAgregator.generate_bitsets(itemCatalogue.maxId());
+       auto freqItemSets = WeightApriori::find_frequent_itemid_sets(basketsAgregator, minSupport);
+       auto rulesOfIds = AssocRuleProducer::generate_rules(freqItemSets, itemIdFilter, minConfidence);
+       return remove_assoc_rule_ids(rulesOfIds, itemCatalogue);
+}
+
+std::list<ctx::AssocRule> ctx::AssocRuleMiner::mine_from_events(
+               const ctx::EventSet& events,
+               double minSupport,
+               double minConfidence,
+               std::string consequentCategory)
+{
+       ItemCatalogue itemCatalogue;
+
+       BasketProducer basketProducer(itemCatalogue);
+       for (auto& event : events) {
+               basketProducer.put_event(event);
+       }
+
+       std::list<Basket> initBaskets = basketProducer.make_baskets();
+
+       return mine_from_baskets(initBaskets, itemCatalogue, minSupport, minConfidence, consequentCategory);
+}
+
+std::list<ctx::AssocRule> ctx::AssocRuleMiner::remove_assoc_rule_ids(
+               const std::list<ctx::AssocRuleOfIds>& rulesOfIds,
+               const ctx::ItemCatalogue& itemCatalogue)
+{
+       std::list<AssocRule> result;
+       for (const AssocRuleOfIds ruleOfIds : rulesOfIds) {
+               AssocRule rule(remove_assoc_rule_ids(ruleOfIds.antecedent, itemCatalogue),
+                                       remove_assoc_rule_ids(ruleOfIds.consequent, itemCatalogue),
+                                       ruleOfIds.support,
+                                       ruleOfIds.confidence);
+               result.push_back(rule);
+       }
+       return result;
+}
+
+ctx::ItemSet ctx::AssocRuleMiner::remove_assoc_rule_ids(const ctx::ItemIdSet& itemIdSet, const ctx::ItemCatalogue& itemCatalogue)
+{
+       ItemSet itemSet;
+       for (int id : itemIdSet) {
+               itemSet.push_back(itemCatalogue.item_of_id(id));
+       }
+       return itemSet;
+}
diff --git a/src/prediction/assoc_rule_miner.h b/src/prediction/assoc_rule_miner.h
new file mode 100644 (file)
index 0000000..a9c9e97
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_ASSOC_RULE_MINER_H_
+#define _PREDICTION_ASSOC_RULE_MINER_H_
+
+#include <list>
+#include <string>
+#include "event_set.h"
+#include "assoc_rule.h"
+#include "assoc_rule_of_ids.h"
+#include "basket_producer.h"
+#include "i_item_id_filter.h"
+
+namespace ctx {
+
+       class AssocRuleMiner {
+
+       public:
+               static std::list<AssocRule> mine_from_events(
+                               const EventSet& events,
+                               double minSupport,
+                               double minConfidence,
+                               std::string consequentCategory);
+               static std::list<AssocRule> mine_from_baskets(
+                               std::list<Basket>& initBaskets,
+                               ItemCatalogue& itemCatalogue,
+                               double minSupport,
+                               double minConfidence,
+                               std::string consequentCategory);
+       private:
+               static std::list<AssocRule> remove_assoc_rule_ids(const std::list<AssocRuleOfIds>& rulesOfIds, const ItemCatalogue& itemCatalogue);
+               static ItemSet remove_assoc_rule_ids(const ItemIdSet& itemIdSet, const ItemCatalogue& itemCatalogue);
+
+       };
+
+}      /* namespace ctx */
+
+#endif /* _PREDICTION_ASSOC_RULE_MINER_H_ */
diff --git a/src/prediction/assoc_rule_of_ids.h b/src/prediction/assoc_rule_of_ids.h
new file mode 100644 (file)
index 0000000..9597a55
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_ASSOC_RULE_OF_IDS_H_
+#define _PREDICTION_ASSOC_RULE_OF_IDS_H_
+
+#include "item_id_set.h"
+
+namespace ctx {
+
+       /* rule of the form antecedent => consequent */
+       class AssocRuleOfIds {
+
+       public:
+               ItemIdSet antecedent;
+               ItemIdSet consequent;
+               double support;
+               double confidence;
+       };
+
+       inline bool operator==(const AssocRuleOfIds& left, const AssocRuleOfIds& right)
+       {
+               return  left.support == right.support
+                        && left.confidence == right.confidence
+                        && left.antecedent == right.antecedent
+                        && left.consequent == right.consequent;
+       }
+
+}      /* namespace ctx */
+
+#endif /* _PREDICTION_ASSOC_RULE_OF_IDS_H_ */
diff --git a/src/prediction/assoc_rule_producer.cpp b/src/prediction/assoc_rule_producer.cpp
new file mode 100644 (file)
index 0000000..da9f5d2
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "assoc_rule_producer.h"
+
+ctx::AssocRuleOfIds ctx::AssocRuleProducer::rule_template(const ctx::ItemIdSet& sourceItemIdSet,
+               const ctx::IItemIdFilter& itemIdFilter)
+{
+       AssocRuleOfIds ruleTempl;
+       for (int itemId : sourceItemIdSet) {
+               ItemIdSet &destination = itemIdFilter.pass(itemId)
+                               ? ruleTempl.consequent
+                               : ruleTempl.antecedent;
+               destination.push_back(itemId);
+       }
+       return ruleTempl;
+}
+
+std::list<ctx::AssocRuleOfIds> ctx::AssocRuleProducer::generate_rules(
+               const std::list<std::pair<ctx::ItemIdSet, double>>& freqItemIdSets,
+               const ctx::IItemIdFilter& itemIdFilter, double minConfidence)
+{
+       std::list<AssocRuleOfIds> rules;
+
+       for (auto & pair : freqItemIdSets) {
+               ItemIdSet freqItemIdSet = pair.first;
+               double support = pair.second;
+               AssocRuleOfIds rule = AssocRuleProducer::rule_template(freqItemIdSet, itemIdFilter);
+               if (rule.antecedent.size() > 0 && rule.consequent.size() > 0) {
+                       rule.support = support;
+                       double antecedentSupport = AssocRuleProducer::supportOf(freqItemIdSets, rule.antecedent);
+                       rule.confidence = support / antecedentSupport;
+                       if (rule.confidence >= minConfidence) {
+                               rules.push_back(rule);
+                       }
+               }
+       }
+       return rules;
+}
+
+double ctx::AssocRuleProducer::supportOf(
+               const std::list<std::pair<ctx::ItemIdSet, double>> &allFreqItemIdSets, const ctx::ItemIdSet &wanted)
+{
+       for (auto & pair : allFreqItemIdSets) {
+               if (pair.first == wanted) {
+                       return pair.second;
+               }
+       }
+       return 0.0;
+}
diff --git a/src/prediction/assoc_rule_producer.h b/src/prediction/assoc_rule_producer.h
new file mode 100644 (file)
index 0000000..2b02b79
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_ASSOC_RULE_PRODUCER_H_
+#define _PREDICTION_ASSOC_RULE_PRODUCER_H_
+
+#include "assoc_rule_of_ids.h"
+#include "basket.h"
+#include "i_item_id_filter.h"
+#include <list>
+
+namespace ctx {
+
+       class AssocRuleProducer {
+
+       public:
+               static std::list<AssocRuleOfIds> generate_rules(
+                               const std::list<std::pair<ItemIdSet,double>> &freqItemIdSets,
+                               const IItemIdFilter &itemIdFilter,
+                               double minConfidence);
+
+               static AssocRuleOfIds rule_template(const ItemIdSet &sourceItemIdSet, const IItemIdFilter &antecedentItemIdFilter);
+
+       private:
+               static double supportOf(const std::list<std::pair<ItemIdSet,double>> &allFreqItemIdSets, const ItemIdSet &wanted);
+
+       };
+
+}      /* namespace ctx */
+
+#endif /* _PREDICTION_ASSOC_RULE_PRODUCER_H_ */
diff --git a/src/prediction/basket.cpp b/src/prediction/basket.cpp
new file mode 100644 (file)
index 0000000..35357ce
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "basket.h"
+
+void ctx::Basket::compute_bitset(int maxId)
+{
+       mBitSet.resize(maxId+1, false);
+       for (int itemId : itemIdSet) {
+               mBitSet[itemId] = true;
+       }
+}
+
+bool ctx::Basket::includes(const ctx::ItemIdSet& potentialSubset)
+{
+       for (int itemId : potentialSubset) {
+               if (!mBitSet[itemId]) {
+                       return false;
+               }
+       }
+       return true;
+}
diff --git a/src/prediction/basket.h b/src/prediction/basket.h
new file mode 100644 (file)
index 0000000..1adb851
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_BASKET_H_
+#define _PREDICTION_BASKET_H_
+
+#include "item_id_set.h"
+#include <vector>
+
+namespace ctx {
+
+       class Basket {
+
+       public:
+               ItemIdSet itemIdSet;
+               int weight;
+
+               Basket(const ItemIdSet& itemIdSet_, const int& weight_) : itemIdSet(itemIdSet_), weight(weight_) {};
+               void compute_bitset(int maxId);
+               bool includes(const ItemIdSet& potentialSubset); // compute_bitset() should be invoked first
+
+       private:
+               std::vector<bool> mBitSet;
+
+       };
+
+       // TODO If there is no "inline" below the project does not compile.
+       inline bool operator==(const Basket& left, const Basket& right)
+       {
+               return left.weight == right.weight && left.itemIdSet == right.itemIdSet;
+       }
+
+}      /* namespace ctx */
+
+#endif /* _PREDICTION_BASKET_H_ */
diff --git a/src/prediction/basket_compressor.cpp b/src/prediction/basket_compressor.cpp
new file mode 100644 (file)
index 0000000..f46c40d
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "basket_compressor.h"
+#include <sstream>
+#include <map>
+
+std::string ctx::BasketCompressor::itemset_string(const ctx::ItemIdSet& itemIdSet)
+{
+       std::stringstream ss;
+       for (int itemId : itemIdSet) {
+               ss << itemId << ',';
+       }
+       return ss.str();
+}
+
+std::list<ctx::Basket> ctx::BasketCompressor::compress(const std::list<ctx::Basket>& inputBaskets)
+{
+       std::map<std::string,Basket> basketsMap;
+       // TODO: maybe it is worth to resign from string keys and use std::map<ItemSet,weight> instead.
+
+       for (const Basket& basket : inputBaskets) {
+               std::string itemSetStr = itemset_string(basket.itemIdSet);
+
+               auto findResult = basketsMap.find(itemSetStr);
+               if (findResult == basketsMap.end()) {
+                       basketsMap.insert(std::pair<std::string,Basket>(itemSetStr, basket));
+               } else {
+                       Basket& compressedBasket = findResult->second;
+                       compressedBasket.weight += basket.weight;
+               }
+       }
+
+       std::list<Basket> compressedBaskets;
+       for (auto pair : basketsMap) {
+               compressedBaskets.push_back(pair.second);
+       }
+       return compressedBaskets;
+}
diff --git a/src/prediction/basket_compressor.h b/src/prediction/basket_compressor.h
new file mode 100644 (file)
index 0000000..776f074
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_BASKET_COMPRESSOR_H_
+#define _PREDICTION_BASKET_COMPRESSOR_H_
+
+#include <list>
+#include <string>
+#include "basket.h"
+
+namespace ctx {
+
+       class BasketCompressor {
+
+       public:
+               static std::list<Basket> compress(const std::list<Basket> &inputBaskets);
+
+       private:
+               static std::string itemset_string(const ItemIdSet &itemIdSet);
+
+       };
+
+}      /* namespace ctx */
+
+#endif /* _PREDICTION_BASKET_COMPRESSOR_H_ */
diff --git a/src/prediction/basket_filter.cpp b/src/prediction/basket_filter.cpp
new file mode 100644 (file)
index 0000000..da03b6c
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "basket_filter.h"
+
+void ctx::BasketFilter::filter_in_place(std::list<ctx::Basket>& baskets, const ctx::IItemIdFilter& itemIdFilter)
+{
+       baskets.remove_if([&itemIdFilter] (Basket &basket) -> bool { return !BasketPass(basket, itemIdFilter); });
+}
+
+bool ctx::BasketFilter::BasketPass(const ctx::Basket& basket, const ctx::IItemIdFilter& itemIdFilter)
+{
+       for (int itemId : basket.itemIdSet) {
+               if (itemIdFilter.pass(itemId)) {
+                       return true;
+               }
+       }
+       return false;
+}
diff --git a/src/prediction/basket_filter.h b/src/prediction/basket_filter.h
new file mode 100644 (file)
index 0000000..6f8a114
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_BASKET_FILTER_H_
+#define _PREDICTION_BASKET_FILTER_H_
+
+#include "basket.h"
+#include "i_item_id_filter.h"
+#include <list>
+
+namespace ctx {
+
+       class BasketFilter {
+
+       public:
+               static void filter_in_place(std::list<Basket> &inputBaskets, const IItemIdFilter &itemIdFilter);
+
+       private:
+               static bool BasketPass(const Basket &basket, const IItemIdFilter &itemIdFilter);
+
+       };
+
+}      /* namespace ctx */
+
+#endif /* _PREDICTION_BASKET_FILTER_H_ */
diff --git a/src/prediction/basket_producer.cpp b/src/prediction/basket_producer.cpp
new file mode 100644 (file)
index 0000000..99a3af9
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "basket_producer.h"
+#include <set>
+
+void ctx::BasketProducer::put_event(const ctx::Event& event)
+{
+       int iid = mItemCatalogue.id_of(event.item);
+       put_change(event.interval.start, iid);  // positive value indicates start
+       put_change(event.interval.end,  -iid);  // negative value indicates end
+}
+
+std::list<ctx::Basket> ctx::BasketProducer::make_baskets()
+{
+       std::list<Basket> baskets;
+
+       time_t intervalStart;
+       std::set<int> currentItemIds;
+
+       bool first = true;
+       for (auto changePair : mChanges) {
+               if (first) {
+                       first = false;
+               } else {
+                       time_t intervalEnd = changePair.first;
+                       int weight = intervalEnd - intervalStart;
+                       ItemIdSet itemIdSet;
+                       for (int itemId : currentItemIds) {
+                               itemIdSet.push_back(itemId);
+                       }
+                       baskets.push_back(Basket(itemIdSet, weight));
+               }
+
+               for (int itemId : changePair.second) {
+                       if (itemId > 0) {  // item with itemId starts now
+                               currentItemIds.insert(itemId);
+                       } else {           // item with -itemId ends now
+                               currentItemIds.erase(-itemId);
+                       }
+               }
+
+               intervalStart = changePair.first;
+       }
+
+       return baskets;
+}
+
+void ctx::BasketProducer::put_change(time_t time, int value)
+{
+       if (mChanges.find(time) == mChanges.end()) {
+               mChanges[time] = std::list<int>();
+       }
+       mChanges[time].push_back(value);
+}
diff --git a/src/prediction/basket_producer.h b/src/prediction/basket_producer.h
new file mode 100644 (file)
index 0000000..f2c9757
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_BASKET_PRODUCER_H_
+#define _PREDICTION_BASKET_PRODUCER_H_
+
+#include "event.h"
+#include "basket.h"
+#include "item_catalogue.h"
+#include <list>
+
+namespace ctx {
+
+       class BasketProducer {
+
+       public:
+               BasketProducer(ItemCatalogue& itemCatalogue) : mItemCatalogue(itemCatalogue) {};
+               void put_event(const Event& e);
+               std::list<Basket> make_baskets();
+
+       private:
+               void put_change(time_t time, int value);
+
+               ItemCatalogue& mItemCatalogue;
+
+               /*
+                * Changes in timestamps.
+                * If an item starts than its id is stored.
+                * If an item ends than its negated id is stored.
+                */
+               std::map<time_t, std::list<int>> mChanges;
+
+       };
+
+}      /* namespace ctx */
+
+#endif /* _PREDICTION_BASKET_PRODUCER_H_ */
diff --git a/src/prediction/baskets_agregator.cpp b/src/prediction/baskets_agregator.cpp
new file mode 100644 (file)
index 0000000..7a57e9b
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "baskets_agregator.h"
+
+ctx::BasketsAgregator::BasketsAgregator(std::list<ctx::Basket>& baskets) : mBaskets(baskets)
+{
+}
+
+ctx::ItemIdSet ctx::BasketsAgregator::unique_item_ids()
+{
+       ItemIdSet allItemIds;
+       for (const Basket& basket : mBaskets) {
+               for (int itemId : basket.itemIdSet) {
+                       allItemIds.push_back(itemId);
+               }
+       }
+       allItemIds.sort();
+       allItemIds.unique();
+       return allItemIds;
+}
+
+void ctx::BasketsAgregator::generate_bitsets(int maxId)
+{
+       for (Basket& basket : mBaskets) {
+               basket.compute_bitset(maxId);
+       }
+}
+
+double ctx::BasketsAgregator::supportOf(const ctx::ItemIdSet& itemIdSet)
+{
+       int matchedCount = 0;
+       int unmatchedCount = 0;
+       for (Basket& basket : mBaskets) {
+               if (basket.includes(itemIdSet)) {
+                       matchedCount += basket.weight;
+               } else {
+                       unmatchedCount += basket.weight;
+               }
+       }
+       return (double) matchedCount / (double) (matchedCount + unmatchedCount);
+}
diff --git a/src/prediction/baskets_agregator.h b/src/prediction/baskets_agregator.h
new file mode 100644 (file)
index 0000000..5ce18c0
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_BASKETS_AGREGATOR_H_
+#define _PREDICTION_BASKETS_AGREGATOR_H_
+
+#include <list>
+#include <memory>
+#include "basket.h"
+
+namespace ctx {
+
+       class BasketsAgregator {
+
+       public:
+               BasketsAgregator(std::list<Basket>& baskets);
+               void generate_bitsets(int maxId);
+               ItemIdSet unique_item_ids();
+               double supportOf(const ItemIdSet &itemIdSet);
+
+       private:
+               std::list<Basket>& mBaskets;
+
+       };
+
+}      /* namespace ctx */
+
+#endif /* _PREDICTION_BASKETS_AGREGATOR_H_ */
diff --git a/src/prediction/event.cpp b/src/prediction/event.cpp
new file mode 100644 (file)
index 0000000..817e108
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "event.h"
+
+bool ctx::operator==(const ctx::Event& left, const ctx::Event& right)
+{
+       return left.item == right.item && left.interval == right.interval;
+}
+
+bool ctx::operator!=(const ctx::Event& left, const ctx::Event& right)
+{
+       return !(left == right);
+}
diff --git a/src/prediction/event.h b/src/prediction/event.h
new file mode 100644 (file)
index 0000000..99048e4
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_EVENT_H_
+#define _PREDICTION_EVENT_H_
+
+#include "item.h"
+#include "interval.h"
+
+namespace ctx {
+
+       struct Event {
+               Item item;
+               Interval interval;
+
+               /* long time event */
+               Event(const Item& item_, const Interval& interval_) : item(item_), interval(interval_) {}
+
+               /* instant event */
+               Event(const Item& item_, const time_t& start_time_) : item(item_), interval(start_time_, start_time_ + 1) {}
+       };
+
+       bool operator==(const Event& left, const Event& right);
+       bool operator!=(const Event& left, const Event& right);
+
+}      /* namespace ctx */
+
+#endif /* _PREDICTION_EVENT_H_ */
diff --git a/src/prediction/event_set.h b/src/prediction/event_set.h
new file mode 100644 (file)
index 0000000..e097ece
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_EVENT_SET_H_
+#define _PREDICTION_EVENT_SET_H_
+
+#include "event.h"
+
+namespace ctx {
+
+       typedef std::list<Event> EventSet;
+
+}      /* namespace ctx */
+
+#endif /* _PREDICTION_EVENT_SET_H_ */
diff --git a/src/prediction/i_item_id_filter.h b/src/prediction/i_item_id_filter.h
new file mode 100644 (file)
index 0000000..1a8ac45
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_I_ITEM_ID_FILTER_H_
+#define _PREDICTION_I_ITEM_ID_FILTER_H_
+
+namespace ctx {
+
+       class IItemIdFilter {
+
+       public:
+               virtual ~IItemIdFilter() {}
+               virtual bool pass(int itemId) const = 0;
+
+       };
+
+}      /* namespace ctx */
+
+#endif /* _PREDICTION_I_ITEM_ID_FILTER_H_ */
diff --git a/src/prediction/interval.cpp b/src/prediction/interval.cpp
new file mode 100644 (file)
index 0000000..b6dc8f9
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "interval.h"
+
+bool ctx::operator==(const Interval& left, const Interval& right)
+{
+       return left.start == right.start && left.end == right.end;
+}
+
+bool ctx::operator!=(const Interval& left, const Interval& right)
+{
+       return !(left == right);
+}
diff --git a/src/prediction/interval.h b/src/prediction/interval.h
new file mode 100644 (file)
index 0000000..3576da1
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_INTERVAL_H_
+#define _PREDICTION_INTERVAL_H_
+
+#include <ctime>
+
+namespace ctx {
+
+       struct Interval {
+               time_t start;
+               time_t end;
+
+               Interval(time_t start_, time_t end_) : start(start_), end(end_) {}
+       };
+
+       bool operator==(const Interval& left, const Interval& right);
+       bool operator!=(const Interval& left, const Interval& right);
+
+}      /* namespace ctx */
+
+#endif /* _PREDICTION_INTERVAL_H_ */
diff --git a/src/prediction/item.cpp b/src/prediction/item.cpp
new file mode 100644 (file)
index 0000000..9a80ca9
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "item.h"
+
+ctx::Item::Item(const std::string &s)
+{
+       size_t leftBracket = s.find('[');
+       size_t rightBracket = s.find(']', leftBracket);
+       category = s.substr(leftBracket + 1, rightBracket - 1);
+       value = s.substr(rightBracket + 1);
+       return;
+}
+
+bool ctx::Item::operator==(const ctx::Item& other) const
+{
+       return other.category == category && other.value == value;
+}
+
+bool ctx::Item::operator!=(const ctx::Item& other) const
+{
+       return !operator==(other);
+}
+
+std::ostream& ctx::operator<<(std::ostream& out, const ctx::Item& item)
+{
+       return out << '[' << item.category << ']' << item.value;
+}
diff --git a/src/prediction/item.h b/src/prediction/item.h
new file mode 100644 (file)
index 0000000..0e933ce
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_ITEM_H_
+#define _PREDICTION_ITEM_H_
+
+#include <string>
+#include <iostream>
+
+namespace ctx {
+
+       struct Item {
+               std::string category;
+               std::string value;
+
+               Item(const std::string &category_, const std::string &value_) : category(category_), value(value_) {}
+               Item(const std::string &s); // in the form of "[Category]Value"
+
+               bool operator==(const Item& other) const;
+               bool operator!=(const Item& other) const;
+       };
+
+       std::ostream& operator<<(std::ostream& out, const Item& item);
+
+}      /* namespace ctx */
+
+namespace std {
+
+       template <> struct hash<ctx::Item> {
+               size_t operator()(const ctx::Item &item) const {
+                       hash<std::string> hasher;
+                       return hasher(item.category + ":" + item.value);
+               }
+       };
+
+}
+
+#endif /* _PREDICTION_ITEM_H_ */
diff --git a/src/prediction/item_catalogue.cpp b/src/prediction/item_catalogue.cpp
new file mode 100644 (file)
index 0000000..666b5a8
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "item_catalogue.h"
+#include "item_string_converter.h"
+
+int ctx::ItemCatalogue::id_of(const ctx::Item& item)
+{
+       std::string s = ItemStringConverter::item_to_string(item);
+       std::map<std::string,int>::iterator it = mItemIdsOfStrings.find(s);
+       if (it == mItemIdsOfStrings.end()) { // new item
+               mMaxId++;
+               mItemIdsOfStrings[s] = mMaxId;
+               mItemStrings.push_back(s);
+               extendCategoryItemIds(item.category, mMaxId);
+               return mMaxId;
+       } else { // existing item
+               return mItemIdsOfStrings[s];
+       }
+}
+
+bool ctx::ItemCatalogue::exists_item_of_id(int id) const
+{
+       return id > 0 && id <= mMaxId;
+}
+
+ctx::Item ctx::ItemCatalogue::item_of_id(int id) const
+{
+       return ItemStringConverter::string_to_item(mItemStrings[id]);
+}
+
+std::set<int> ctx::ItemCatalogue::category_item_ids(std::string category) const
+{
+       auto it = mCategoryItemIds.find(category);
+       if (it == mCategoryItemIds.end()) {
+               return std::set<int>();
+       } else {
+               return it->second;
+       }
+}
+
+void ctx::ItemCatalogue::extendCategoryItemIds(std::string category, int itemId)
+{
+       if (mCategoryItemIds.find(category) == mCategoryItemIds.end()) {
+               mCategoryItemIds[category] = std::set<int>();
+       }
+       mCategoryItemIds[category].insert(itemId);
+}
diff --git a/src/prediction/item_catalogue.h b/src/prediction/item_catalogue.h
new file mode 100644 (file)
index 0000000..404765b
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_ITEM_CATALOGUE_H_
+#define _PREDICTION_ITEM_CATALOGUE_H_
+
+#include "item.h"
+#include <map>
+#include <set>
+#include <vector>
+
+namespace ctx {
+
+       class ItemCatalogue {
+
+       public:
+               ItemCatalogue() : mMaxId(0) {
+                       mItemStrings.push_back(std::string(""));
+               }
+
+               int id_of(Item const &item);
+
+               bool exists_item_of_id(int id) const;
+               Item item_of_id(int id) const;
+               std::set<int> category_item_ids(std::string category) const;
+               int maxId() const {return mMaxId;};
+
+       private:
+               /* Translates item string to its id */
+               std::map<std::string,int> mItemIdsOfStrings;
+
+               /* Translating category string to int */
+               std::map<std::string,std::set<int>> mCategoryItemIds;
+
+               /* Stores item strings (index is item's id) */
+               std::vector<std::string> mItemStrings;
+
+               /* Preserves maximal item's id */
+               int mMaxId;
+
+               void extendCategoryItemIds(std::string category, int itemId);
+
+       };
+
+}      /* namespace ctx */
+
+#endif /* _PREDICTION_ITEM_CATALOGUE_H_ */
diff --git a/src/prediction/item_id_set.h b/src/prediction/item_id_set.h
new file mode 100644 (file)
index 0000000..ce18f71
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_ITEM_ID_SET_H_
+#define _PREDICTION_ITEM_ID_SET_H_
+
+#include <list>
+
+namespace ctx {
+
+       /* A set storing item ids */
+       typedef std::list<int> ItemIdSet;
+
+}      /* namespace ctx */
+
+#endif /* _PREDICTION_ITEM_ID_SET_H_ */
diff --git a/src/prediction/item_set.cpp b/src/prediction/item_set.cpp
new file mode 100644 (file)
index 0000000..dccee66
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "item_set.h"
+#include <algorithm>
+
+std::ostream& ctx::operator<<(std::ostream& out, const ctx::ItemSet& itemSet)
+{
+       bool first = true;
+       for (auto& item : itemSet) {
+               if (first) {
+                       first = false;
+               } else {
+                       out << ", ";
+               }
+               out << item;
+       }
+       return out;
+}
+
+bool ctx::itemset_includes_in(const ctx::ItemSet& small, const ctx::ItemSet& big)
+{
+       for (const Item& s : small) {
+               if (std::find(big.begin(), big.end(), s) == big.end())
+                       return false;
+       }
+       return true;
+}
diff --git a/src/prediction/item_set.h b/src/prediction/item_set.h
new file mode 100644 (file)
index 0000000..f13c8bc
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_ITEM_SET_H_
+#define _PREDICTION_ITEM_SET_H_
+
+#include <list>
+#include "item.h"
+
+namespace ctx {
+
+       /* A set storing item ids */
+       typedef std::list<Item> ItemSet;
+
+       std::ostream& operator<<(std::ostream& out, const ItemSet& itemSet);
+
+       bool itemset_includes_in(const ItemSet& small, const ItemSet& big);
+
+}      /* namespace ctx */
+
+#endif /* _PREDICTION_ITEM_SET_H_ */
diff --git a/src/prediction/item_string_converter.cpp b/src/prediction/item_string_converter.cpp
new file mode 100644 (file)
index 0000000..399847a
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "item_string_converter.h"
+#include <string>
+
+std::string ctx::ItemStringConverter::item_to_string(const ctx::Item &item)
+{
+       return item.category + SEPARATOR + item.value;
+}
+
+ctx::Item ctx::ItemStringConverter::string_to_item(const std::string& s)
+{
+       size_t pos = s.find(SEPARATOR);
+       //assert(pos != std::string::npos);
+       return Item(s.substr(0, pos), s.substr(pos + 1));
+}
diff --git a/src/prediction/item_string_converter.h b/src/prediction/item_string_converter.h
new file mode 100644 (file)
index 0000000..15de8b2
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_ITEM_STRING_CONVERTER_H_
+#define _PREDICTION_ITEM_STRING_CONVERTER_H_
+
+#include "item.h"
+
+namespace ctx {
+
+       class ItemStringConverter {
+
+       public:
+               static const char SEPARATOR = ':';
+               static std::string item_to_string(const Item &item);
+               static Item string_to_item(const std::string& s);
+
+       };
+
+}      /* namespace ctx */
+
+#endif /* _PREDICTION_ITEM_STRING_CONVERTER_H_ */
diff --git a/src/prediction/single_category_item_id_filter.cpp b/src/prediction/single_category_item_id_filter.cpp
new file mode 100644 (file)
index 0000000..6646e8d
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "single_category_item_id_filter.h"
+
+ctx::SingleCategoryItemIdFilter::SingleCategoryItemIdFilter(std::string category, const ctx::ItemCatalogue &itemCatalogue)
+{
+       mAcceptedItemIds = itemCatalogue.category_item_ids(category);
+}
+
+bool ctx::SingleCategoryItemIdFilter::pass(int itemId) const
+{
+       return mAcceptedItemIds.find(itemId) != mAcceptedItemIds.end();
+}
diff --git a/src/prediction/single_category_item_id_filter.h b/src/prediction/single_category_item_id_filter.h
new file mode 100644 (file)
index 0000000..4cc7dd6
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_SINGLE_CATEGORY_ITEM_ID_FILTER_H_
+#define _PREDICTION_SINGLE_CATEGORY_ITEM_ID_FILTER_H_
+
+#include "i_item_id_filter.h"
+#include "item_catalogue.h"
+
+namespace ctx {
+
+       class SingleCategoryItemIdFilter : public IItemIdFilter {
+
+       public:
+               SingleCategoryItemIdFilter(std::string category, const ItemCatalogue& itemCatalogue);
+               bool pass(int itemId) const override;
+
+       private:
+               std::set<int> mAcceptedItemIds;
+
+       };
+
+}      /* namespace ctx */
+
+#endif /* _PREDICTION_SINGLE_CATEGORY_ITEM_ID_FILTER_H_ */
diff --git a/src/prediction/weight_apriori.cpp b/src/prediction/weight_apriori.cpp
new file mode 100644 (file)
index 0000000..92aaebc
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "weight_apriori.h"
+#include <algorithm>
+#include <iostream>
+
+std::list<ctx::ItemIdSet> ctx::WeightApriori::find_wider_candidates(const std::list<ctx::ItemIdSet> &narrowFreqSets, int widerSize)
+{
+       std::list<ItemIdSet> candidates;
+       for (auto iter1 = narrowFreqSets.begin(); iter1 != narrowFreqSets.end(); ++iter1) {
+               auto iter2 = iter1; ++iter2;
+               for (;iter2 != narrowFreqSets.end(); ++iter2) {
+                       ItemIdSet itemIdSet1 = *iter1;
+                       ItemIdSet itemIdSet2 = *iter2;
+                       itemIdSet1.merge(itemIdSet2);
+                       itemIdSet1.unique();
+                       if (int(itemIdSet1.size()) == widerSize) {
+                               candidates.push_back(itemIdSet1);
+                       }
+               }
+       }
+       candidates.sort();
+       candidates.unique();
+       return candidates;
+}
+
+void ctx::WeightApriori::prune_wider_candidates(std::list<ctx::ItemIdSet>& widerCandidates, const std::list<ctx::ItemIdSet>& narrowFreqSets)
+{
+       std::list<ItemIdSet> pruned;
+       for (auto iter = widerCandidates.begin(); iter != widerCandidates.end();) {
+               if (survives_prunning(*iter, narrowFreqSets)) {
+                       ++iter;
+               } else {
+                       iter = widerCandidates.erase(iter);
+               }
+       }
+}
+
+bool ctx::WeightApriori::survives_prunning(ctx::ItemIdSet& widerCandidate, const std::list<ctx::ItemIdSet>& narrowFreqSets)
+{
+       int removedItemId = widerCandidate.front();
+       widerCandidate.pop_front();
+       for (auto iter = widerCandidate.begin();; ++iter) {
+               if (std::find(narrowFreqSets.begin(), narrowFreqSets.end(), widerCandidate) == narrowFreqSets.end()) {
+                       return false; // Caution: In this case the original contents of widerCandidate is not preserved.
+               }
+               if (iter == widerCandidate.end()) {
+                       widerCandidate.push_back(removedItemId); // Restoring original contents of widerCandidate.
+                       return true;
+               }
+               int newRemovedItemId = *iter;
+               *iter = removedItemId;
+               removedItemId = newRemovedItemId;
+       }
+}
+
+std::list<std::pair<ctx::ItemIdSet, double>> ctx::WeightApriori::find_frequent_itemid_sets(ctx::BasketsAgregator &basketAgregator, double supportThreshold)
+{
+       std::list<std::pair<ItemIdSet, double>> allFreqItemsets;
+       std::list<ItemIdSet> freqItemsetsOfCurrSize;
+       std::list<ItemIdSet> candidates;
+
+       int candidateSize = 1;
+       candidates = single_size_candidates(basketAgregator);
+
+       while (!candidates.empty()) {
+               for (ItemIdSet candidate : candidates) {
+                       double support = basketAgregator.supportOf(candidate);
+                       if (support >= supportThreshold) {
+                               freqItemsetsOfCurrSize.push_back(candidate);
+                               allFreqItemsets.push_back(std::make_pair(candidate,support));
+                       }
+               }
+               candidates = find_wider_candidates(freqItemsetsOfCurrSize, ++candidateSize);
+               freqItemsetsOfCurrSize.clear();
+       }
+       return allFreqItemsets;
+}
+
+std::list<ctx::ItemIdSet> ctx::WeightApriori::single_size_candidates(ctx::BasketsAgregator& basketAgregator)
+{
+       std::list<ItemIdSet> candidates;
+       for (int itemId : basketAgregator.unique_item_ids()) {
+               candidates.push_back({itemId});
+       }
+       return candidates;
+}
diff --git a/src/prediction/weight_apriori.h b/src/prediction/weight_apriori.h
new file mode 100644 (file)
index 0000000..6cb493d
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_WEIGHT_APRIORI_H_
+#define _PREDICTION_WEIGHT_APRIORI_H_
+
+#include "baskets_agregator.h"
+#include <list>
+#include <utility>
+
+namespace ctx {
+
+       class WeightApriori {
+
+       public:
+               static std::list<ItemIdSet> find_wider_candidates(const std::list<ItemIdSet> &narrowFreqSets, int widerSize);
+               static void prune_wider_candidates(std::list<ItemIdSet> &widerCandidates, const std::list<ItemIdSet> &narrowFreqSets);
+
+               static bool survives_prunning(ItemIdSet &widerCandidate, const std::list<ItemIdSet> &narrowFreqSets);
+
+               /* Find frequent itemsets along with its support value. */
+               static std::list<std::pair<ItemIdSet,double>> find_frequent_itemid_sets(BasketsAgregator &basketAgregator, double supportThreshold);
+
+       private:
+               static std::list<ItemIdSet> single_size_candidates(BasketsAgregator &basketAgregator);
+
+       };
+
+}      /* namespace ctx */
+
+#endif /* _PREDICTION_WEIGHT_APRIORI_H_ */
diff --git a/src/shared/CommonTypes.h b/src/shared/CommonTypes.h
new file mode 100644 (file)
index 0000000..d6673e1
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_STATS_COMMON_TYPES_H_
+#define _CONTEXT_STATS_COMMON_TYPES_H_
+
+#define LOG_RETENTION_PERIOD   7776000         /* 90 days in secs */
+
+#define DEFAULT_TIMESPAN               30
+#define DEFAULT_LIMIT                  10
+
+#define STATS_QUERY_RESULT             "QueryResult"
+#define STATS_RESULT_SIZE              "ResultSize"
+#define STATS_COL_ROW_ID               "rowId"
+
+#define STATS_TIMESPAN                 "TimeSpan"
+#define STATS_START_TIME               "StartTime"
+#define STATS_END_TIME                 "EndTime"
+#define STATS_LAST_TIME                        "LastTime"
+#define STATS_TOTAL_COUNT              "TotalCount"
+#define STATS_AVERAGE_COUNT            "AvgCount"
+#define STATS_DURATION                 "Duration"
+#define STATS_TOTAL_DURATION   "TotalDuration"
+#define STATS_DAY_OF_WEEK              "DayOfWeek"
+#define STATS_HOUR_OF_DAY              "HourOfDay"
+#define STATS_TIME_OF_DAY              "TimeOfDay"
+#define STATS_TOTAL_COUNT              "TotalCount"
+#define STATS_APP_ID                   "AppId"
+#define STATS_PKG_ID                   "PkgId"
+#define STATS_AUDIO_JACK               "AudioJack"
+#define STATS_SYSTEM_VOLUME            "SystemVolume"
+#define STATS_MEDIA_VOLUME             "MediaVolume"
+#define STATS_BSSID                            "BSSID"
+#define STATS_UNIV_TIME                        "UTC"
+#define STATS_LOCAL_TIME               "LocalTime"
+#define STATS_RANK                             "Rank"
+
+#define STATS_SUN              "Sun"
+#define STATS_MON              "Mon"
+#define STATS_TUE              "Tue"
+#define STATS_WED              "Wed"
+#define STATS_THU              "Thu"
+#define STATS_FRI              "Fri"
+#define STATS_SAT              "Sat"
+#define STATS_WEEKDAY  "Weekday"
+#define STATS_WEEKEND  "Weekend"
+
+enum StatsDayOfWeek_e {
+       STATS_DAY_OF_WEEK_WEEKDAY = 1,
+       STATS_DAY_OF_WEEK_WEEKEND,
+       STATS_DAY_OF_WEEK_ALL,
+       STATS_DAY_OF_WEEK_SUN,
+       STATS_DAY_OF_WEEK_MON,
+       STATS_DAY_OF_WEEK_TUE,
+       STATS_DAY_OF_WEEK_WED,
+       STATS_DAY_OF_WEEK_THU,
+       STATS_DAY_OF_WEEK_FRI,
+       STATS_DAY_OF_WEEK_SAT,
+};
+
+#define TRIG_DEF_RANK                  "\"Rank\":{\"type\":\"integer\",\"min\":1}"
+#define TRIG_DEF_TOTAL_COUNT   "\"TotalCount\":{\"type\":\"integer\",\"min\":0}"
+#define TRIG_DEF_TIME_OF_DAY   "\"TimeOfDay\":{\"type\":\"string\"}"
+#define TRIG_DEF_DAY_OF_WEEK   "\"DayOfWeek\":{\"type\":\"string\",\"values\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\",\"Sun\",\"Weekday\",\"Weekend\"]}"
+
+#endif /* End of _CONTEXT_STATS_COMMMON_TYPES_ */
diff --git a/src/shared/DbHandleBase.cpp b/src/shared/DbHandleBase.cpp
new file mode 100644 (file)
index 0000000..979f75b
--- /dev/null
@@ -0,0 +1,227 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <sstream>
+#include <Types.h>
+#include "CommonTypes.h"
+#include "DbHandleBase.h"
+
+#define DAY_OF_WEEK(SECOND) "CAST(strftime('%w', " SECOND ", 'unixepoch') AS INTEGER)"
+#define HOUR_OF_DAY(SECOND) "CAST(strftime('%H', " SECOND ", 'unixepoch') AS INTEGER)"
+
+using namespace ctx;
+
+StatsDbHandleBase::StatsDbHandleBase(ContextProvider *provider) :
+       isTriggerItem(false),
+       reqProvider(provider)
+{
+}
+
+StatsDbHandleBase::~StatsDbHandleBase()
+{
+}
+
+int StatsDbHandleBase::generateQid()
+{
+       static int qid = 0;
+
+       if (qid++ < 0) qid = 1;
+       return qid;
+}
+
+bool StatsDbHandleBase::executeQuery(Json filter, const char* query)
+{
+       bool ret = __dbManager.execute(generateQid(), query, this);
+       IF_FAIL_RETURN(ret, false);
+
+       reqFilter = filter;
+
+       return true;
+}
+
+std::string StatsDbHandleBase::createWhereClause(Json filter)
+{
+       std::stringstream whereClause;
+       int week = 0;
+       int start = 0;
+       int end = 0;
+       int timespan = DEFAULT_TIMESPAN;
+       std::string appId;
+       std::string weekStr;
+       std::string timeOfDay;
+
+       if (filter.get(NULL, STATS_DAY_OF_WEEK, &weekStr)) {
+               // In case of string (from Trigger)
+               if (weekStr == STATS_WEEKDAY) {
+                       week = STATS_DAY_OF_WEEK_WEEKDAY;
+
+               } else if (weekStr == STATS_WEEKEND) {
+                       week = STATS_DAY_OF_WEEK_WEEKEND;
+
+               } else if (weekStr == STATS_SUN) {
+                       week = STATS_DAY_OF_WEEK_SUN;
+
+               } else if (weekStr == STATS_MON) {
+                       week = STATS_DAY_OF_WEEK_MON;
+
+               } else if (weekStr == STATS_TUE) {
+                       week = STATS_DAY_OF_WEEK_TUE;
+
+               } else if (weekStr == STATS_WED) {
+                       week = STATS_DAY_OF_WEEK_WED;
+
+               } else if (weekStr == STATS_THU) {
+                       week = STATS_DAY_OF_WEEK_THU;
+
+               } else if (weekStr == STATS_FRI) {
+                       week = STATS_DAY_OF_WEEK_FRI;
+
+               } else if (weekStr == STATS_SAT) {
+                       week = STATS_DAY_OF_WEEK_SAT;
+               }
+       } else {
+               // In case of integer (from History)
+               filter.get(NULL, STATS_DAY_OF_WEEK, &week);
+       }
+
+       switch(week) {
+       case STATS_DAY_OF_WEEK_WEEKDAY:
+               whereClause << "(" DAY_OF_WEEK(STATS_LOCAL_TIME) " > 0 AND " DAY_OF_WEEK(STATS_LOCAL_TIME) " < 6) AND ";
+               break;
+       case STATS_DAY_OF_WEEK_WEEKEND:
+               whereClause << "(" DAY_OF_WEEK(STATS_LOCAL_TIME) " = 0 OR " DAY_OF_WEEK(STATS_LOCAL_TIME) " = 6) AND ";
+               break;
+       case STATS_DAY_OF_WEEK_SUN:
+       case STATS_DAY_OF_WEEK_MON:
+       case STATS_DAY_OF_WEEK_TUE:
+       case STATS_DAY_OF_WEEK_WED:
+       case STATS_DAY_OF_WEEK_THU:
+       case STATS_DAY_OF_WEEK_FRI:
+       case STATS_DAY_OF_WEEK_SAT:
+               whereClause << DAY_OF_WEEK(STATS_LOCAL_TIME) " = " << week - STATS_DAY_OF_WEEK_SUN << " AND ";
+               break;
+       default:
+               break;
+       }
+
+       if (filter.get(NULL, STATS_APP_ID, &appId))
+               whereClause << STATS_APP_ID " = '" << appId << "' AND ";
+
+       if (filter.get(NULL, STATS_START_TIME, &start))
+               whereClause << STATS_UNIV_TIME " >= " << start << " AND ";
+
+       if (filter.get(NULL, STATS_END_TIME, &end))
+               whereClause << STATS_UNIV_TIME " <= " << end << " AND ";
+
+       if (filter.get(NULL, STATS_TIME_OF_DAY, &timeOfDay)) {
+               size_t pivot = timeOfDay.find('-');
+               if (pivot != std::string::npos) {
+                       std::string from = timeOfDay.substr(0, pivot);
+                       std::string to = timeOfDay.substr(pivot + 1);
+                       whereClause << "(" HOUR_OF_DAY(STATS_LOCAL_TIME) " >= " << from \
+                               << " AND " HOUR_OF_DAY(STATS_LOCAL_TIME) " < " << to << ") AND ";
+               }
+       }
+
+       filter.get(NULL, STATS_TIMESPAN, &timespan);
+       whereClause << STATS_UNIV_TIME " > strftime('%s', 'now', '-" << timespan <<" day')";
+
+       return whereClause.str();
+}
+
+std::string StatsDbHandleBase::createSqlPeakTime(Json filter, const char* tableName, std::string whereClause)
+{
+       std::stringstream query;
+       int limit = DEFAULT_LIMIT;
+
+       filter.get(NULL, STATS_RESULT_SIZE, &limit);
+
+       query <<
+               "SELECT " \
+                       HOUR_OF_DAY(STATS_LOCAL_TIME) " AS " STATS_HOUR_OF_DAY ", COUNT(*) AS " STATS_TOTAL_COUNT \
+               " FROM " << tableName << \
+               " WHERE " << whereClause << \
+               " GROUP BY " HOUR_OF_DAY(STATS_LOCAL_TIME) \
+               " ORDER BY " STATS_TOTAL_COUNT " DESC" \
+               " LIMIT " << limit;
+
+       return query.str();
+}
+
+std::string StatsDbHandleBase::createSqlCommonSetting(Json filter, const char* tableName, std::string whereClause)
+{
+       std::stringstream query;
+
+       query <<
+               "SELECT ( SELECT " STATS_AUDIO_JACK \
+                               " FROM " << tableName << \
+                               " WHERE " << whereClause << \
+                               " GROUP BY " STATS_AUDIO_JACK \
+                               " ORDER BY count(" STATS_AUDIO_JACK ") DESC" \
+                               " LIMIT 1 ) AS " STATS_AUDIO_JACK \
+                       ", ( SELECT " STATS_SYSTEM_VOLUME \
+                               " FROM " << tableName << \
+                               " WHERE " << whereClause << \
+                               " GROUP BY " STATS_SYSTEM_VOLUME \
+                               " ORDER BY count(" STATS_SYSTEM_VOLUME ") DESC" \
+                               " LIMIT 1 ) AS " STATS_SYSTEM_VOLUME \
+                       ", ( SELECT " STATS_MEDIA_VOLUME \
+                               " FROM " << tableName << \
+                               " WHERE " << whereClause << \
+                               " GROUP BY " STATS_MEDIA_VOLUME \
+                               " ORDER BY count(" STATS_MEDIA_VOLUME ") DESC" \
+                               " LIMIT 1 ) AS " STATS_MEDIA_VOLUME;
+
+       return query.str();
+}
+
+void StatsDbHandleBase::onTableCreated(unsigned int queryId, int error)
+{
+}
+
+void StatsDbHandleBase::onInserted(unsigned int queryId, int error, int64_t rowId)
+{
+       delete this;
+}
+
+void StatsDbHandleBase::__jsonVectorToArray(std::vector<Json> &vecJson, Json &jsonResult)
+{
+       std::vector<Json>::iterator vecJsonEnd = vecJson.end();
+
+       for(auto vecJsonPos = vecJson.begin(); vecJsonPos != vecJsonEnd; ++vecJsonPos) {
+               Json originJson = *vecJsonPos;
+               jsonResult.append(NULL, STATS_QUERY_RESULT, originJson);
+       }
+}
+
+void StatsDbHandleBase::onExecuted(unsigned int queryId, int error, std::vector<Json>& records)
+{
+       if (isTriggerItem) {
+               if (records.size() == 1) {
+                       replyTriggerItem(error, records[0]);
+               } else {
+                       _E("Invalid query result");
+                       Json dummy;
+                       reqProvider->replyToRead(reqFilter, ERR_OPERATION_FAILED, dummy);
+               }
+       } else {
+               Json results = "{\"" STATS_QUERY_RESULT "\":[]}";
+               __jsonVectorToArray(records, results);
+               reqProvider->replyToRead(reqFilter, error, results);
+       }
+
+       delete this;
+}
diff --git a/src/shared/DbHandleBase.h b/src/shared/DbHandleBase.h
new file mode 100644 (file)
index 0000000..8949550
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_STATS_DB_HANDLE_BASE_H_
+#define _CONTEXT_STATS_DB_HANDLE_BASE_H_
+
+#include <string>
+#include <ContextProvider.h>
+#include <DatabaseManager.h>
+
+namespace ctx {
+       class StatsDbHandleBase : public IDatabaseListener {
+       protected:
+               bool isTriggerItem;
+               ContextProvider *reqProvider;
+               Json reqFilter;
+
+               StatsDbHandleBase(ContextProvider *provider);
+               ~StatsDbHandleBase();
+
+               std::string createWhereClause(Json filter);
+               std::string createSqlPeakTime(Json filter, const char* tableName, std::string whereClause);
+               std::string createSqlCommonSetting(Json filter, const char* tableName, std::string whereClause);
+
+               bool executeQuery(Json filter, const char* query);
+               virtual void replyTriggerItem(int error, Json &jsonResult) = 0;
+               static int generateQid();
+
+       private:
+               void __jsonVectorToArray(std::vector<Json> &vecJson, Json &jsonResult);
+
+               void onTableCreated(unsigned int queryId, int error);
+               void onInserted(unsigned int queryId, int error, int64_t rowId);
+               void onExecuted(unsigned int queryId, int error, std::vector<Json>& records);
+
+               DatabaseManager __dbManager;
+       };
+}
+
+#endif /* End of _CONTEXT_STATS_DB_HANDLE_BASE_H_ */
diff --git a/src/shared/DeviceContextProvider.cpp b/src/shared/DeviceContextProvider.cpp
new file mode 100644 (file)
index 0000000..5ff533d
--- /dev/null
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <new>
+#include <DeviceContextProvider.h>
+
+#include "../time/Alarm.h"
+#include "../time/Time.h"
+#include "../activity/Activity.h"
+#include "../headphone/Headphone.h"
+#include "../system/Battery.h"
+#include "../system/Charger.h"
+#include "../system/Gps.h"
+#include "../system/Psmode.h"
+#include "../system/Usb.h"
+#include "../wifi/Wifi.h"
+
+#ifdef _MOBILE_
+#include "../call/Call.h"
+#include "../contacts/Contacts.h"
+#include "../email/Email.h"
+#include "../message/Message.h"
+#endif
+
+#define PRIV_NETWORK   "network.get"
+#define PRIV_TELEPHONY "telephony"
+#define PRIV_MESSAGE   "message.read"
+#define PRIV_CONTACT   "contact.read"
+
+template<typename Provider>
+void registerProvider(const char *subject, const char *privilege)
+{
+       Provider *provider = new(std::nothrow) Provider();
+       IF_FAIL_VOID_TAG(provider, _E, "Memory allocation failed");
+
+       if (!provider->isSupported()) {
+               delete provider;
+               return;
+       }
+
+       provider->registerProvider(privilege, provider);
+       provider->submitTriggerItem();
+}
+
+SO_EXPORT bool ctx::initDeviceContextProvider()
+{
+       registerProvider<DeviceStatusAlarm>(DEVICE_ST_SUBJ_ALARM, NULL);
+       registerProvider<DeviceStatusTime>(DEVICE_ST_SUBJ_TIME, NULL);
+
+       registerProvider<DeviceStatusWifi>(DEVICE_ST_SUBJ_WIFI, PRIV_NETWORK);
+       registerProvider<DeviceStatusHeadphone>(DEVICE_ST_SUBJ_HEADPHONE, NULL);
+
+       registerProvider<DeviceStatusCharger>(DEVICE_ST_SUBJ_CHARGER, NULL);
+       registerProvider<DeviceStatusGps>(DEVICE_ST_SUBJ_GPS, NULL);
+       registerProvider<DeviceStatusUsb>(DEVICE_ST_SUBJ_USB, NULL);
+       registerProvider<DeviceStatusBattery>(DEVICE_ST_SUBJ_BATTERY, NULL);
+       registerProvider<DeviceStatusPsmode>(DEVICE_ST_SUBJ_PSMODE, NULL);
+
+       registerProvider<UserActivityStationary>(USER_ACT_SUBJ_STATIONARY, NULL);
+       registerProvider<UserActivityWalking>(USER_ACT_SUBJ_WALKING, NULL);
+       registerProvider<UserActivityRunning>(USER_ACT_SUBJ_RUNNING, NULL);
+       registerProvider<UserActivityInVehicle>(USER_ACT_SUBJ_IN_VEHICLE, NULL);
+
+#ifdef _MOBILE_
+       registerProvider<SocialStatusCall>(SOCIAL_ST_SUBJ_CALL, PRIV_TELEPHONY);
+       registerProvider<SocialStatusEmail>(SOCIAL_ST_SUBJ_EMAIL, NULL);
+       registerProvider<SocialStatusMessage>(SOCIAL_ST_SUBJ_MESSAGE, PRIV_MESSAGE);
+       registerProvider<SocialStatusContacts>(SOCIAL_ST_SUBJ_CONTACTS, PRIV_CONTACT);
+
+       /* Create context providers, which need to be initiated before being subscribed */
+       /*
+       if (DeviceStatusWifi::isSupported())
+               DeviceStatusWifi::create(NULL);
+       */
+#endif
+
+       return true;
+}
diff --git a/src/shared/DeviceProviderBase.cpp b/src/shared/DeviceProviderBase.cpp
new file mode 100644 (file)
index 0000000..1c5f5ef
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <system_info.h>
+#include "DeviceProviderBase.h"
+
+using namespace ctx;
+
+DeviceProviderBase::DeviceProviderBase(const char *subject) :
+       ContextProvider(subject),
+       __beingSubscribed(false)
+{
+}
+
+bool DeviceProviderBase::isSupported()
+{
+       return true;
+}
+
+void DeviceProviderBase::submitTriggerItem()
+{
+}
+
+int DeviceProviderBase::subscribe(Json option, Json *requestResult)
+{
+       IF_FAIL_RETURN(!__beingSubscribed, ERR_NONE);
+
+       int ret = subscribe();
+
+       if (ret == ERR_NONE)
+               __beingSubscribed = true;
+
+       return ret;
+}
+
+int DeviceProviderBase::unsubscribe(Json option)
+{
+       int ret = ERR_NONE;
+
+       if (__beingSubscribed)
+               ret = unsubscribe();
+
+       return ret;
+}
+
+int DeviceProviderBase::read(Json option, Json *requestResult)
+{
+       return read();
+}
+
+int DeviceProviderBase::write(Json data, Json *requestResult)
+{
+       return write();
+}
+
+int DeviceProviderBase::subscribe()
+{
+       return ERR_NOT_SUPPORTED;
+}
+
+int DeviceProviderBase::unsubscribe()
+{
+       return ERR_NOT_SUPPORTED;
+}
+
+int DeviceProviderBase::read()
+{
+       return ERR_NOT_SUPPORTED;
+}
+
+int DeviceProviderBase::write()
+{
+       return ERR_NOT_SUPPORTED;
+}
+
+bool DeviceProviderBase::getSystemInfoBool(const char *key)
+{
+       bool supported = false;
+       int ret = system_info_get_platform_bool(key, &supported);
+       IF_FAIL_RETURN_TAG(ret == SYSTEM_INFO_ERROR_NONE, false, _E, "system_info_get_platform_bool() failed");
+       return supported;
+}
diff --git a/src/shared/DeviceProviderBase.h b/src/shared/DeviceProviderBase.h
new file mode 100644 (file)
index 0000000..f5a55da
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_DEVICE_PROVIDER_BASE_H_
+#define _CONTEXT_DEVICE_PROVIDER_BASE_H_
+
+#include <ContextProvider.h>
+
+namespace ctx {
+
+       class DeviceProviderBase : public ContextProvider {
+       public:
+               int subscribe(Json option, Json *requestResult);
+               int unsubscribe(Json option);
+               int read(Json option, Json *requestResult);
+               int write(Json data, Json *requestResult);
+
+               virtual bool isSupported();
+               virtual void submitTriggerItem();
+
+       protected:
+               bool __beingSubscribed;
+
+               DeviceProviderBase(const char *subject);
+               virtual ~DeviceProviderBase() {}
+
+               virtual int subscribe();
+               virtual int unsubscribe();
+               virtual int read();
+               virtual int write();
+
+               static bool getSystemInfoBool(const char *key);
+       };
+}
+
+#endif // _CONTEXT_DEVICE_PROVIDER_BASE_H_
diff --git a/src/shared/PlaceContextProvider.cpp b/src/shared/PlaceContextProvider.cpp
new file mode 100644 (file)
index 0000000..eba5ff0
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <new>
+#include <Types.h>
+#include <PlaceContextProvider.h>
+
+#ifdef _MOBILE_
+#include "../geofence/PlaceGeofenceProvider.h"
+#include "../my-place/place_recognition.h"
+#endif /* _MOBILE_ */
+
+template<typename Provider>
+void registerProvider(const char *subject, const char *privilege)
+{
+       Provider *provider = new(std::nothrow) Provider();
+       IF_FAIL_VOID_TAG(provider, _E, "Memory allocation failed");
+
+       if (!provider->isSupported()) {
+               delete provider;
+               return;
+       }
+
+       provider->registerProvider(privilege, provider);
+       provider->submitTriggerItem();
+}
+
+SO_EXPORT bool ctx::initPlaceContextProvider()
+{
+#ifdef _MOBILE_
+       registerProvider<PlaceGeofenceProvider>(PLACE_SUBJ_GEOFENCE, PLACE_PRIV_GEOFENCE);
+
+       /*
+       registerProvider<PlaceRecognitionProvider>(PLACE_SUBJ_RECOGNITION, PLACE_PRIV_RECOGNITION);
+       */
+
+#endif /* _MOBILE_ */
+       return true;
+}
diff --git a/src/shared/SocialTypes.h b/src/shared/SocialTypes.h
new file mode 100644 (file)
index 0000000..82dccff
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_SOCIAL_STATUS_TYPES_H_
+#define _CONTEXT_SOCIAL_STATUS_TYPES_H_
+
+// Subject
+#define SOCIAL_ST_SUBJ_CALL            "social/call"
+#define SOCIAL_ST_SUBJ_EMAIL   "social/email"
+#define SOCIAL_ST_SUBJ_MESSAGE "social/message"
+#define SOCIAL_ST_SUBJ_CONTACTS        "social/contacts"
+
+// Data Key
+#define SOCIAL_ST_STATE                        "State"
+#define SOCIAL_ST_EVENT                        "Event"
+#define SOCIAL_ST_TYPE                 "Type"
+#define SOCIAL_ST_MEDIUM               "Medium"
+#define SOCIAL_ST_ADDRESS              "Address"
+
+// Data Values
+#define SOCIAL_ST_IDLE                 "Idle"
+#define SOCIAL_ST_CONNECTING   "Connecting"
+#define SOCIAL_ST_CONNECTED            "Connected"
+#define SOCIAL_ST_ACTIVE               SOCIAL_ST_CONNECTED
+#define SOCIAL_ST_HELD                 "Held"
+#define SOCIAL_ST_DIALING              "Dialing"
+#define SOCIAL_ST_ALERTING             SOCIAL_ST_CONNECTING
+#define SOCIAL_ST_INCOMING             SOCIAL_ST_CONNECTING
+#define SOCIAL_ST_VOICE                        "Voice"
+#define SOCIAL_ST_VIDEO                        "Video"
+#define SOCIAL_ST_SENT                 "Sent"
+#define SOCIAL_ST_RECEIVED             "Received"
+#define SOCIAL_ST_SMS                  "SMS"
+#define SOCIAL_ST_MMS                  "MMS"
+#define SOCIAL_ST_MY_PROFILE   "MyProfile"
+#define SOCIAL_ST_PERSON               "Person"
+#define SOCIAL_ST_CHANGED              "Changed"
+
+#endif //_CONTEXT_SOCIAL_STATUS_TYPES_H
diff --git a/src/shared/StatisticsContextProvider.cpp b/src/shared/StatisticsContextProvider.cpp
new file mode 100644 (file)
index 0000000..cfaf008
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.  *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <new>
+#include <StatisticsContextProvider.h>
+
+#include "../app-stats/AppStatsProvider.h"
+#include "../app-stats/AppStatsLogger.h"
+
+#ifdef _MOBILE_
+#include "../media-stats/MediaStatsProvider.h"
+#include "../media-stats/MediaStatsLogger.h"
+#include "../social-stats/SocialStatsProvider.h"
+#include "../social-stats/SocialStatsLogger.h"
+#endif
+
+template<typename Provider>
+void registerProvider(const char *subject, const char *privilege)
+{
+       Provider *provider = new(std::nothrow) Provider();
+       IF_FAIL_VOID_TAG(provider, _E, "Memory allocation failed");
+
+       if (!provider->isSupported()) {
+               delete provider;
+               return;
+       }
+
+       provider->registerProvider(privilege, provider);
+       provider->submitTriggerItem();
+}
+
+SO_EXPORT bool ctx::initStatisticsContextProvider()
+{
+       registerProvider<AppStatsLogger>(APP_SUBJ_LOGGER, APP_HISTORY_PRIV);
+       registerProvider<RecentAppProvider>(APP_SUBJ_RECENTLY_USED, APP_HISTORY_PRIV);
+       registerProvider<FrequentAppProvider>(APP_SUBJ_FREQUENTLY_USED, APP_HISTORY_PRIV);
+       registerProvider<RareAppProvider>(APP_SUBJ_RARELY_USED, APP_HISTORY_PRIV);
+       registerProvider<AppPeakTimeProvider>(APP_SUBJ_PEAK_TIME, APP_HISTORY_PRIV);
+       registerProvider<AppSettingProvider>(APP_SUBJ_COMMON_SETTING, APP_HISTORY_PRIV);
+       registerProvider<AppFreqProvider>(APP_SUBJ_FREQUENCY, APP_HISTORY_PRIV);
+
+#ifdef _MOBILE_
+       registerProvider<MediaStatsLogger>(MEDIA_SUBJ_LOGGER, MEDIA_HISTORY_PRIV);
+       registerProvider<MusicPeakTimeProvider>(MEDIA_SUBJ_PEAK_TIME_FOR_MUSIC, MEDIA_HISTORY_PRIV);
+       registerProvider<VideoPeakTimeProvider>(MEDIA_SUBJ_PEAK_TIME_FOR_VIDEO, MEDIA_HISTORY_PRIV);
+       registerProvider<MusicSettingProvider>(MEDIA_SUBJ_COMMON_SETTING_FOR_MUSIC, MEDIA_HISTORY_PRIV);
+       registerProvider<VideoSettingProvider>(MEDIA_SUBJ_COMMON_SETTING_FOR_VIDEO, MEDIA_HISTORY_PRIV);
+       registerProvider<MusicFreqProvider>(MEDIA_SUBJ_MUSIC_FREQUENCY, MEDIA_HISTORY_PRIV);
+       registerProvider<VideoFreqProvider>(MEDIA_SUBJ_VIDEO_FREQUENCY, MEDIA_HISTORY_PRIV);
+
+       registerProvider<SocialStatsLogger>(SOCIAL_SUBJ_LOGGER, SOCIAL_HISTORY_PRIV);
+       registerProvider<ContactFreqProvider>(SOCIAL_SUBJ_FREQUENCY, SOCIAL_HISTORY_PRIV);
+       registerProvider<TopContactsProvider>(SOCIAL_SUBJ_FREQ_ADDRESS, SOCIAL_HISTORY_PRIV);
+#endif
+
+       return true;
+}
diff --git a/src/shared/SystemInfo.cpp b/src/shared/SystemInfo.cpp
new file mode 100644 (file)
index 0000000..63731f7
--- /dev/null
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <glib.h>
+#include <runtime_info.h>
+#include <sound_manager.h>
+#include <Types.h>
+#include <SharedVars.h>
+#include "SystemInfo.h"
+
+#define CONNECTED              1
+#define NOT_CONNECTED  0
+
+using namespace ctx;
+
+bool system_info::getAudioJackState(int* state)
+{
+       int value = NOT_CONNECTED;
+       int err = runtime_info_get_value_int(RUNTIME_INFO_KEY_AUDIO_JACK_STATUS, &value);
+       IF_FAIL_RETURN(err == RUNTIME_INFO_ERROR_NONE, false);
+
+       *state = (value == NOT_CONNECTED ? NOT_CONNECTED : CONNECTED);
+
+       return true;
+}
+
+bool system_info::getVolume(int* systemVolume, int* mediaVolume)
+{
+       int err;
+
+       err = sound_manager_get_volume(SOUND_TYPE_SYSTEM, systemVolume);
+       IF_FAIL_RETURN(err == RUNTIME_INFO_ERROR_NONE, false);
+
+       err = sound_manager_get_volume(SOUND_TYPE_MEDIA, mediaVolume);
+       IF_FAIL_RETURN(err == RUNTIME_INFO_ERROR_NONE, false);
+
+       return true;
+}
+
+bool system_info::getWifiBssid(std::string& bssid)
+{
+#if 0
+       /* NOTE: This routine does not work, because the wifi API does not support multi-sessions in one process */
+       int err;
+       char *strBuf = NULL;
+       wifi_ap_h ap = NULL;
+
+       err = wifi_initialize();
+       IF_FAIL_RETURN_TAG(err == WIFI_ERROR_NONE, false, _W, "wifi_initialize() failed (%d)", err);
+
+       err = wifi_get_connected_ap(&ap);
+       if (err != WIFI_ERROR_NONE) {
+               _D("wifi_get_connected_ap() failed (%d)", err);
+               wifi_deinitialize();
+               return false;
+       }
+
+       wifi_ap_get_bssid(ap, &strBuf);
+       bssid = (strBuf != NULL ? strBuf : "");
+       g_free(strBuf);
+
+       wifi_ap_destroy(ap);
+       wifi_deinitialize();
+
+       return !bssid.empty();
+#endif
+       bssid = SharedVars().get(SharedVars::WIFI_BSSID);
+       return true;
+}
diff --git a/src/shared/SystemInfo.h b/src/shared/SystemInfo.h
new file mode 100644 (file)
index 0000000..86f5b19
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_STATS_SYSTEM_INFO_READER_H_
+#define _CONTEXT_STATS_SYSTEM_INFO_READER_H_
+
+#include <string>
+
+namespace ctx {
+       namespace system_info {
+               bool getAudioJackState(int* state);
+               bool getVolume(int* systemVolume, int* mediaVolume);
+               bool getWifiBssid(std::string& bssid);
+       }
+}
+
+#endif /* End of _CONTEXT_STATS_SYSTEM_INFO_READER_H_ */
diff --git a/src/shared/SystemTypes.h b/src/shared/SystemTypes.h
new file mode 100644 (file)
index 0000000..3129a36
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef        _DEVICE_SYSTEM_STATUS_TYPES_H_
+#define        _DEVICE_SYSTEM_STATUS_TYPES_H_
+
+// Subject
+#define DEVICE_ST_SUBJ_BATTERY                 "system/battery"
+#define DEVICE_ST_SUBJ_CHARGER                 "system/charger"
+#define DEVICE_ST_SUBJ_HEADPHONE               "system/headphone"
+#define DEVICE_ST_SUBJ_WIFI                            "system/wifi"
+#define DEVICE_ST_SUBJ_USB                             "system/usb"
+#define DEVICE_ST_SUBJ_GPS                             "system/gps"
+#define DEVICE_ST_SUBJ_PSMODE                  "system/psmode"
+#define DEVICE_ST_SUBJ_ALARM                   "device/alarm"
+#define DEVICE_ST_SUBJ_TIME                            "device/time"
+
+// Data Key
+#define DEVICE_ST_EVENT                        "Event"
+#define DEVICE_ST_STATE                        "State"
+#define DEVICE_ST_TYPE                 "Type"
+#define DEVICE_ST_LEVEL                        "Level"
+#define DEVICE_ST_BSSID                        "BSSID"
+#define DEVICE_ST_IS_CONNECTED "IsConnected"
+#define DEVICE_ST_IS_ENABLED   "IsEnabled"
+#define DEVICE_ST_IS_CHARGING  "IsCharging"
+#define DEVICE_ST_DETECTED             "Detected"
+#define DEVICE_ST_TIME_OF_DAY  "TimeOfDay"
+#define DEVICE_ST_DAY_OF_WEEK  "DayOfWeek"
+#define DEVICE_ST_DAY_OF_MONTH "DayOfMonth"
+
+// Data Value
+#define DEVICE_ST_TRUE                 1
+#define DEVICE_ST_FALSE                        0
+#define DEVICE_ST_ENTER                        "Enter"
+#define DEVICE_ST_EXIT                 "Exit"
+#define DEVICE_ST_DISABLED             "Disabled"
+#define DEVICE_ST_CONNECTED            "Connected"
+#define DEVICE_ST_UNCONNECTED  "Unconnected"
+#define DEVICE_ST_SEARCHING            "Searching"
+#define DEVICE_ST_EMPTY                        "Empty"
+#define DEVICE_ST_CRITICAL             "Critical"
+#define DEVICE_ST_LOW                  "Low"
+#define DEVICE_ST_NORMAL               "Normal"
+#define DEVICE_ST_HIGH                 "High"
+#define DEVICE_ST_FULL                 "Full"
+#define DEVICE_ST_HEADSET              "Headset"
+#define DEVICE_ST_BLUETOOTH            "Bluetooth"
+
+#define TRIG_BOOL_ITEM_DEF(sbj)        "\"" sbj "\":{\"type\":\"integer\",\"min\":0,\"max\":1}"
+
+#endif //_DEVICE_SYSTEM_STATUS_TYPES_H_
diff --git a/src/social-stats/DbHandle.cpp b/src/social-stats/DbHandle.cpp
new file mode 100644 (file)
index 0000000..5c1c0a6
--- /dev/null
@@ -0,0 +1,164 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <sstream>
+#include <contacts.h>
+#include <Types.h>
+#include "SocialStatisticsTypes.h"
+#include "DbHandle.h"
+
+using namespace ctx;
+
+SocialDbHandle::SocialDbHandle(ContextProvider *provider) :
+       StatsDbHandleBase(provider)
+{
+}
+
+SocialDbHandle::~SocialDbHandle()
+{
+}
+
+int SocialDbHandle::read(Json filter)
+{
+       std::string query;
+       const char *subject = reqProvider->getSubject();
+
+       if (STR_EQ(subject, SOCIAL_SUBJ_FREQ_ADDRESS)) {
+               query = createSqlFreqAddress(filter);
+
+       } else if (STR_EQ(subject, SOCIAL_SUBJ_FREQUENCY)) {
+               isTriggerItem = true;
+               query = createSqlFrequency(filter);
+       }
+
+       IF_FAIL_RETURN(!query.empty(), ERR_OPERATION_FAILED);
+
+       bool ret = executeQuery(filter, query.c_str());
+       IF_FAIL_RETURN(ret, ERR_OPERATION_FAILED);
+
+       return ERR_NONE;
+}
+
+std::string SocialDbHandle::createWhereClause(Json filter)
+{
+       std::stringstream whereClause;
+       int commType = -1;
+
+       whereClause << StatsDbHandleBase::createWhereClause(filter);
+
+       filter.get(NULL, SOCIAL_COMMUNICATION_TYPE, &commType);
+
+       switch(commType) {
+       case SOCIAL_COMMUNICATION_TYPE_CALL:
+               whereClause <<
+                       " AND " SOCIAL_PHONE_LOG_TYPE " >= " << CONTACTS_PLOG_TYPE_VOICE_INCOMING <<
+                       " AND " SOCIAL_PHONE_LOG_TYPE " <= " << CONTACTS_PLOG_TYPE_VIDEO_BLOCKED;
+               break;
+       case SOCIAL_COMMUNICATION_TYPE_MESSAGE:
+               whereClause <<
+                       " AND " SOCIAL_PHONE_LOG_TYPE " >= " << CONTACTS_PLOG_TYPE_MMS_INCOMING <<
+                       " AND " SOCIAL_PHONE_LOG_TYPE " <= " << CONTACTS_PLOG_TYPE_MMS_BLOCKED;
+               break;
+       default:
+               break;
+       }
+
+       return whereClause.str();
+}
+
+std::string SocialDbHandle::createSqlFreqAddress(Json filter)
+{
+       std::stringstream query;
+       int limit = DEFAULT_LIMIT;
+
+       filter.get(NULL, STATS_RESULT_SIZE, &limit);
+
+       query <<
+               "SELECT " SOCIAL_ADDRESS ", " \
+                       "COUNT(*) AS " STATS_TOTAL_COUNT ", " \
+                       "SUM(" STATS_DURATION ") AS " STATS_TOTAL_DURATION ", " \
+                       "MAX(" STATS_UNIV_TIME ") AS " STATS_LAST_TIME \
+               " FROM " SOCIAL_TABLE_CONTACT_LOG \
+               " WHERE " << createWhereClause(filter) <<
+               " GROUP BY " SOCIAL_ADDRESS \
+               " ORDER BY COUNT(*) DESC" \
+               " LIMIT " << limit;
+
+       return query.str();
+}
+
+std::string SocialDbHandle::createSqlFrequency(Json filter)
+{
+       Json filterCleaned;
+       std::string weekStr;
+       std::string timeOfDay;
+       std::string address;
+
+       if (!filter.get(NULL, SOCIAL_ADDRESS, &address)) {
+               _E("Invalid parameter");
+               return "";
+       }
+
+       if (filter.get(NULL, STATS_DAY_OF_WEEK, &weekStr))
+               filterCleaned.set(NULL, STATS_DAY_OF_WEEK, weekStr);
+
+       if (filter.get(NULL, STATS_TIME_OF_DAY, &timeOfDay))
+               filterCleaned.set(NULL, STATS_TIME_OF_DAY, timeOfDay);
+
+       std::stringstream query;
+
+       query <<
+               "DELETE FROM " SOCIAL_TEMP_CONTACT_FREQ ";";
+
+       query <<
+               "INSERT INTO " SOCIAL_TEMP_CONTACT_FREQ \
+               " SELECT " SOCIAL_ADDRESS ", COUNT(*) AS " STATS_TOTAL_COUNT \
+               " FROM " SOCIAL_TABLE_CONTACT_LOG \
+               " WHERE " << createWhereClause(filterCleaned) <<
+               " GROUP BY " SOCIAL_ADDRESS ";";
+
+       query <<
+               "INSERT OR IGNORE INTO " SOCIAL_TEMP_CONTACT_FREQ " (" SOCIAL_ADDRESS ")" \
+               " VALUES ('" << address << "');";
+
+       query <<
+               "SELECT S." SOCIAL_ADDRESS ", S." STATS_TOTAL_COUNT ", 1+COUNT(lesser." STATS_TOTAL_COUNT ") AS " STATS_RANK \
+               " FROM " SOCIAL_TEMP_CONTACT_FREQ " AS S" \
+               " LEFT JOIN " SOCIAL_TEMP_CONTACT_FREQ " AS lesser" \
+               " ON S." STATS_TOTAL_COUNT " < lesser." STATS_TOTAL_COUNT \
+               " WHERE S." SOCIAL_ADDRESS " = '" << address << "'";
+
+
+       return query.str();
+}
+
+void SocialDbHandle::replyTriggerItem(int error, Json &jsonResult)
+{
+       IF_FAIL_VOID_TAG(STR_EQ(reqProvider->getSubject(), SOCIAL_SUBJ_FREQUENCY), _E, "Invalid subject");
+
+       Json results;
+       std::string valStr;
+       int val;
+
+       jsonResult.get(NULL, SOCIAL_ADDRESS, &valStr);
+       results.set(NULL, SOCIAL_ADDRESS, valStr);
+       jsonResult.get(NULL, STATS_TOTAL_COUNT, &val);
+       results.set(NULL, STATS_TOTAL_COUNT, val);
+       jsonResult.get(NULL, STATS_RANK, &val);
+       results.set(NULL, STATS_RANK, val);
+
+       reqProvider->replyToRead(reqFilter, error, results);
+}
diff --git a/src/social-stats/DbHandle.h b/src/social-stats/DbHandle.h
new file mode 100644 (file)
index 0000000..576c6a1
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_STATS_SOCIAL_DB_HANDLE_H_
+#define _CONTEXT_STATS_SOCIAL_DB_HANDLE_H_
+
+#include <string>
+#include <Json.h>
+#include "../shared/DbHandleBase.h"
+
+namespace ctx {
+       class SocialDbHandle : public StatsDbHandleBase {
+       public:
+               SocialDbHandle(ContextProvider *provider);
+               ~SocialDbHandle();
+
+               int read(Json filter);
+
+       protected:
+               std::string createWhereClause(Json filter);
+               std::string createSqlFreqAddress(Json filter);
+               std::string createSqlFrequency(Json filter);
+               void replyTriggerItem(int error, Json &jsonResult);
+       };
+}
+
+#endif /* End of _CONTEXT_STATS_SOCIAL_DB_HANDLE_H_ */
diff --git a/src/social-stats/LogAggregator.cpp b/src/social-stats/LogAggregator.cpp
new file mode 100644 (file)
index 0000000..dac092d
--- /dev/null
@@ -0,0 +1,167 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <sstream>
+#include <Json.h>
+#include <Types.h>
+#include "SocialStatisticsTypes.h"
+#include "LogAggregator.h"
+
+ctx::ContactLogAggregator::ContactLogAggregator() :
+       __timerId(-1),
+       __timeDiff(0)
+{
+       __createTable();
+       __timerId = __timerManager.setAt(3, 0, DayOfWeek::EVERYDAY, this);
+}
+
+ctx::ContactLogAggregator::~ContactLogAggregator()
+{
+       __timerManager.remove(__timerId);
+}
+
+void ctx::ContactLogAggregator::__createTable()
+{
+       static bool done = false;
+       IF_FAIL_VOID(!done);
+
+       __dbManager.createTable(0, SOCIAL_TABLE_CONTACT_LOG, SOCIAL_TABLE_CONTACT_LOG_COLUMNS, NULL, NULL);
+       __dbManager.execute(0, SOCIAL_TEMP_CONTACT_FREQ_SQL, NULL);
+
+       done = true;
+}
+
+bool ctx::ContactLogAggregator::onTimerExpired(int timerId)
+{
+       aggregateContactLog();
+       return true;
+}
+
+void ctx::ContactLogAggregator::aggregateContactLog()
+{
+       __dbManager.execute(0,
+                       "SELECT IFNULL(MAX(" STATS_UNIV_TIME "),0) AS " STATS_LAST_TIME \
+                       ", (strftime('%s', 'now', 'localtime')) - (strftime('%s', 'now')) AS " TIME_DIFFERENCE \
+                       " FROM " SOCIAL_TABLE_CONTACT_LOG, this);
+}
+
+void ctx::ContactLogAggregator::onExecuted(unsigned int queryId, int error, std::vector<Json>& records)
+{
+       IF_FAIL_VOID_TAG(!records.empty(), _E, "Invalid query result");
+
+       int lastTime = 0;
+       records[0].get(NULL, STATS_LAST_TIME, &lastTime);
+       records[0].get(NULL, TIME_DIFFERENCE, &__timeDiff);
+
+       _D("Last Time: %d / Local - UTC: %d", lastTime, __timeDiff);
+
+       contacts_list_h list = NULL;
+
+       __getUpdatedContactLogList(lastTime, &list);
+       IF_FAIL_VOID(list);
+
+       __removeExpiredLog();
+       __insertContactLogList(list);
+       __destroyContactLogList(list);
+}
+
+void ctx::ContactLogAggregator::__getUpdatedContactLogList(int lastTime, contacts_list_h *list)
+{
+       contacts_filter_h filter = NULL;
+       contacts_query_h query = NULL;
+
+       int err = contacts_connect();
+       IF_FAIL_VOID_TAG(err == CONTACTS_ERROR_NONE, _E, "contacts_connect() failed");
+
+       err = contacts_filter_create(_contacts_phone_log._uri, &filter);
+       IF_FAIL_CATCH_TAG(err == CONTACTS_ERROR_NONE, _E, "contacts_filter_create() failed");
+
+       contacts_filter_add_int(filter, _contacts_phone_log.log_type, CONTACTS_MATCH_GREATER_THAN_OR_EQUAL, CONTACTS_PLOG_TYPE_VOICE_INCOMING);
+       contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_AND);
+       contacts_filter_add_int(filter, _contacts_phone_log.log_type, CONTACTS_MATCH_LESS_THAN_OR_EQUAL, CONTACTS_PLOG_TYPE_MMS_BLOCKED);
+       contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_AND);
+       contacts_filter_add_int(filter, _contacts_phone_log.log_time , CONTACTS_MATCH_GREATER_THAN, lastTime);
+       contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_AND);
+
+       err = contacts_query_create(_contacts_phone_log._uri, &query);
+       IF_FAIL_CATCH_TAG(err == CONTACTS_ERROR_NONE, _E, "contacts_query_create() failed");
+
+       contacts_query_set_filter(query, filter);
+       contacts_query_set_sort(query, _contacts_phone_log.log_time, true);
+
+       err = contacts_db_get_records_with_query(query, 0, 0, list);
+       IF_FAIL_CATCH_TAG(err == CONTACTS_ERROR_NONE, _E, "contacts_db_get_records_with_query() failed");
+
+CATCH:
+       if (filter)
+               contacts_filter_destroy(filter);
+       if (query)
+               contacts_query_destroy(query);
+}
+
+void ctx::ContactLogAggregator::__destroyContactLogList(contacts_list_h list)
+{
+       if (list)
+               contacts_list_destroy(list, true);
+
+       contacts_disconnect();
+}
+
+void ctx::ContactLogAggregator::__insertContactLogList(contacts_list_h list)
+{
+       IF_FAIL_VOID(contacts_list_first(list) == CONTACTS_ERROR_NONE);
+
+       do {
+               contacts_record_h record = NULL;
+               contacts_list_get_current_record_p(list, &record);
+               if (record == NULL) break;
+
+               ctx::Json data;
+
+               char* address = NULL;
+               int logType;
+               int duration = 0;
+               int accessTime = 0;
+
+               contacts_record_get_str_p(record, _contacts_phone_log.address, &address);
+
+               if (!address) {
+                       _W("Getting address failed");
+                       continue;
+               }
+
+               contacts_record_get_int(record, _contacts_phone_log.log_type, &logType);
+               contacts_record_get_int(record, _contacts_phone_log.extra_data1, &duration);
+               contacts_record_get_int(record, _contacts_phone_log.log_time, &accessTime);
+
+               data.set(NULL, SOCIAL_ADDRESS, address);
+               data.set(NULL, SOCIAL_PHONE_LOG_TYPE, logType);
+               data.set(NULL, STATS_DURATION, duration);
+               data.set(NULL, STATS_UNIV_TIME, accessTime);
+               data.set(NULL, STATS_LOCAL_TIME, accessTime + __timeDiff);
+
+               __dbManager.insert(0, SOCIAL_TABLE_CONTACT_LOG, data, NULL);
+
+       } while(contacts_list_next(list) == CONTACTS_ERROR_NONE);
+}
+
+void ctx::ContactLogAggregator::__removeExpiredLog()
+{
+       std::stringstream query;
+       query << "DELETE FROM " SOCIAL_TABLE_CONTACT_LOG " WHERE " \
+               STATS_UNIV_TIME " < strftime('%s', 'now') - " << LOG_RETENTION_PERIOD;
+       __dbManager.execute(0, query.str().c_str(), NULL);
+}
diff --git a/src/social-stats/LogAggregator.h b/src/social-stats/LogAggregator.h
new file mode 100644 (file)
index 0000000..cc3962d
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_STATS_SOCIAL_CONTACT_LOG_AGGREGATOR_H_
+#define _CONTEXT_STATS_SOCIAL_CONTACT_LOG_AGGREGATOR_H_
+
+#include <contacts.h>
+#include <DatabaseManager.h>
+#include <TimerManager.h>
+
+namespace ctx {
+
+       class ContactLogAggregator : public IDatabaseListener, public ITimerListener {
+       private:
+               int __timerId;
+               int __timeDiff;
+               TimerManager __timerManager;
+               DatabaseManager __dbManager;
+
+               void __createTable();
+               void __getUpdatedContactLogList(int last_time, contacts_list_h *list);
+               void __insertContactLogList(contacts_list_h list);
+               void __destroyContactLogList(contacts_list_h list);
+               void __removeExpiredLog();
+
+       public:
+               ContactLogAggregator();
+               ~ContactLogAggregator();
+
+               void aggregateContactLog();
+
+               void onTableCreated(unsigned int queryId, int error) {}
+               void onInserted(unsigned int queryId, int error, int64_t rowId) {}
+               void onExecuted(unsigned int queryId, int error, std::vector<Json>& records);
+               bool onTimerExpired(int timerId);
+
+       };      /* class ContactLogAggregator */
+
+}      /* namespace ctx */
+
+#endif /* End of _CONTEXT_STATS_SOCIAL_CONTACT_LOG_AGGREGTOR_H_ */
diff --git a/src/social-stats/SocialStatisticsTypes.h b/src/social-stats/SocialStatisticsTypes.h
new file mode 100644 (file)
index 0000000..7c68b93
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_STATS_SOCIAL_TYPES_H_
+#define _CONTEXT_STATS_SOCIAL_TYPES_H_
+
+#include "../shared/CommonTypes.h"
+
+#define SOCIAL_HISTORY_PRIV                    "callhistory.read"
+#define SOCIAL_SUBJ_LOGGER                     "stats/contact/logger"
+#define SOCIAL_SUBJ_FREQ_ADDRESS       "stats/contact/often"
+#define SOCIAL_SUBJ_FREQUENCY          "stats/contact/frequency"
+
+#define SOCIAL_TABLE_CONTACT_LOG       "Log_Contact"
+#define SOCIAL_TABLE_CONTACT_LOG_COLUMNS \
+       "Address TEXT NOT NULL, PLogType INTEGER NOT NULL, " \
+       "Duration INTEGER NOT NULL DEFAULT 0, " \
+       "UTC TIMESTAMP DEFAULT (strftime('%s', 'now')), " \
+       "LocalTime TIMESTAMP DEFAULT (strftime('%s', 'now', 'localtime'))"
+
+#define SOCIAL_TEMP_CONTACT_FREQ       "Temp_ContactFreq"
+#define SOCIAL_TEMP_CONTACT_FREQ_SQL \
+       "CREATE TABLE IF NOT EXISTS " SOCIAL_TEMP_CONTACT_FREQ \
+       " (Address TEXT NOT NULL UNIQUE, TotalCount INTEGER DEFAULT 0);"
+
+#define SOCIAL_COMMUNICATION_TYPE      "CommunicationType"
+#define SOCIAL_ADDRESS                         "Address"
+#define SOCIAL_PHONE_LOG_TYPE          "PLogType"
+#define TIME_DIFFERENCE                                "TimeDIff"
+
+enum SocialCommType {
+       SOCIAL_COMMUNICATION_TYPE_CALL = 1,
+       SOCIAL_COMMUNICATION_TYPE_MESSAGE,
+       SOCIAL_COMMUNICATION_TYPE_ALL
+};
+
+#endif /* End of _CONTEXT_STATS_SOCIAL_TYPES_ */
diff --git a/src/social-stats/SocialStatsLogger.cpp b/src/social-stats/SocialStatsLogger.cpp
new file mode 100644 (file)
index 0000000..a32fa80
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "SocialStatisticsTypes.h"
+#include "SocialStatsLogger.h"
+
+using namespace ctx;
+
+SocialStatsLogger::SocialStatsLogger() :
+       ContextProvider(SOCIAL_SUBJ_LOGGER)
+{
+}
+
+SocialStatsLogger::~SocialStatsLogger()
+{
+}
+
+int SocialStatsLogger::subscribe(Json option, Json* requestResult)
+{
+       return ERR_NONE;
+}
+
+int SocialStatsLogger::unsubscribe(Json option)
+{
+       return ERR_NONE;
+}
diff --git a/src/social-stats/SocialStatsLogger.h b/src/social-stats/SocialStatsLogger.h
new file mode 100644 (file)
index 0000000..17850e9
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_SOCIAL_STATS_LOGGER_H_
+#define _CONTEXT_SOCIAL_STATS_LOGGER_H_
+
+#include <ContextProvider.h>
+#include "LogAggregator.h"
+
+namespace ctx {
+
+       class SocialStatsLogger : public ContextProvider {
+       public:
+               SocialStatsLogger();
+               ~SocialStatsLogger();
+
+               int subscribe(Json option, Json* requestResult);
+               int unsubscribe(Json option);
+
+               void submitTriggerItem() {}
+
+       private:
+               ContactLogAggregator __aggregator;
+       };
+
+}      /* namespace ctx */
+
+#endif /* _CONTEXT_SOCIAL_STATS_LOGGER_H_ */
+
diff --git a/src/social-stats/SocialStatsProvider.cpp b/src/social-stats/SocialStatsProvider.cpp
new file mode 100644 (file)
index 0000000..0c0dd6d
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "SocialStatsProvider.h"
+#include "DbHandle.h"
+
+using namespace ctx;
+
+SocialStatsProvider::SocialStatsProvider(const char *subject) :
+       ContextProvider(subject)
+{
+}
+
+SocialStatsProvider::~SocialStatsProvider()
+{
+}
+
+bool SocialStatsProvider::isSupported()
+{
+       /* TODO */
+       return true;
+}
+
+void SocialStatsProvider::submitTriggerItem()
+{
+}
+
+int SocialStatsProvider::read(Json option, Json* requestResult)
+{
+       SocialDbHandle *handle = new(std::nothrow) SocialDbHandle(this);
+       IF_FAIL_RETURN_TAG(handle, ERR_OPERATION_FAILED, _E, "Memory allocation failed");
+
+       int err = handle->read(option);
+       if (err != ERR_NONE) {
+               delete handle;
+               return err;
+       }
+
+       return ERR_NONE;
+}
+
+void ContactFreqProvider::submitTriggerItem()
+{
+       registerTriggerItem(OPS_READ,
+                       "{" TRIG_DEF_RANK "," TRIG_DEF_TOTAL_COUNT "}",
+                       "{"
+                               "\"Address\":{\"type\":\"string\"},"
+                               TRIG_DEF_TIME_OF_DAY "," TRIG_DEF_DAY_OF_WEEK
+                       "}");
+}
diff --git a/src/social-stats/SocialStatsProvider.h b/src/social-stats/SocialStatsProvider.h
new file mode 100644 (file)
index 0000000..0ee94fd
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_SOCIAL_STATS_PROVIDER_H_
+#define _CONTEXT_SOCIAL_STATS_PROVIDER_H_
+
+#include <ContextProvider.h>
+#include "SocialStatisticsTypes.h"
+
+namespace ctx {
+
+       class SocialStatsProvider : public ContextProvider {
+       public:
+               int read(Json option, Json* requestResult);
+
+               bool isSupported();
+               virtual void submitTriggerItem();
+
+       protected:
+               SocialStatsProvider(const char *subject);
+               virtual ~SocialStatsProvider();
+       };
+
+
+       class ContactFreqProvider: public SocialStatsProvider {
+       public:
+               ContactFreqProvider() :
+                       SocialStatsProvider(SOCIAL_SUBJ_FREQUENCY) {}
+
+               void submitTriggerItem();
+       };
+
+
+       class TopContactsProvider: public SocialStatsProvider {
+       public:
+               TopContactsProvider() :
+                       SocialStatsProvider(SOCIAL_SUBJ_FREQ_ADDRESS) {}
+       };
+
+}      /* namespace ctx */
+
+#endif /* _CONTEXT_SOCIAL_STATS_PROVIDER_H_ */
diff --git a/src/statistics/CMakeLists.txt b/src/statistics/CMakeLists.txt
deleted file mode 100644 (file)
index 6b35770..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
-# prvd_cdef, prvd_deps, and prvd_srcs need to be set properly
-
-# Build flag for the prediction engine.
-# Set this to "yes" to enable the engine.
-SET(enable_prediction_engine "no")
-
-# Common Profile
-FILE(GLOB prvd_srcs ./*.cpp)
-FILE(GLOB prvd_srcs ${prvd_srcs} shared/*.cpp)
-FILE(GLOB prvd_srcs ${prvd_srcs} app/*.cpp)
-IF("${enable_prediction_engine}" STREQUAL "yes")
-       FILE(GLOB prvd_srcs ${prvd_srcs} prediction/*.cpp)
-ELSE("${enable_prediction_engine}" STREQUAL "yes")
-       SET(prvd_cdef ${prvd_cdef} _DISABLE_PREDICTION_ENGINE_)
-ENDIF("${enable_prediction_engine}" STREQUAL "yes")
-
-SET(prvd_deps capi-system-runtime-info pkgmgr pkgmgr-info capi-appfw-package-manager)
-SET(prvd_deps ${prvd_deps} capi-appfw-application capi-appfw-app-manager)
-SET(prvd_deps ${prvd_deps} capi-media-sound-manager)
-
-# Mobile Profile
-IF("${PROFILE}" STREQUAL "mobile")
-       FILE(GLOB prvd_srcs ${prvd_srcs} media/*.cpp)
-       FILE(GLOB prvd_srcs ${prvd_srcs} social/*.cpp)
-       SET(prvd_deps ${prvd_deps} contacts-service2 capi-content-media-content)
-ENDIF("${PROFILE}" STREQUAL "mobile")
-
-# Wearable Profile
-#IF("${PROFILE}" STREQUAL "wearable")
-#ENDIF("${PROFILE}" STREQUAL "wearable")
diff --git a/src/statistics/StatisticsContextProvider.cpp b/src/statistics/StatisticsContextProvider.cpp
deleted file mode 100644 (file)
index 0dba666..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.  *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <Types.h>
-#include <ContextProvider.h>
-#include <StatisticsContextProvider.h>
-
-#include "app/AppStatsProvider.h"
-#include "app/AppStatsLogger.h"
-
-#ifndef _DISABLE_PREDICTION_ENGINE_
-// include prediction engine header files here
-#endif
-
-#ifdef _MOBILE_
-#include "media/MediaStatsProvider.h"
-#include "media/MediaStatsLogger.h"
-#include "social/SocialStatsProvider.h"
-#include "social/SocialStatsLogger.h"
-#endif
-
-template<typename Provider>
-void registerProvider(const char *subject, const char *privilege)
-{
-       Provider *provider = new(std::nothrow) Provider();
-       IF_FAIL_VOID_TAG(provider, _E, "Memory allocation failed");
-
-       if (!provider->isSupported()) {
-               delete provider;
-               return;
-       }
-
-       provider->registerProvider(privilege, provider);
-       provider->submitTriggerItem();
-}
-
-SO_EXPORT bool ctx::initStatisticsContextProvider()
-{
-       registerProvider<AppStatsLogger>(APP_SUBJ_LOGGER, APP_HISTORY_PRIV);
-       registerProvider<RecentAppProvider>(APP_SUBJ_RECENTLY_USED, APP_HISTORY_PRIV);
-       registerProvider<FrequentAppProvider>(APP_SUBJ_FREQUENTLY_USED, APP_HISTORY_PRIV);
-       registerProvider<RareAppProvider>(APP_SUBJ_RARELY_USED, APP_HISTORY_PRIV);
-       registerProvider<AppPeakTimeProvider>(APP_SUBJ_PEAK_TIME, APP_HISTORY_PRIV);
-       registerProvider<AppSettingProvider>(APP_SUBJ_COMMON_SETTING, APP_HISTORY_PRIV);
-       registerProvider<AppFreqProvider>(APP_SUBJ_FREQUENCY, APP_HISTORY_PRIV);
-
-#ifndef _DISABLE_PREDICTION_ENGINE_
-// initialize the prediction engine here
-#endif
-
-#ifdef _MOBILE_
-       registerProvider<MediaStatsLogger>(MEDIA_SUBJ_LOGGER, MEDIA_HISTORY_PRIV);
-       registerProvider<MusicPeakTimeProvider>(MEDIA_SUBJ_PEAK_TIME_FOR_MUSIC, MEDIA_HISTORY_PRIV);
-       registerProvider<VideoPeakTimeProvider>(MEDIA_SUBJ_PEAK_TIME_FOR_VIDEO, MEDIA_HISTORY_PRIV);
-       registerProvider<MusicSettingProvider>(MEDIA_SUBJ_COMMON_SETTING_FOR_MUSIC, MEDIA_HISTORY_PRIV);
-       registerProvider<VideoSettingProvider>(MEDIA_SUBJ_COMMON_SETTING_FOR_VIDEO, MEDIA_HISTORY_PRIV);
-       registerProvider<MusicFreqProvider>(MEDIA_SUBJ_MUSIC_FREQUENCY, MEDIA_HISTORY_PRIV);
-       registerProvider<VideoFreqProvider>(MEDIA_SUBJ_VIDEO_FREQUENCY, MEDIA_HISTORY_PRIV);
-
-       registerProvider<SocialStatsLogger>(SOCIAL_SUBJ_LOGGER, SOCIAL_HISTORY_PRIV);
-       registerProvider<ContactFreqProvider>(SOCIAL_SUBJ_FREQUENCY, SOCIAL_HISTORY_PRIV);
-       registerProvider<TopContactsProvider>(SOCIAL_SUBJ_FREQ_ADDRESS, SOCIAL_HISTORY_PRIV);
-#endif
-
-       return true;
-}
diff --git a/src/statistics/app/ActiveWindowMonitor.cpp b/src/statistics/app/ActiveWindowMonitor.cpp
deleted file mode 100644 (file)
index c8d3120..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <sys/types.h>
-#include <time.h>
-#include <app_manager.h>
-
-#include <Json.h>
-#include <Types.h>
-#include "../shared/SystemInfo.h"
-#include "AppStatisticsTypes.h"
-#include "ActiveWindowMonitor.h"
-
-/* Active window changes frequently.
- * We thus consider the apps being foregrounded at least 3 secs */
-#define ONE_DAY_IN_SEC 86400
-
-ctx::AppUseMonitor::AppUseMonitor() :
-       __signalId(-1),
-       __lastCleanupTime(0),
-       __dbusWatcher(DBusType::SYSTEM)
-{
-       __startLogging();
-}
-
-ctx::AppUseMonitor::~AppUseMonitor()
-{
-       __stopLogging();
-}
-
-bool ctx::AppUseMonitor::__startLogging()
-{
-       __signalId = __dbusWatcher.watch(NULL, "/Org/Tizen/Aul/AppStatus", "org.tizen.aul.AppStatus", "AppStatusChange", this);
-       _D("Active window monitoring started (%lld)", __signalId);
-       return (__signalId > 0);
-}
-
-void ctx::AppUseMonitor::__stopLogging()
-{
-       if (__signalId > 0) {
-               __dbusWatcher.unwatch(__signalId);
-               _D("Active window monitoring stopped");
-       }
-}
-
-void ctx::AppUseMonitor::onSignal(const char* sender, const char* path, const char* iface, const char* name, GVariant* param)
-{
-       gint pid = 0;
-       const gchar *appId = NULL;
-       const gchar *pkgId = NULL;
-       const gchar *status = NULL;
-       const gchar *type = NULL;
-
-       g_variant_get(param, "(i&s&s&s&s)", &pid, &appId, &pkgId, &status, &type);
-       _D("AppEvent: %s, %s, %s", appId, status, type);
-
-       IF_FAIL_VOID(appId && status && type);
-       IF_FAIL_VOID(STR_EQ(type, "uiapp") && !__isSkippable(appId));
-
-       if (STR_EQ(status, "fg")) {
-               __createRecord(appId);
-       } else if (STR_EQ(status, "bg")) {
-               __finishRecord(appId);
-               __removeExpired();
-       }
-}
-
-void ctx::AppUseMonitor::__createRecord(std::string appId)
-{
-       int audioJack;
-       int systemVolume;
-       int mediaVolume;
-       std::string bssid;
-       Json data;
-       data.set(NULL, STATS_APP_ID, appId);
-
-       if (ctx::system_info::getAudioJackState(&audioJack))
-               data.set(NULL, STATS_AUDIO_JACK, audioJack);
-
-       if (ctx::system_info::getVolume(&systemVolume, &mediaVolume)) {
-               data.set(NULL, STATS_SYSTEM_VOLUME, systemVolume);
-               data.set(NULL, STATS_MEDIA_VOLUME, mediaVolume);
-       }
-
-       if (ctx::system_info::getWifiBssid(bssid))
-               data.set(NULL, STATS_BSSID, bssid);
-
-       __dbManager.insert(0, APP_TABLE_USAGE_LOG, data, NULL);
-}
-
-void ctx::AppUseMonitor::__finishRecord(std::string appId)
-{
-       /* TODO: It might be necessary to update system status here */
-       std::stringstream query;
-       query <<
-               "UPDATE " APP_TABLE_USAGE_LOG \
-               " SET " STATS_DURATION " = strftime('%s', 'now') - " STATS_UNIV_TIME \
-               " WHERE " STATS_COL_ROW_ID " = (" \
-                       "SELECT MAX(" STATS_COL_ROW_ID ") FROM " APP_TABLE_USAGE_LOG \
-                       " WHERE " STATS_APP_ID " = '" << appId << "'" \
-                       " AND " STATS_DURATION " = 0)";
-       __dbManager.execute(0, query.str().c_str(), NULL);
-}
-
-bool ctx::AppUseMonitor::__isSkippable(std::string appId)
-{
-       /* TODO: circular cache */
-       app_info_h appInfo = NULL;
-       int err = app_manager_get_app_info(appId.c_str(), &appInfo);
-       IF_FAIL_RETURN_TAG(err == APP_MANAGER_ERROR_NONE && appInfo, true, _E, "app_manager_get_app_info() failed");
-
-       bool nodisp = false;
-       err = app_info_is_nodisplay(appInfo, &nodisp);
-       if (err != APP_MANAGER_ERROR_NONE) {
-               app_info_destroy(appInfo);
-               _E("app_info_is_nodisplay() failed");
-               return true;
-       }
-
-       app_info_destroy(appInfo);
-       return nodisp;
-}
-
-void ctx::AppUseMonitor::__removeExpired()
-{
-       int timestamp = static_cast<int>(time(NULL));
-       IF_FAIL_VOID(timestamp - __lastCleanupTime >= ONE_DAY_IN_SEC);
-
-       __lastCleanupTime = timestamp;
-
-       std::stringstream query;
-       query << "DELETE FROM " APP_TABLE_USAGE_LOG " WHERE " \
-               STATS_UNIV_TIME " < strftime('%s', 'now') - " << LOG_RETENTION_PERIOD;
-       __dbManager.execute(0, query.str().c_str(), NULL);
-}
diff --git a/src/statistics/app/ActiveWindowMonitor.h b/src/statistics/app/ActiveWindowMonitor.h
deleted file mode 100644 (file)
index 64f0d34..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_STATS_APP_USE_MONITOR_H_
-#define _CONTEXT_STATS_APP_USE_MONITOR_H_
-
-#include <string>
-#include <sstream>
-#include <DBusSignalWatcher.h>
-#include <DatabaseManager.h>
-
-namespace ctx {
-
-       class AppUseMonitor : public IDBusSignalListener {
-       private:
-               int64_t __signalId;
-               int __lastCleanupTime;
-               DBusSignalWatcher __dbusWatcher;
-               DatabaseManager __dbManager;
-
-               bool __startLogging(void);
-               void __stopLogging(void);
-
-               bool __isSkippable(std::string appId);
-               void __createRecord(std::string appId);
-               void __finishRecord(std::string appId);
-               void __removeExpired();
-               void onSignal(const char *sender, const char *path, const char *iface, const char *name, GVariant *param);
-
-       public:
-               AppUseMonitor();
-               ~AppUseMonitor();
-       };      /* class AppUseMonitor */
-
-}      /* namespace ctx */
-
-#endif /* End of _CONTEXT_STATS_APP_USE_MONITOR_H_ */
diff --git a/src/statistics/app/AppStatisticsTypes.h b/src/statistics/app/AppStatisticsTypes.h
deleted file mode 100644 (file)
index 42b049e..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_STATS_APP_TYPES_H_
-#define _CONTEXT_STATS_APP_TYPES_H_
-
-#include "../shared/CommonTypes.h"
-
-#define APP_HISTORY_PRIV                       "apphistory.read"
-#define APP_SUBJ_LOGGER                                "stats/app/logger"
-#define APP_SUBJ_RECENTLY_USED         "stats/app/recently"
-#define APP_SUBJ_FREQUENTLY_USED       "stats/app/often"
-#define APP_SUBJ_RARELY_USED           "stats/app/rarely"
-#define APP_SUBJ_PEAK_TIME                     "stats/app/peak_time"
-#define APP_SUBJ_COMMON_SETTING                "stats/app/setting"
-#define APP_SUBJ_FREQUENCY                     "stats/app/frequency"
-
-#define APP_TABLE_REMOVABLE_APP        "Log_RemovableApp"
-#define APP_TABLE_REMOVABLE_APP_COLUMNS \
-       "AppId TEXT NOT NULL UNIQUE"
-
-#define APP_TABLE_USAGE_LOG            "Log_AppLaunch"
-#define APP_TABLE_USAGE_LOG_COLUMNS \
-       "AppId TEXT NOT NULL, Duration INTEGER NOT NULL DEFAULT 0, " \
-       "SystemVolume INTEGER, MediaVolume INTEGER, AudioJack INTEGER, " \
-       "BSSID TEXT, " \
-       "UTC TIMESTAMP DEFAULT (strftime('%s', 'now')), " \
-       "LocalTime TIMESTAMP DEFAULT (strftime('%s', 'now', 'localtime'))"
-
-#define APP_TEMP_USAGE_FREQ            "Temp_AppLaunchFreq"
-#define APP_TEMP_USAGE_FREQ_SQL \
-       "CREATE TABLE IF NOT EXISTS " APP_TEMP_USAGE_FREQ \
-       " (AppId TEXT NOT NULL UNIQUE, TotalCount INTEGER DEFAULT 0);"
-
-#endif /* End of _CONTEXT_STATS_APP_TYPES_H_ */
diff --git a/src/statistics/app/AppStatsLogger.cpp b/src/statistics/app/AppStatsLogger.cpp
deleted file mode 100644 (file)
index 9bbb390..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "AppStatisticsTypes.h"
-#include "AppStatsLogger.h"
-
-using namespace ctx;
-
-AppStatsLogger::AppStatsLogger() :
-       ContextProvider(APP_SUBJ_LOGGER),
-       __initializer(NULL),
-       __installMon(NULL),
-       __launchMon(NULL)
-{
-       __initializer = new(std::nothrow) AppDbInitializer();
-       IF_FAIL_VOID_TAG(__initializer, _E, "Memory allocation failed");
-
-       __installMon = new(std::nothrow) AppInstallMonitor();
-       __launchMon = new(std::nothrow) AppUseMonitor();
-       IF_FAIL_CATCH_TAG(__installMon && __launchMon, _E, "Memory allocation failed");
-       return;
-
-CATCH:
-       delete __installMon;
-       delete __launchMon;
-       __installMon = NULL;
-       __launchMon = NULL;
-}
-
-AppStatsLogger::~AppStatsLogger()
-{
-       delete __installMon;
-       delete __launchMon;
-}
-
-int AppStatsLogger::subscribe(Json option, Json* requestResult)
-{
-       return ERR_NONE;
-}
-
-int AppStatsLogger::unsubscribe(Json option)
-{
-       return ERR_NONE;
-}
diff --git a/src/statistics/app/AppStatsLogger.h b/src/statistics/app/AppStatsLogger.h
deleted file mode 100644 (file)
index b2104dd..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_APP_STATS_LOGGER_H_
-#define _CONTEXT_APP_STATS_LOGGER_H_
-
-#include <ContextProvider.h>
-#include "DbInit.h"
-#include "InstallMonitor.h"
-#include "ActiveWindowMonitor.h"
-
-namespace ctx {
-
-       class AppStatsLogger : public ContextProvider {
-       public:
-               AppStatsLogger();
-               ~AppStatsLogger();
-
-               int subscribe(Json option, Json *requestResult);
-               int unsubscribe(Json option);
-
-               void submitTriggerItem() {}
-
-       private:
-               AppDbInitializer *__initializer;
-               AppInstallMonitor *__installMon;
-               AppUseMonitor *__launchMon;
-       };
-
-}      /* namespace ctx */
-
-#endif /* _CONTEXT_APP_STATS_LOGGER_H_ */
diff --git a/src/statistics/app/AppStatsProvider.cpp b/src/statistics/app/AppStatsProvider.cpp
deleted file mode 100644 (file)
index 7e18049..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "AppStatsProvider.h"
-#include "DbHandle.h"
-
-using namespace ctx;
-
-AppStatsProvider::AppStatsProvider(const char *subject) :
-       ContextProvider(subject)
-{
-}
-
-AppStatsProvider::~AppStatsProvider()
-{
-}
-
-void AppStatsProvider::submitTriggerItem()
-{
-}
-
-int AppStatsProvider::read(Json option, Json *requestResult)
-{
-       AppDbHandle *handle = new(std::nothrow) AppDbHandle(this);
-       IF_FAIL_RETURN_TAG(handle, ERR_OPERATION_FAILED, _E, "Memory allocation failed");
-
-       int err = handle->read(option);
-       if (err != ERR_NONE) {
-               delete handle;
-               return err;
-       }
-
-       return ERR_NONE;
-}
-
-void AppFreqProvider::submitTriggerItem()
-{
-       registerTriggerItem(OPS_READ,
-                       "{" TRIG_DEF_RANK "," TRIG_DEF_TOTAL_COUNT "}",
-                       "{"
-                               "\"AppId\":{\"type\":\"string\"},"
-                               TRIG_DEF_TIME_OF_DAY "," TRIG_DEF_DAY_OF_WEEK
-                       "}");
-}
diff --git a/src/statistics/app/AppStatsProvider.h b/src/statistics/app/AppStatsProvider.h
deleted file mode 100644 (file)
index dccb66a..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_APP_STATS_PROVIDER_H_
-#define _CONTEXT_APP_STATS_PROVIDER_H_
-
-#include <ContextProvider.h>
-#include "AppStatisticsTypes.h"
-
-namespace ctx {
-
-       class AppStatsProvider : public ContextProvider {
-       public:
-               int read(Json option, Json *requestResult);
-               virtual void submitTriggerItem();
-
-       protected:
-               AppStatsProvider(const char *subject);
-               virtual ~AppStatsProvider();
-       };
-
-
-       class RecentAppProvider : public AppStatsProvider {
-       public:
-               RecentAppProvider() :
-                       AppStatsProvider(APP_SUBJ_RECENTLY_USED) {}
-       };
-
-
-       class FrequentAppProvider : public AppStatsProvider {
-       public:
-               FrequentAppProvider() :
-                       AppStatsProvider(APP_SUBJ_FREQUENTLY_USED) {}
-       };
-
-
-       class RareAppProvider : public AppStatsProvider {
-       public:
-               RareAppProvider() :
-                       AppStatsProvider(APP_SUBJ_RARELY_USED) {}
-       };
-
-
-       class AppPeakTimeProvider : public AppStatsProvider {
-       public:
-               AppPeakTimeProvider() :
-                       AppStatsProvider(APP_SUBJ_PEAK_TIME) {}
-       };
-
-
-       class AppSettingProvider : public AppStatsProvider {
-       public:
-               AppSettingProvider() :
-                       AppStatsProvider(APP_SUBJ_COMMON_SETTING) {}
-       };
-
-
-       class AppFreqProvider : public AppStatsProvider {
-       public:
-               AppFreqProvider() :
-                       AppStatsProvider(APP_SUBJ_FREQUENCY) {}
-
-               void submitTriggerItem();
-       };
-
-}      /* namespace ctx */
-
-#endif /* _CONTEXT_APP_STATS_PROVIDER_H_ */
diff --git a/src/statistics/app/DbHandle.cpp b/src/statistics/app/DbHandle.cpp
deleted file mode 100644 (file)
index 06021e3..0000000
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <sstream>
-#include <Types.h>
-#include "AppStatisticsTypes.h"
-#include "DbHandle.h"
-
-using namespace ctx;
-
-AppDbHandle::AppDbHandle(ContextProvider *provider) :
-       StatsDbHandleBase(provider)
-{
-}
-
-AppDbHandle::~AppDbHandle()
-{
-}
-
-int AppDbHandle::read(Json filter)
-{
-       std::string query;
-       const char *subject = reqProvider->getSubject();
-
-       if (STR_EQ(subject, APP_SUBJ_RECENTLY_USED)) {
-               query = createSqlRecentlyUsed(filter);
-
-       } else if (STR_EQ(subject, APP_SUBJ_FREQUENTLY_USED)) {
-               query = createSqlFrequentlyUsed(filter);
-
-       } else if (STR_EQ(subject, APP_SUBJ_RARELY_USED)) {
-               query = createSqlRarelyUsed(filter);
-
-       } else if (STR_EQ(subject, APP_SUBJ_PEAK_TIME)) {
-               query = createSqlPeakTime(filter);
-
-       } else if (STR_EQ(subject, APP_SUBJ_COMMON_SETTING)) {
-               query = createSqlCommonSetting(filter);
-
-       } else if (STR_EQ(subject, APP_SUBJ_FREQUENCY)) {
-               isTriggerItem = true;
-               query = createSqlFrequency(filter);
-       }
-
-       IF_FAIL_RETURN(!query.empty(), ERR_OPERATION_FAILED);
-
-       bool ret = executeQuery(filter, query.c_str());
-       IF_FAIL_RETURN(ret, ERR_OPERATION_FAILED);
-
-       return ERR_NONE;
-}
-
-std::string AppDbHandle::createWhereClauseWithDeviceStatus(Json filter)
-{
-       std::stringstream whereClause;
-       std::string bssid;
-       int audioJack;
-
-       whereClause << StatsDbHandleBase::createWhereClause(filter);
-
-       if (filter.get(NULL, STATS_BSSID, &bssid))
-               whereClause << " AND " STATS_BSSID " = '" << bssid << "'";
-
-       if (filter.get(NULL, STATS_AUDIO_JACK, &audioJack))
-               whereClause << " AND " STATS_AUDIO_JACK " = " << audioJack;
-
-       return whereClause.str();
-}
-
-std::string AppDbHandle::createSqlPeakTime(Json filter)
-{
-       return StatsDbHandleBase::createSqlPeakTime(filter, APP_TABLE_USAGE_LOG, createWhereClause(filter));
-}
-
-std::string AppDbHandle::createSqlCommonSetting(Json filter)
-{
-       return StatsDbHandleBase::createSqlCommonSetting(filter, APP_TABLE_USAGE_LOG, createWhereClause(filter));
-}
-
-std::string AppDbHandle::createSqlFrequency(Json filter)
-{
-       Json filterCleaned;
-       std::string weekStr;
-       std::string timeOfDay;
-       std::string appId;
-
-       if (!filter.get(NULL, STATS_APP_ID, &appId)) {
-               _E("Invalid parameter");
-               return "";
-       }
-
-       if (filter.get(NULL, STATS_DAY_OF_WEEK, &weekStr))
-               filterCleaned.set(NULL, STATS_DAY_OF_WEEK, weekStr);
-
-       if (filter.get(NULL, STATS_TIME_OF_DAY, &timeOfDay))
-               filterCleaned.set(NULL, STATS_TIME_OF_DAY, timeOfDay);
-
-       std::string whereClause = createWhereClause(filterCleaned);
-
-       std::stringstream query;
-
-       query <<
-               "DELETE FROM " APP_TEMP_USAGE_FREQ ";";
-
-       query <<
-               "INSERT INTO " APP_TEMP_USAGE_FREQ \
-               " SELECT " STATS_APP_ID ", COUNT(*) AS " STATS_TOTAL_COUNT \
-               " FROM " APP_TABLE_USAGE_LOG \
-               " WHERE " << whereClause <<
-               " GROUP BY " STATS_APP_ID ";";
-
-       query <<
-               "INSERT OR IGNORE INTO " APP_TEMP_USAGE_FREQ " (" STATS_APP_ID ")" \
-               " VALUES ('" << appId << "');";
-
-       query <<
-               "SELECT S." STATS_APP_ID ", S." STATS_TOTAL_COUNT ", 1+COUNT(lesser." STATS_TOTAL_COUNT ") AS " STATS_RANK \
-               " FROM " APP_TEMP_USAGE_FREQ " AS S" \
-               " LEFT JOIN " APP_TEMP_USAGE_FREQ " AS lesser" \
-               " ON S." STATS_TOTAL_COUNT " < lesser." STATS_TOTAL_COUNT \
-               " WHERE S." STATS_APP_ID " = '" << appId << "'";
-
-       return query.str();
-}
-
-std::string AppDbHandle::createSqlRecentlyUsed(Json filter)
-{
-       std::stringstream query;
-       int limit = DEFAULT_LIMIT;
-
-       filter.get(NULL, STATS_RESULT_SIZE, &limit);
-
-       query <<
-               "SELECT " STATS_APP_ID ", " \
-                       "COUNT(*) AS " STATS_TOTAL_COUNT ", " \
-                       "SUM(" STATS_DURATION ") AS " STATS_TOTAL_DURATION ", " \
-                       "MAX(" STATS_UNIV_TIME ") AS " STATS_LAST_TIME \
-               " FROM " APP_TABLE_USAGE_LOG \
-               " WHERE " << createWhereClauseWithDeviceStatus(filter) <<
-               " GROUP BY " STATS_APP_ID \
-               " ORDER BY MAX(" STATS_UNIV_TIME ") DESC" \
-               " LIMIT " << limit;
-
-       return query.str();
-}
-
-std::string AppDbHandle::createSqlFrequentlyUsed(Json filter)
-{
-       std::stringstream query;
-       int limit = DEFAULT_LIMIT;
-
-       filter.get(NULL, STATS_RESULT_SIZE, &limit);
-
-       query <<
-               "SELECT " STATS_APP_ID ", " \
-                       "COUNT(*) AS " STATS_TOTAL_COUNT ", " \
-                       "SUM(" STATS_DURATION ") AS " STATS_TOTAL_DURATION ", " \
-                       "MAX(" STATS_UNIV_TIME ") AS " STATS_LAST_TIME \
-               " FROM " APP_TABLE_USAGE_LOG \
-               " WHERE " << createWhereClauseWithDeviceStatus(filter) <<
-               " GROUP BY " STATS_APP_ID \
-               " ORDER BY COUNT(*) DESC" \
-               " LIMIT " << limit;
-
-       return query.str();
-}
-
-std::string AppDbHandle::createSqlRarelyUsed(Json filter)
-{
-       std::stringstream query;
-       int limit = DEFAULT_LIMIT;
-
-       filter.get(NULL, STATS_RESULT_SIZE, &limit);
-
-       query <<
-               "SELECT i." STATS_APP_ID ", " \
-                       "COUNT(u." STATS_DURATION ") AS " STATS_TOTAL_COUNT ", " \
-                       "IFNULL(SUM(u." STATS_DURATION "),0) AS " STATS_TOTAL_DURATION ", " \
-                       "IFNULL(MAX(u." STATS_UNIV_TIME "),-1) AS " STATS_LAST_TIME \
-               " FROM " APP_TABLE_REMOVABLE_APP " i LEFT OUTER JOIN (" \
-                       " SELECT * FROM " APP_TABLE_USAGE_LOG \
-                       " WHERE " << createWhereClauseWithDeviceStatus(filter) << ") u" \
-                       " ON i." STATS_APP_ID " = u." STATS_APP_ID \
-               " GROUP BY i." STATS_APP_ID \
-               " ORDER BY " STATS_TOTAL_COUNT " ASC" \
-               " LIMIT " << limit;
-
-       return query.str();
-}
-
-void AppDbHandle::replyTriggerItem(int error, Json &jsonResult)
-{
-       IF_FAIL_VOID_TAG(STR_EQ(reqProvider->getSubject(), APP_SUBJ_FREQUENCY), _E, "Invalid subject");
-
-       Json results;
-       std::string valStr;
-       int val;
-
-       jsonResult.get(NULL, STATS_APP_ID, &valStr);
-       results.set(NULL, STATS_APP_ID, valStr);
-       jsonResult.get(NULL, STATS_TOTAL_COUNT, &val);
-       results.set(NULL, STATS_TOTAL_COUNT, val);
-       jsonResult.get(NULL, STATS_RANK, &val);
-       results.set(NULL, STATS_RANK, val);
-
-       reqProvider->replyToRead(reqFilter, error, results);
-}
diff --git a/src/statistics/app/DbHandle.h b/src/statistics/app/DbHandle.h
deleted file mode 100644 (file)
index 9084d87..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_STATS_APP_DB_HANDLE_H_
-#define _CONTEXT_STATS_APP_DB_HANDLE_H_
-
-#include <string>
-#include <Json.h>
-#include "../shared/DbHandleBase.h"
-
-namespace ctx {
-       class AppDbHandle : public StatsDbHandleBase {
-       public:
-               AppDbHandle(ContextProvider *provider);
-               ~AppDbHandle();
-
-               int read(Json filter);
-
-       protected:
-               std::string createWhereClauseWithDeviceStatus(Json filter);
-               std::string createSqlRecentlyUsed(Json filter);
-               std::string createSqlFrequentlyUsed(Json filter);
-               std::string createSqlRarelyUsed(Json filter);
-               std::string createSqlPeakTime(Json filter);
-               std::string createSqlCommonSetting(Json filter);
-               std::string createSqlFrequency(Json filter);
-               void replyTriggerItem(int error, Json &jsonResult);
-       };
-}
-
-#endif /* End of _CONTEXT_STATS_APP_DB_HANDLE_H_ */
diff --git a/src/statistics/app/DbInit.cpp b/src/statistics/app/DbInit.cpp
deleted file mode 100644 (file)
index 9c4ec24..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <sstream>
-#include <Json.h>
-#include <Types.h>
-#include "AppStatisticsTypes.h"
-#include "DbInit.h"
-
-#define EMPTY_CHECKER_QID 999
-
-ctx::AppDbInitializer::AppDbInitializer()
-{
-       __createTable();
-       __checkAppList();
-}
-
-ctx::AppDbInitializer::~AppDbInitializer()
-{
-}
-
-void ctx::AppDbInitializer::__createTable()
-{
-       static bool done = false;
-       IF_FAIL_VOID(!done);
-
-       __dbManager.createTable(0, APP_TABLE_USAGE_LOG, APP_TABLE_USAGE_LOG_COLUMNS, NULL, NULL);
-       __dbManager.createTable(0, APP_TABLE_REMOVABLE_APP, APP_TABLE_REMOVABLE_APP_COLUMNS, NULL, NULL);
-       __dbManager.execute(0, APP_TEMP_USAGE_FREQ_SQL, NULL);
-
-       done = true;
-}
-
-void ctx::AppDbInitializer::__checkAppList()
-{
-       __dbManager.execute(EMPTY_CHECKER_QID, "SELECT * FROM " APP_TABLE_REMOVABLE_APP " LIMIT 1", this);
-}
-
-void ctx::AppDbInitializer::__duplicateAppList()
-{
-       int err;
-       package_manager_filter_h filter;
-
-       err = package_manager_filter_create(&filter);
-       IF_FAIL_VOID_TAG(err == PACKAGE_MANAGER_ERROR_NONE, _E, "package_manager_filter_create() failed");
-
-       err = package_manager_filter_add_bool(filter, PACKAGE_MANAGER_PKGINFO_PROP_REMOVABLE, true);
-       IF_FAIL_CATCH_TAG(err == PACKAGE_MANAGER_ERROR_NONE, _E, "package_manager_filter_add_bool() failed");
-
-       err = package_manager_filter_foreach_package_info(filter, __packageInfoCb, this);
-       IF_FAIL_CATCH_TAG(err == PACKAGE_MANAGER_ERROR_NONE, _E, "package_manager_filter_foreach_package_info() failed");
-
-CATCH:
-       if (filter)
-               package_manager_filter_destroy(filter);
-}
-
-bool ctx::AppDbInitializer::__packageInfoCb(package_info_h packageInfo, void *userData)
-{
-       int err = package_info_foreach_app_from_package(packageInfo, PACKAGE_INFO_UIAPP, __appInfoCb, userData);
-       IF_FAIL_RETURN_TAG(err == PACKAGE_MANAGER_ERROR_NONE, false, _E, "package_info_foreach_app_from_package() failed");
-       return true;
-}
-
-bool ctx::AppDbInitializer::__appInfoCb(package_info_app_component_type_e compType, const char *appId, void *userData)
-{
-       Json data;
-       DatabaseManager dbManager;
-
-       data.set(NULL, STATS_APP_ID, appId);
-       return dbManager.insert(0, APP_TABLE_REMOVABLE_APP, data, NULL);
-}
-
-void ctx::AppDbInitializer::onTableCreated(unsigned int queryId, int error)
-{
-}
-
-void ctx::AppDbInitializer::onInserted(unsigned int queryId, int error, int64_t rowId)
-{
-}
-
-void ctx::AppDbInitializer::onExecuted(unsigned int queryId, int error, std::vector<Json>& records)
-{
-       if (queryId != EMPTY_CHECKER_QID) {
-               _E("Unknown Query ID: %d", queryId);
-               delete this;
-               return;
-       }
-
-       if (records.empty())
-               __duplicateAppList();
-
-       delete this;
-}
diff --git a/src/statistics/app/DbInit.h b/src/statistics/app/DbInit.h
deleted file mode 100644 (file)
index c8d18c2..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_STATS_APP_DB_INITIALIZER_H_
-#define _CONTEXT_STATS_APP_DB_INITIALIZER_H_
-
-#include <package_manager.h>
-#include <DatabaseManager.h>
-
-namespace ctx {
-
-       class AppDbInitializer : public IDatabaseListener {
-       private:
-               void __createTable();
-               void __checkAppList();
-               void __duplicateAppList();
-
-               void onTableCreated(unsigned int queryId, int error);
-               void onInserted(unsigned int queryId, int error, int64_t rowId);
-               void onExecuted(unsigned int queryId, int error, std::vector<Json>& records);
-
-               static bool __packageInfoCb(package_info_h packageInfo, void *userData);
-               static bool __appInfoCb(package_info_app_component_type_e compType, const char *appId, void *userData);
-
-               DatabaseManager __dbManager;
-
-       public:
-               AppDbInitializer();
-               ~AppDbInitializer();
-       };
-
-}      /* namespace ctx */
-
-#endif /* End of _CONTEXT_STATS_APP_DB_INITIALIZER_H_ */
diff --git a/src/statistics/app/InstallMonitor.cpp b/src/statistics/app/InstallMonitor.cpp
deleted file mode 100644 (file)
index af5169f..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <sstream>
-#include <glib.h>
-#include <Json.h>
-#include <Types.h>
-#include <DatabaseManager.h>
-#include "AppStatisticsTypes.h"
-#include "InstallMonitor.h"
-
-static package_manager_event_type_e __lastEventType;
-
-ctx::AppInstallMonitor::AppInstallMonitor() :
-       __pkgmgrHandle(NULL)
-{
-       __startMonitoring();
-}
-
-ctx::AppInstallMonitor::~AppInstallMonitor()
-{
-       __stopMonitoring();
-}
-
-bool ctx::AppInstallMonitor::__startMonitoring()
-{
-       int err = package_manager_create(&__pkgmgrHandle);
-       IF_FAIL_RETURN_TAG(err == PACKAGE_MANAGER_ERROR_NONE, false, _E, "package_manager_create() failed");
-
-       err = package_manager_set_event_cb(__pkgmgrHandle, __packageEventCb, this);
-       IF_FAIL_RETURN_TAG(err == PACKAGE_MANAGER_ERROR_NONE, false, _E, "package_manager_set_event_cb() failed");
-
-       return true;
-}
-
-void ctx::AppInstallMonitor::__stopMonitoring()
-{
-       if(__pkgmgrHandle) {
-               package_manager_unset_event_cb(__pkgmgrHandle);
-               package_manager_destroy(__pkgmgrHandle);
-               __pkgmgrHandle = NULL;
-       }
-}
-
-void ctx::AppInstallMonitor::__packageEventCb(const char *type, const char *package, package_manager_event_type_e eventType, package_manager_event_state_e eventState, int progress, package_manager_error_e error, void *userData)
-{
-       IF_FAIL_VOID_TAG(error == PACKAGE_MANAGER_ERROR_NONE, _E, "package_manager error: %d", error);
-
-       if (!(eventType == PACKAGE_MANAGER_EVENT_TYPE_INSTALL && eventState == PACKAGE_MANAGER_EVENT_STATE_COMPLETED) &&
-               !(eventType == PACKAGE_MANAGER_EVENT_TYPE_UNINSTALL && eventState == PACKAGE_MANAGER_EVENT_STATE_STARTED)) {
-               _D("Skipping event type-%d / state-%d", eventType, eventState);
-               return;
-       }
-
-       package_info_h pkgInfo;
-       int err = package_manager_get_package_info(package, &pkgInfo);
-       IF_FAIL_VOID_TAG(err == PACKAGE_MANAGER_ERROR_NONE, _E, "package_manager_get_package_info() failed");
-
-       __lastEventType = eventType;
-
-       err = package_info_foreach_app_from_package(pkgInfo, PACKAGE_INFO_UIAPP, __appInfoCb, userData);
-       if (err != PACKAGE_MANAGER_ERROR_NONE)
-               _E("package_info_foreach_app_from_package() failed");
-
-       package_info_destroy(pkgInfo);
-}
-
-bool ctx::AppInstallMonitor::__appInfoCb(package_info_app_component_type_e compType, const char *appId, void *userData)
-{
-       DatabaseManager dbManager;
-
-       if (__lastEventType == PACKAGE_MANAGER_EVENT_TYPE_INSTALL) {
-               Json data;
-               data.set(NULL, STATS_APP_ID, appId);
-               dbManager.insert(0, APP_TABLE_REMOVABLE_APP, data, NULL);
-       } else if (__lastEventType == PACKAGE_MANAGER_EVENT_TYPE_UNINSTALL) {
-               dbManager.execute(0, __createDeletionQuery(APP_TABLE_REMOVABLE_APP, appId).c_str(), NULL);
-               dbManager.execute(0, __createDeletionQuery(APP_TABLE_USAGE_LOG, appId).c_str(), NULL);
-       }
-
-       return true;
-}
-
-std::string ctx::AppInstallMonitor::__createDeletionQuery(const char* tableName, const char* appId)
-{
-       std::stringstream query;
-       query << "DELETE FROM " << tableName;
-       query << " WHERE " STATS_APP_ID " = '" << appId << "'";
-       return query.str();
-}
diff --git a/src/statistics/app/InstallMonitor.h b/src/statistics/app/InstallMonitor.h
deleted file mode 100644 (file)
index a022946..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_STATS_APP_INSTALL_MONITOR_H_
-#define _CONTEXT_STATS_APP_INSTALL_MONITOR_H_
-
-#include <package_manager.h>
-#include <DatabaseManager.h>
-
-namespace ctx {
-
-       class AppInstallMonitor : public IDatabaseListener {
-       private:
-               package_manager_h __pkgmgrHandle;
-
-               bool __startMonitoring();
-               void __stopMonitoring();
-
-               static std::string __createDeletionQuery(const char* tableName, const char* appId);
-               static void __packageEventCb(const char *type, const char *package, package_manager_event_type_e eventType, package_manager_event_state_e eventState, int progress, package_manager_error_e error, void *userData);
-               static bool __appInfoCb(package_info_app_component_type_e compType, const char *appId, void *userData);
-
-               void onTableCreated(unsigned int queryId, int error) {}
-               void onInserted(unsigned int queryId, int error, int64_t rowId) {}
-               void onExecuted(unsigned int queryId, int error, std::vector<Json>& records) {}
-
-       public:
-               AppInstallMonitor();
-               ~AppInstallMonitor();
-       };
-
-}      /* namespace ctx */
-
-#endif /* End of _CONTEXT_STATS_APP_INSTALL_MONITOR_H_ */
diff --git a/src/statistics/app/app_inactive_detector/AppInactiveDetector.cpp b/src/statistics/app/app_inactive_detector/AppInactiveDetector.cpp
deleted file mode 100644 (file)
index 148d655..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <Types.h>
-#include <ContextManager.h>
-#include <Json.h>
-#include "AppInactiveDetector.h"
-#include "AppInactiveDetectorTypes.h"
-#include "InactiveDetector.h"
-
-
-ctx::app_inactive_detector_provider *ctx::app_inactive_detector_provider::__instance = NULL;
-
-ctx::app_inactive_detector_provider::app_inactive_detector_provider()
-{
-}
-
-ctx::app_inactive_detector_provider::~app_inactive_detector_provider()
-{
-}
-
-ctx::ContextProvider *ctx::app_inactive_detector_provider::create(void *data)
-{
-       IF_FAIL_RETURN(!__instance, __instance);
-       __instance = new(std::nothrow) app_inactive_detector_provider();
-       IF_FAIL_RETURN_TAG(__instance, NULL, _E, "Memory allocation failed");
-       _I(BLUE("Created"));
-       return __instance;
-}
-
-void ctx::app_inactive_detector_provider::destroy(void *data)
-{
-       IF_FAIL_VOID(__instance);
-       delete __instance;
-       __instance = NULL;
-       _I(BLUE("Destroyed"));
-}
-
-int ctx::app_inactive_detector_provider::subscribe(const char *subject, ctx::Json option, ctx::Json* request_result)
-{
-       return ERR_NOT_SUPPORTED;
-}
-
-int ctx::app_inactive_detector_provider::unsubscribe(const char *subject, ctx::Json option)
-{
-       return ERR_NOT_SUPPORTED;
-}
-
-int ctx::app_inactive_detector_provider::read(const char *subject, ctx::Json option, ctx::Json* request_result)
-{
-       _I(BLUE("Read"));
-       _J("Option", option);
-
-       int error = engine->read(subject, option);
-       return error == ERR_NONE ? ERR_NONE : error;
-}
-
-int ctx::app_inactive_detector_provider::write(const char *subject, ctx::Json data, ctx::Json* request_result)
-{
-       return ERR_NOT_SUPPORTED;
-}
-
-bool ctx::app_inactive_detector_provider::is_supported()
-{
-       return true;
-}
diff --git a/src/statistics/app/app_inactive_detector/AppInactiveDetector.h b/src/statistics/app/app_inactive_detector/AppInactiveDetector.h
deleted file mode 100644 (file)
index 588130a..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __CONTEXT_APP_INACTIVE_DETECTOR_H__
-#define __CONTEXT_APP_INACTIVE_DETECTOR_H__
-
-#include <ContextProvider.h>
-#include "AppInactiveDetectorTypes.h"
-#include "InactiveDetector.h"
-
-namespace ctx {
-
-       class app_inactive_detector_provider : public ContextProvider {
-
-               public:
-                       static ContextProvider *create(void *data);
-                       static void destroy(void *data);
-                       static bool is_supported();
-
-                       int subscribe(const char *subject, ctx::Json option, ctx::Json *request_result);
-                       int unsubscribe(const char *subject, ctx::Json option);
-                       int read(const char *subject, ctx::Json option, ctx::Json *request_result);
-                       int write(const char *subject, ctx::Json data, ctx::Json *request_result);
-
-               private:
-                       static app_inactive_detector_provider *__instance;
-                       inactive_detector *engine;
-
-                       app_inactive_detector_provider();
-                       ~app_inactive_detector_provider();
-
-       };      /* class app_inactive_detector_provider */
-
-}      /* namespace ctx */
-
-#endif /* __CONTEXT_APP_INACTIVE_DETECTOR_H__ */
\ No newline at end of file
diff --git a/src/statistics/app/app_inactive_detector/AppInactiveDetectorTypes.h b/src/statistics/app/app_inactive_detector/AppInactiveDetectorTypes.h
deleted file mode 100644 (file)
index b058b54..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __CONTEXT_APP_INACTIVE_DETECTOR_TYPES__
-#define __CONTEXT_APP_INACTIVE_DETECTOR_TYPES__
-
-#include <string>
-
-// Context Items
-//#define APP_INACTIVE_SUBJ_RECALCULATE                "app/recalculate"
-#define APP_INACTIVE_SUBJ_GET_APPS_INACTIVE            "app/inactive"
-#define APP_INACTIVE_SUBJ_GET_APPS_ACTIVE              "app/active"
-#define APP_INACTIVE_SUBJ_GET_APPS_WEIGHT              "app/weight"
-#define APP_INACTIVE_SUBJ_UPDATE_CLUSTERS              "app/update"
-
-enum {
-               APP_INACTIVE_QUERY_ID_GET_APPS_WEIGHT = 1,
-               APP_INACTIVE_QUERY_ID_GET_APPS_INACTIVE = 2,
-               APP_INACTIVE_QUERY_ID_GET_APPS_ACTIVE = 3,
-               APP_INACTIVE_QUERY_ID_UPDATE_CLUSTERS = 4
-};
-
-// Database
-#define APP_INACTIVE_DETECTOR_APPINFO_TABLE                                            "context_app_info"
-#define APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS                              "app_info"
-#define APP_INACTIVE_DETECTOR_APPINFO_COLUMN_ID                                        "_id"
-#define APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME              "package_name"
-#define APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_TYPE              "package_type"
-#define APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_NODISPLAY              "is_nodisplay"
-#define APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ENABLED                        "is_enabled"
-#define APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ATBOOT                 "is_atboot"
-#define APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_PRELOADED              "is_preloaded"
-#define APP_INACTIVE_DETECTOR_APPINFO_COLUMN_TIMESTAMP                 "timestamp"
-
-#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_TABLE                                              "context_app_launch_log"
-#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_TABLE_ALIAS                                        "app_launch_log"
-#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_ID                                  "_id"
-#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_CONTEXT_APP_INFO_ID "context_app_info_id"
-#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_DURATION                            "duration"
-#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_SYSTEM_VOLUME               "system_volume"
-#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_BSSID                               "bssid"
-#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_TIMESTAMP                   "timestamp"
-#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_TIMESTAMP_UTC               "timestamp_utc"
-
-#define APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE                                         "context_app_activity_classified"
-#define APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE_ALIAS                           "app_activity_classified"
-#define APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_ID                                     "_id"
-#define APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_CONTEXT_APP_INFO_ID    "context_app_info_id"
-#define APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_ACTIVITY_RATE          "activity_rate"
-#define APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_TIMEFRAME                      "timeframe"
-#define APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_IS_ACTIVE                      "is_active"
-
-
-#define APP_INACTIVE_DETECTOR_VIRTUAL_TABLE_ALIAS              "virtual_app_history"
-#define APP_INACTIVE_DETECTOR_VIRTUAL_COLUMN_WEIGHT            "weight"
-
-// Output Data Key
-#define APP_INACTIVE_DETECTOR_DATA_READ                                                        "AppsList"
-#define APP_INACTIVE_DETECTOR_DATA_TIMESTAMP_FROM                              "timestamp_from"
-#define APP_INACTIVE_DETECTOR_ACTIVITY_RATE                                            "activity_rate"
-#define APP_INACTIVE_DETECTOR_DATA_TIMEFRAME                                   "timeframe"
-#define APP_INACTIVE_DETECTOR_DATA_ISACTIVE                                            "is_active"
-
-//Other
-#define APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMESTAMP      "$timestamp"
-#define APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_CLUSTER                "$cluster"
-#define APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMEFRAME      "$timeframe"
-#define APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_VALUES         "$values"
-
-// Objects
-struct app_t {
-       int id;
-       std::string package_name;
-       int is_nodisplay;
-       int is_enabled;
-       int is_atboot;
-       int is_preloaded;
-       double timestamp;
-       int weight;
-       int is_active;
-       int timeframe;
-};
-
-
-#define APP_TYPE_INACTIVE_INACTIVE     1
-#define APP_TYPE_INACTIVE_ACTIVE       2
-
-
-#define APP_INACTIVE_TASK_START_HOUR   3
-#define APP_INACTIVE_TASK_START_MINUTE 0
-
-
-#define CONTEXT_HISTORY_FILTER_TIME_INTERVAL_ONEDAY            60*60*24
-#define CONTEXT_HISTORY_FILTER_TIME_INTERVAL_THREEDAYS 60*60*24*3
-#define CONTEXT_HISTORY_FILTER_TIME_INTERVAL_ONEWEEK   60*60*24*7
-#define CONTEXT_HISTORY_FILTER_TIME_INTERVAL_TWOWEEKS  60*60*24*14
-#define CONTEXT_HISTORY_FILTER_TIME_INTERVAL_ONEMONTH  60*60*24*31
-
-
-
-#endif /* __CONTEXT_APP_INACTIVE_DETECTOR_TYPES__ */
\ No newline at end of file
diff --git a/src/statistics/app/app_inactive_detector/InactiveDetector.cpp b/src/statistics/app/app_inactive_detector/InactiveDetector.cpp
deleted file mode 100644 (file)
index 6cc1820..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <ctime>
-#include <Types.h>
-#include "InactiveDetector.h"
-#include "InactiveDetectorWeight.h"
-#include "InactiveDetectorStorage.h"
-#include "InactiveDetectorClassificator.h"
-#include "TimerManager.h"
-
-ctx::inactive_detector::inactive_detector()
-{
-       timer_id = timer_mgr.setAt( // execute once every night
-                                       APP_INACTIVE_TASK_START_HOUR,
-                                       APP_INACTIVE_TASK_START_MINUTE,
-                                       DayOfWeek::EVERYDAY,
-                                       this);
-       if (timer_id < 0) {
-               _E("inactive_detector timer set FAIL");
-               return;
-       } else {
-               update_clusters();
-               _D("inactive_detector timer set SUCCESS");
-       }
-
-}
-
-ctx::inactive_detector::~inactive_detector()
-{
-       if (timer_id >= 0) {
-               timer_mgr.remove(timer_id);
-               _D("inactive_detejctor timer removed");
-       }
-
-}
-
-bool ctx::inactive_detector::onTimerExpired(int timerId)
-{
-       update_clusters();
-       return true;
-}
-
-int ctx::inactive_detector::update_clusters()
-{
-       // define timeframes stack
-       std::vector<int> timeframes;
-       timeframes.push_back(CONTEXT_HISTORY_FILTER_TIME_INTERVAL_ONEDAY);
-       timeframes.push_back(CONTEXT_HISTORY_FILTER_TIME_INTERVAL_THREEDAYS);
-       timeframes.push_back(CONTEXT_HISTORY_FILTER_TIME_INTERVAL_ONEWEEK);
-       timeframes.push_back(CONTEXT_HISTORY_FILTER_TIME_INTERVAL_TWOWEEKS);
-       timeframes.push_back(CONTEXT_HISTORY_FILTER_TIME_INTERVAL_ONEMONTH);
-
-       // recalculate weights
-       // foreach timeframe
-       for(std::vector<int>::iterator timeframe = timeframes.begin();
-               timeframe != timeframes.end(); timeframe++)
-       {
-               inactive_detector_weight i_detector_weight;
-               int error = i_detector_weight.request_weights(*timeframe);
-               _E("update_clusters request_weights:%d, error:%d", *timeframe, error);
-       }
-
-       return ERR_NONE;
-}
-
-void ctx::inactive_detector::on_cluster_update_finished(std::vector<app_t> *apps_with_weight, int error)
-{
-       if (error == ERR_NONE) {
-               _I("on_cluster_update_finished success");
-       }
-       // clean memory
-       delete apps_with_weight;
-}
-
-int ctx::inactive_detector::read(
-                       const char *subject,
-                       ctx::Json option)
-{
-       ctx::inactive_detector_storage *handle = new(std::nothrow) ctx::inactive_detector_storage();
-       IF_FAIL_RETURN_TAG(handle, ERR_OPERATION_FAILED, _E, "Memory allocation failed");
-
-       int err = handle->read(subject, option);
-       if (err != ERR_NONE) {
-               delete handle;
-               return err;
-       }
-
-       return ERR_NONE;
-}
-
-ctx::Json ctx::inactive_detector::to_json(std::vector<app_t> *app_infos)
-{
-       ctx::Json data;
-
-       for(std::vector<app_t>::iterator app_info = app_infos->begin();
-               app_info != app_infos->end(); app_info++)
-       {
-               ctx::Json app_j;
-               app_j.set(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME, app_info->package_name);
-               app_j.set(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_NODISPLAY, app_info->is_nodisplay);
-               app_j.set(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ENABLED, app_info->is_enabled);
-               app_j.set(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ATBOOT, app_info->is_atboot);
-               app_j.set(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_PRELOADED, app_info->is_preloaded);
-               app_j.set(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_TIMESTAMP, app_info->timestamp);
-       }
-       return data;
-}
diff --git a/src/statistics/app/app_inactive_detector/InactiveDetector.h b/src/statistics/app/app_inactive_detector/InactiveDetector.h
deleted file mode 100644 (file)
index 8c2d0a0..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __CONTEXT_INACTIVE_DETECTOR_H__
-#define __CONTEXT_INACTIVE_DETECTOR_H__
-
-#include <string>
-#include <Json.h>
-#include <vector>
-#include "AppInactiveDetectorTypes.h"
-#include <TimerManager.h>
-
-namespace ctx {
-
-       class inactive_detector : public ITimerListener {
-               private:
-                       int timer_id;
-                       TimerManager timer_mgr;
-               public:
-                       inactive_detector();
-                       ~inactive_detector();
-
-                       int read(const char *subject,
-                               ctx::Json option);
-
-                       int update_clusters();
-                       void on_cluster_update_finished(
-                               std::vector<app_t> *apps_classified,
-                               int error);
-                       ctx::Json to_json(std::vector<app_t> *apps);
-
-                       bool onTimerExpired(int timerId);
-       };      /* class inactive_detector */
-
-}      /* namespace ctx */
-
-
-#endif /* __CONTEXT_INACTIVE_DETECTOR_H__ */
diff --git a/src/statistics/app/app_inactive_detector/InactiveDetectorClassificator.cpp b/src/statistics/app/app_inactive_detector/InactiveDetectorClassificator.cpp
deleted file mode 100644 (file)
index 5e5859b..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <Types.h>
-#include "InactiveDetector.h"
-#include "AppInactiveDetectorTypes.h"
-#include "InactiveDetectorClassificator.h"
-#include "InactiveDetectorClassificatorKmeans.h"
-
-int ctx::inactive_detector_classificator::classify(std::vector<app_t> *apps_with_weights)
-{
-       inactive_detector_classificator_kmeans kmeans;
-       int error = kmeans.classify(apps_with_weights);
-
-       return error;
-}
diff --git a/src/statistics/app/app_inactive_detector/InactiveDetectorClassificator.h b/src/statistics/app/app_inactive_detector/InactiveDetectorClassificator.h
deleted file mode 100644 (file)
index fc9abd0..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __CONTEXT_INACTIVE_DETECTOR_CLASSIFICATOR_H__
-#define __CONTEXT_INACTIVE_DETECTOR_CLASSIFICATOR_H__
-
-#include <vector>
-#include "AppInactiveDetectorTypes.h"
-#include <Json.h>
-
-namespace ctx {
-
-       class inactive_detector_classificator
-       {
-               public:
-                       inactive_detector_classificator();
-                       ~inactive_detector_classificator();
-
-                       int classify(std::vector<app_t> *apps_with_weights);
-       };      /* class inactive_detector_classificator */
-
-}      /* namespace ctx */
-
-#endif /* __CONTEXT_INACTIVE_DETECTOR_CLASSIFICATOR_H__ */
diff --git a/src/statistics/app/app_inactive_detector/InactiveDetectorClassificatorKmeans.cpp b/src/statistics/app/app_inactive_detector/InactiveDetectorClassificatorKmeans.cpp
deleted file mode 100644 (file)
index c0cb93e..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <Types.h>
-#include "AppInactiveDetectorTypes.h"
-#include "InactiveDetectorClassificatorKmeans.h"
-#include "InactiveDetectorClassificatorKmeansTypes.h"
-#include <math.h>
-#include <stdlib.h>
-
-double ctx::inactive_detector_classificator_kmeans::randomf(double x)
-{
-       return x * rand() / (RAND_MAX - 1.);
-}
-
-double ctx::inactive_detector_classificator_kmeans::glide_function(double x)
-{
-       double value = sqrt(log(x) + 1);
-       return (value > 0 ? value : 0);
-}
-
-point_s *ctx::inactive_detector_classificator_kmeans::reproject_to_2d(std::vector<app_t> *apps_with_weights)
-{
-       int distr_size = apps_with_weights->size();
-       point_s *p = new point_s[distr_size];
-
-       int i=0;
-       for(std::vector<app_t>::iterator apps_with_weight = apps_with_weights->begin();
-               apps_with_weight != apps_with_weights->end(); apps_with_weight++)
-       {
-               point_s the_point;
-
-               the_point.x = glide_function(apps_with_weight->weight); // normalize weight values
-               the_point.y = 0; //remove 3rd dimension of the data
-               the_point.origin_id = apps_with_weight->package_name;
-
-               p[i] = the_point;
-               i++;
-       }
-
-       return p;
-}
-
-bool ctx::inactive_detector_classificator_kmeans::annotate_data(std::vector<app_t> *apps_with_weights, point_s *c)
-{
-       int i=0, max_group=-1;
-
-       for(std::vector<app_t>::iterator apps_with_weight = apps_with_weights->begin();
-               apps_with_weight != apps_with_weights->end(); apps_with_weight++)
-       {
-               apps_with_weight->is_active = c[i].group;
-               i++;
-               max_group = c[i].group > max_group ? c[i].group : max_group;
-       }
-
-       return max_group == APP_INACTIVE_DETECTOR_KMEANS_CLUSTER_COUNT;
-}
-
-double ctx::inactive_detector_classificator_kmeans::distance_to(point_s *p_from,
-       point_s *p_to)
-{
-       double x = p_from->x - p_to->x, y = p_from->y - p_to->y;
-       return x*x + y*y;
-}
-
-int ctx::inactive_detector_classificator_kmeans::nearest(point_s *pt,
-       point_s *centers,
-       int cluster_number,
-       double *distance)
-{
-       int i;
-       int min_i = pt->group;
-       point_s *c;
-
-       double d;
-       double min_d = HUGE_VAL;
-
-       for_n {
-               if (min_d >(d = distance_to(c, pt))) {
-                       min_d = d; min_i = i;
-               }
-       }
-
-       if (distance) *distance = min_d;
-       return min_i;
-}
-
-void ctx::inactive_detector_classificator_kmeans::kpp(point_s *points, int length, point_s *centers, int cluster_number)
-{
-       int j;
-       int n_cluster;
-       double sum;
-       double *d = new double[length];
-
-       point_s *p;
-       centers[0] = points[rand() % length];
-       for (n_cluster = 1; n_cluster < cluster_number; n_cluster++) {
-               sum = 0;
-               for_len{
-                       nearest(p, centers, n_cluster, d + j);
-                       sum += d[j];
-               }
-               sum = randomf(sum);
-               for_len{
-                       if ((sum -= d[j]) > 0) continue;
-                       centers[n_cluster] = points[j];
-                       break;
-               }
-       }
-       for_len p->group = nearest(p, centers, n_cluster, 0);
-
-       delete d;
-}
-
-point_s *ctx::inactive_detector_classificator_kmeans::lloyd(point_s *points, int length, int cluster_number)
-{
-       int i, j, min_i;
-       int changed;
-
-       point_s *centers = new point_s;
-       point_s *p, *c;
-
-       /* k++ init */
-       kpp(points, length, centers, cluster_number);
-
-       do {
-               /* group element for centroids are used as counters */
-               for_n{ c->group = 0; c->x = c->y = 0; }
-                       for_len{
-                               c = centers + p->group;
-                               c->group++;
-                               c->x += p->x; c->y += p->y;
-                       }
-               for_n{ c->x /= c->group; c->y /= c->group; }
-
-               changed = 0;
-               /* find closest centroid of each point */
-               for_len{
-                       min_i = nearest(p, centers, cluster_number, 0);
-                       if (min_i != p->group) {
-                               changed++;
-                               p->group = min_i;
-                       }
-               }
-       } while (changed > (length >> 10)); /* stop when 99.9% of points are good */
-
-       for_n{ c->group = i; }
-
-       return centers;
-}
-
-int ctx::inactive_detector_classificator_kmeans::classify(std::vector<app_t> *apps_with_weights)
-{
-       //array of generated points
-       point_s *v = reproject_to_2d(apps_with_weights);
-       //mark cluster for each point, output centers
-       point_s *c = lloyd(v, apps_with_weights->size(), APP_INACTIVE_DETECTOR_KMEANS_CLUSTER_COUNT);
-       //append the result to input data
-       bool classification_is_success = annotate_data(apps_with_weights, c);
-
-       return classification_is_success ? ERR_NONE : ERR_OPERATION_FAILED;
-}
diff --git a/src/statistics/app/app_inactive_detector/InactiveDetectorClassificatorKmeans.h b/src/statistics/app/app_inactive_detector/InactiveDetectorClassificatorKmeans.h
deleted file mode 100644 (file)
index adc1fe8..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __CONTEXT_INACTIVE_DETECTOR_CLASSIFICATOR_KMEANS_H__
-#define __CONTEXT_INACTIVE_DETECTOR_CLASSIFICATOR_KMEANS_H__
-
-#include <vector>
-#include "InactiveDetectorClassificatorKmeansTypes.h"
-#include <Json.h>
-
-namespace ctx {
-
-       #define for_n for (c = centers, i = 0; i < cluster_number; i++, c++)
-       #define for_len for (j = 0, p = points; j < length; j++, p++)
-
-       class inactive_detector_classificator_kmeans
-       {
-               private:
-                       double randomf(double x);
-                       double glide_function(double x);
-                       point_s *reproject_to_2d(std::vector<app_t> *apps_with_weights);
-                       bool annotate_data(std::vector<app_t> *apps_with_weights, point_s *c);
-
-                       double distance_to(point_s *p_from, point_s *p_to);
-                       int nearest(point_s *pt, point_s *centers, int cluster_number, double *distance);
-                       void kpp(point_s *points, int length, point_s *centers, int centers_count);
-                       point_s *lloyd(point_s *points, int length, int cluster_number);
-               public:
-                       inactive_detector_classificator_kmeans();
-                       ~inactive_detector_classificator_kmeans();
-
-                       int classify(std::vector<app_t> *apps_with_weights);
-       };      /* class inactive_detector_classificator_kmeans */
-}      /* namespace ctx */
-
-#endif /* __CONTEXT_INACTIVE_DETECTOR_CLASSIFICATOR_KMEANS_H__ */
diff --git a/src/statistics/app/app_inactive_detector/InactiveDetectorClassificatorKmeansTypes.h b/src/statistics/app/app_inactive_detector/InactiveDetectorClassificatorKmeansTypes.h
deleted file mode 100644 (file)
index 8aa7270..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __CONTEXT_APP_INACTIVE_DETECTOR_CLASSIFICATOR_KMEANS_TYPES__
-#define __CONTEXT_APP_INACTIVE_DETECTOR_CLASSIFICATOR_KMEANS_TYPES__
-
-#define APP_INACTIVE_DETECTOR_KMEANS_CLUSTER_COUNT 2
-
-typedef struct {
-       std::string origin_id;
-       double x;
-       double y;
-       int group;
-} point_s;
-
-#endif
\ No newline at end of file
diff --git a/src/statistics/app/app_inactive_detector/InactiveDetectorStorage.cpp b/src/statistics/app/app_inactive_detector/InactiveDetectorStorage.cpp
deleted file mode 100644 (file)
index 052c3fe..0000000
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <sstream>
-#include <ctime>
-#include <string>
-#include <memory>
-#include <Types.h>
-#include "InactiveDetector.h"
-#include "InactiveDetectorStorage.h"
-#include "InactiveDetectorStorageQueries.h"
-#include "InactiveDetectorClassificator.h"
-#include "AppInactiveDetectorTypes.h"
-
-/*int ctx::inactive_detector_storage::create_table()
-{
-       bool ret = __dbManager.createTable(0, WIFI_TABLE_NAME, WIFI_CREATE_TABLE_COLUMNS, NULL, NULL);
-       _D("Table Creation Request: %s", ret ? "SUCCESS" : "FAIL");
-       return ret;
-}*/
-
-
-
-// expected Json format example: {timeframe: 1; is_active: 0}
-int ctx::inactive_detector_storage::read(
-                       const char *subject,
-                       ctx::Json filter)
-{
-       std::string query;
-       query = query_get_apps(subject, filter);
-
-       IF_FAIL_RETURN(!query.empty(), ERR_OPERATION_FAILED);
-
-       bool ret = __dbManager.execute(
-               STR_EQ(subject, APP_INACTIVE_SUBJ_GET_APPS_INACTIVE) ?
-                       APP_INACTIVE_QUERY_ID_GET_APPS_INACTIVE :
-                       APP_INACTIVE_QUERY_ID_GET_APPS_ACTIVE,
-               query.c_str(),
-               this);
-
-       IF_FAIL_RETURN(ret, ERR_OPERATION_FAILED);
-
-       return ERR_NONE;
-}
-
-std::string ctx::inactive_detector_storage::query_get_apps(const char *subject, ctx::Json filter)
-{
-       double timeframe;
-       int is_active;
-
-       std::string query(GET_APP_INFO_INACTIVE_QUERY);
-       std::string placeholder_timeframe(APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMEFRAME);
-       std::string placeholder_is_active(APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_CLUSTER);
-
-       filter.get(NULL, APP_INACTIVE_DETECTOR_DATA_TIMEFRAME, &timeframe);
-       filter.get(NULL, APP_INACTIVE_DETECTOR_DATA_ISACTIVE, &is_active);
-
-       std::stringstream timeframe_stream;
-       timeframe_stream << timeframe;
-
-       std::stringstream is_active_stream;
-       is_active_stream << is_active;
-
-       inject_params(query, placeholder_timeframe, timeframe_stream.str());
-       inject_params(query, placeholder_is_active, is_active_stream.str());
-
-       return query;
-}
-
-std::string ctx::inactive_detector_storage::query_update_apps(std::vector<app_t> *apps_with_weights)
-{
-       std::string delete_query(DELETE_APP_ACTIVITY_CLASSIFIED_BY_TIMEFRAME);
-       std::string insert_query(INSERT_APP_ACTIVITY_CLASSIFIED);
-       std::string placeholder_timeframe(APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMEFRAME);
-       std::string placeholder_values(APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_VALUES);
-       std::string placeholder_is_active(APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_CLUSTER);
-
-       std::stringstream timeframe_stream;
-       timeframe_stream << apps_with_weights->front().timeframe;
-
-       inject_params(delete_query, placeholder_timeframe, timeframe_stream.str());
-       inject_params(insert_query, placeholder_values, subquery_form_values(apps_with_weights));
-
-       std::stringstream result;
-       result << delete_query << insert_query;
-       return result.str();
-}
-
-// foreach app_info id+cluster -> select for insert
-std::string ctx::inactive_detector_storage::subquery_form_values(std::vector<app_t> *apps_with_weights)
-{
-       std::stringstream select_elements;
-
-       for(std::vector<app_t>::iterator row = apps_with_weights->begin();
-                       row != apps_with_weights->end(); row++)
-       {
-               //SELECT 1 as is_active, 1 as timeframe,  3964 as context_app_info_id
-               std::stringstream select_element;
-               select_element << " SELECT " << row->is_active << " as ";
-               select_element << APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_IS_ACTIVE;
-               select_element << ", " << row->timeframe << " as ";
-               select_element << APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_TIMEFRAME;
-               select_element << ", " << row->id << " as ";
-               select_element << APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_CONTEXT_APP_INFO_ID;
-
-               if ((row != apps_with_weights->end()) && (row == --apps_with_weights->end()))
-                       select_element << " UNION ";
-
-               select_elements << select_element;
-       }
-
-       return select_elements.str();
-}
-
-void ctx::inactive_detector_storage::json_to_object(std::vector<Json>& records,
-       std::vector<app_t> *apps_with_weights, bool result_mode)
-{
-       for(std::vector<Json>::iterator row = records.begin();
-               row != records.end(); row++)
-       {
-               app_t app_with_weight;
-               if (result_mode)
-               {
-                       row->get(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME,
-                               &app_with_weight.package_name);
-                       row->get(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_NODISPLAY,
-                               &app_with_weight.is_nodisplay);
-                       row->get(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ENABLED,
-                               &app_with_weight.is_enabled);
-                       row->get(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ATBOOT,
-                               &app_with_weight.is_atboot);
-                       row->get(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_PRELOADED,
-                               &app_with_weight.is_preloaded);
-                       row->get(NULL, APP_INACTIVE_DETECTOR_VIRTUAL_COLUMN_WEIGHT,
-                               &app_with_weight.weight);
-               }
-               else
-               {
-                       row->get(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_ID,
-                               &app_with_weight.id);
-                       row->get(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_TIMESTAMP,
-                               &app_with_weight.timestamp);
-                       row->get(NULL, APP_INACTIVE_DETECTOR_VIRTUAL_COLUMN_WEIGHT,
-                               &app_with_weight.weight);
-                       row->get(NULL, APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_IS_ACTIVE,
-                               &app_with_weight.is_active);
-               }
-
-               apps_with_weights->push_back(app_with_weight);
-       }
-}
-
-void ctx::inactive_detector_storage::onExecuted(unsigned int query_id,
-       int error,
-       std::vector<Json>& records)
-{
-       if (error != ERR_NONE) {
-               _E("query_id:%d, error:%d", query_id, error);
-               return;
-       }
-
-       std::vector<app_t> *apps_with_weights = NULL;
-       if (query_id == APP_INACTIVE_QUERY_ID_GET_APPS_INACTIVE ||
-               query_id == APP_INACTIVE_QUERY_ID_GET_APPS_ACTIVE)
-       {
-               json_to_object(records, apps_with_weights, TRUE);
-       }
-       else if (query_id == APP_INACTIVE_QUERY_ID_GET_APPS_WEIGHT) {
-
-               json_to_object(records, apps_with_weights, FALSE);
-
-               if (apps_with_weights->size() > 0) {
-                       inactive_detector_classificator i_detector_classificator;
-                       int _error = i_detector_classificator.classify(apps_with_weights);
-
-                       if(_error == ERR_NONE)
-                       {
-                               std::string query;
-                               query = query_update_apps(apps_with_weights);
-                               bool ret = __dbManager.execute(APP_INACTIVE_QUERY_ID_UPDATE_CLUSTERS,
-                                       query.c_str(),
-                                       this);
-                               _D("load visits execute query result: %s", ret ? "SUCCESS" : "FAIL");
-                       }
-                       else
-                       {
-                               _E("classification query_id:%d, error:%d",
-                                       query_id, _error);
-                       }
-               }
-       }
-       else if (query_id == APP_INACTIVE_QUERY_ID_UPDATE_CLUSTERS) {
-               _D("UPDATE_CLUSTERS execute query id: %d", query_id);
-       }
-       else {
-               _E("unknown query_id:%d", query_id);
-       }
-}
-
-void ctx::inactive_detector_storage::inject_params(std::string& str, const std::string& from, const std::string& to)
-{
-       if(from.empty())
-               return;
-       size_t start_pos = 0;
-       while((start_pos = str.find(from, start_pos)) != std::string::npos) {
-               str.replace(start_pos, from.length(), to);
-               start_pos += to.length();
-       }
-}
-
-// normalzie weights
-int ctx::inactive_detector_storage::update_ranks()
-{
-       return ERR_NONE;
-}
-
-int ctx::inactive_detector_storage::get_apps_info_w_weights(
-               double timestamp_from)
-{
-       std::stringstream timestamp_stream;
-       timestamp_stream << timestamp_from;
-       std::string timestamp_str = timestamp_stream.str();
-
-       std::string query(GET_APP_INFO_W_WEIGHT_QUERY);
-       std::string placeholder(APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMESTAMP);
-
-       inject_params(query, placeholder, timestamp_str);
-
-       bool ret = __dbManager.execute(APP_INACTIVE_QUERY_ID_GET_APPS_WEIGHT,
-               query.c_str(),
-               this);
-       _D("load visits execute query result: %s", ret ? "SUCCESS" : "FAIL");
-
-       return ERR_NONE ;
-}
diff --git a/src/statistics/app/app_inactive_detector/InactiveDetectorStorage.h b/src/statistics/app/app_inactive_detector/InactiveDetectorStorage.h
deleted file mode 100644 (file)
index 0eab066..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __CONTEXT_INACTIVE_DETECTOR_STORAGE_H__
-#define __CONTEXT_INACTIVE_DETECTOR_STORAGE_H__
-
-#include <vector>
-#include "AppInactiveDetectorTypes.h"
-#include <Json.h>
-#include <DatabaseManager.h>
-
-namespace ctx {
-
-       class inactive_detector_storage : public IDatabaseListener
-       {
-               private:
-                       //int type;  //TODO: enum
-                       void inject_params(std::string& str,
-                               const std::string& from,
-                               const std::string& to);
-
-                       void json_to_object(std::vector<Json>& records,
-                               std::vector<app_t> *apps_with_weights, bool result_mode);
-
-                       std::string query_get_apps(const char *subject,
-                               ctx::Json filter);
-
-                       std::string query_update_apps(std::vector<app_t> *apps_with_weights);
-
-                       std::string subquery_form_values(std::vector<app_t> *apps_with_weights);
-
-                       void onTableCreated(unsigned int query_id, int error) {}
-                       void onInserted(unsigned int query_id, int error, int64_t row_id) {}
-                       void onExecuted(unsigned int query_id, int error, std::vector<Json>& records);
-
-                       DatabaseManager __dbManager;
-
-               public:
-                       inactive_detector_storage();
-                       ~inactive_detector_storage();
-
-                       int read(const char *subject,
-                               ctx::Json filter);
-
-                       int update_ranks();
-                       int get_apps_info_w_weights(double timestamp_from);
-       };      /* class inactive_detector_storage */
-
-}      /* namespace ctx */
-
-#endif /* __CONTEXT_INACTIVE_DETECTOR_STORAGE_H__ */
diff --git a/src/statistics/app/app_inactive_detector/InactiveDetectorStorageQueries.h b/src/statistics/app/app_inactive_detector/InactiveDetectorStorageQueries.h
deleted file mode 100644 (file)
index 4ef20d3..0000000
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __CONTEXT_INACTIVE_DETECTOR_STORAGE_QUERIES_H__
-#define __CONTEXT_INACTIVE_DETECTOR_STORAGE_QUERIES_H__
-
-#include <vector>
-#include "AppInactiveDetectorTypes.h"
-
-/*
-
---1 calculate weights
-SELECT
-       app_info._id,
-       app_info.package_name,
-       app_info.is_nodisplay,
-       app_info.is_enabled,
-       app_info.is_atboot,
-       app_info.is_preloaded,
-       app_info.timestamp,
-       
-       app_hist_g.weight as weight
-FROM
-       context_app_info app_info
-
-INNER JOIN
-
-       (SELECT
-               distinct package_name ,
-                       IFNULL((select count(package_name) from context_app_launch_log
-                               where package_name == app_hist.package_name  AND timestamp> 8640412900), 0 )
-                               *
-                       IFNULL((select sum(duration) from  context_app_launch_log       
-                               where package_name == app_hist.package_name AND timestamp> 8640412900) , 0)
-               as weight
-
-       FROM context_app_launch_log app_hist
-)app_hist_g
-
-ON app_hist_g.package_name
-=
-app_info.package_name
-
-ORDER BY app_hist_g.weight
-
-*/
-
-#define GET_APP_INFO_W_WEIGHT_QUERY "SELECT "\
-       " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS  "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_ID ", "\
-       " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS  "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME ", "\
-       " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS  "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_TYPE ", "\
-       " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS  "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_NODISPLAY ", "\
-       " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS  "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ENABLED ", "\
-       " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS  "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ATBOOT ", "\
-       " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS  "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_PRELOADED ", "\
-       " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS  "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_TIMESTAMP ", "\
-       ""\
-       " " APP_INACTIVE_DETECTOR_VIRTUAL_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_VIRTUAL_COLUMN_WEIGHT \
-       ""\
-       " FROM " APP_INACTIVE_DETECTOR_APPINFO_TABLE " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS \
-       ""\
-       " INNER JOIN " \
-       "       (SELECT "\
-               " DISTINCT " APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME "," \
-                       " IFNULL((SELECT COUNT(" APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME ")" \
-                               " FROM " APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_TABLE \
-                                       " WHERE " APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME "==" APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME \
-                                       " AND " \
-                                       " " APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_TIMESTAMP " >= " APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMESTAMP \
-                       "), 0) " \
-                       " * " \
-                       " IFNULL((SELECT SUM(" APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_DURATION ")" \
-                               " FROM " APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_TABLE \
-                                       " WHERE " APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME "==" APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME \
-                                       " AND " \
-                                       " " APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_TIMESTAMP " >= " APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMESTAMP \
-                                       ""\
-                       "), 0) " \
-                       " as " APP_INACTIVE_DETECTOR_VIRTUAL_COLUMN_WEIGHT \
-               " FROM " APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_TABLE " " APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_TABLE_ALIAS \
-               ") " APP_INACTIVE_DETECTOR_VIRTUAL_TABLE_ALIAS \
-       " ON " APP_INACTIVE_DETECTOR_VIRTUAL_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME \
-       " = " \
-       " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME \
-       " ORDER BY " APP_INACTIVE_DETECTOR_VIRTUAL_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_VIRTUAL_COLUMN_WEIGHT
-
-/*
---2 select inner join context_app_info
-SELECT
-       app_info.package_name,
-       app_info.is_nodisplay,
-       app_info.is_enabled,
-       app_info.is_atboot,
-       app_info.is_preloaded,
-
-       activity_classified.activity_rate
-
-FROM
-       context_activity_classified activity_classified
-INNER JOIN
-       context_app_info app_info
-ON activity_classified.context_app_info_id = app_info._id
-
-WHERE
-       activity_classified.is_active = 1
-       AND
-       activity_classified.timeframe = 1
-*/
-
-#define GET_APP_INFO_INACTIVE_QUERY "SELECT "\
-       " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS  "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_ID ", "\
-       " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS  "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME ", "\
-       " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS  "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_NODISPLAY ", "\
-       " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS  "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ENABLED ", "\
-       " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS  "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ATBOOT ", "\
-       " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS  "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_PRELOADED ", "\
-       " "\
-       " " APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_ACTIVITY_RATE " "\
-       " FROM "\
-       " " APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE " " APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE_ALIAS " "\
-       " INNER JOIN "\
-       " " APP_INACTIVE_DETECTOR_APPINFO_TABLE " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS " "\
-       " ON " APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_CONTEXT_APP_INFO_ID ""\
-               " = " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_ID " "\
-       " WHERE "\
-       APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_IS_ACTIVE ""\
-               " = " APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_CLUSTER ""\
-       " AND "\
-       " " APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_TIMEFRAME ""\
-               " = " APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMEFRAME ""
-
-/*
---3 update ranks and clusters for each timeframe: delete all for each time frame, add new calculations for apps
-DELETE FROM 
-       context_activity_classified 
-WHERE 
-       timeframe = 1
-*/
-
-#define DELETE_APP_ACTIVITY_CLASSIFIED_BY_TIMEFRAME "DELETE FROM "\
-       APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE \
-       " WHERE "\
-       " timeframe = " APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMEFRAME
-
-
-/*INSERT INTO 
-       context_activity_classified  
-       (is_active, 
-       timeframe, 
-       context_app_info_id)
-SELECT 
-       is_active, 
-       timeframe,
-       context_app_info_id
-FROM  --make loop
-       (
-       SELECT 1 as is_active, 1 as timeframe,  3964 as context_app_info_id
-       UNION 
-       SELECT 0 as is_active, 1 as timeframe,  3964 as context_app_info_id 
-       ) q
-*/
-
-#define INSERT_APP_ACTIVITY_CLASSIFIED " INSERT INTO "\
-       APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE \
-       "( " APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_IS_ACTIVE ", "\
-       APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_TIMEFRAME ", "\
-       APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_CONTEXT_APP_INFO_ID ")" \
-"SELECT " \
-       APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_IS_ACTIVE "," \
-       APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_TIMEFRAME ", "\
-       APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_CONTEXT_APP_INFO_ID \
-"FROM"\
-       "(" \
-               APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_VALUES \
-       ") q"
-
-
-
-#endif /* __CONTEXT_INACTIVE_DETECTOR_STORAGE_QUERIES_H__ */
diff --git a/src/statistics/app/app_inactive_detector/InactiveDetectorWeight.cpp b/src/statistics/app/app_inactive_detector/InactiveDetectorWeight.cpp
deleted file mode 100644 (file)
index 202301b..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <Types.h>
-#include "InactiveDetectorWeight.h"
-#include "InactiveDetectorStorage.h"
-
-int ctx::inactive_detector_weight::request_weights(
-                       double timestamp_from)
-{
-       inactive_detector_storage ids;
-       // query the database for the result
-       int error = ids.get_apps_info_w_weights(timestamp_from);
-
-       return error;
-}
diff --git a/src/statistics/app/app_inactive_detector/InactiveDetectorWeight.h b/src/statistics/app/app_inactive_detector/InactiveDetectorWeight.h
deleted file mode 100644 (file)
index 8e87473..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __CONTEXT_INACTIVE_DETECTOR_WEIGHT_H__
-#define __CONTEXT_INACTIVE_DETECTOR_WEIGHT_H__
-
-// #include <string>
-// #include <sstream>
-
-namespace ctx {
-
-       class inactive_detector_weight {
-               public:
-                       inactive_detector_weight() {};
-                       ~inactive_detector_weight() {};
-                       int request_weights(double timestamp_from);// {};
-       };      /* class inactive_detector_weight */
-
-}      /* namespace ctx */
-
-#endif /* __CONTEXT_INACTIVE_DETECTOR_WEIGHT_H__ */
\ No newline at end of file
diff --git a/src/statistics/media/DbHandle.cpp b/src/statistics/media/DbHandle.cpp
deleted file mode 100644 (file)
index e8f0f03..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <sstream>
-#include <Types.h>
-#include "../shared/SystemInfo.h"
-#include "MediaStatisticsTypes.h"
-#include "DbHandle.h"
-
-using namespace ctx;
-
-MediaDbHandle::MediaDbHandle(ContextProvider *provider) :
-       StatsDbHandleBase(provider)
-{
-}
-
-MediaDbHandle::~MediaDbHandle()
-{
-}
-
-int MediaDbHandle::read(Json filter)
-{
-       //TODO: filter validation (in the API side?)
-       std::string query;
-       const char *subject = reqProvider->getSubject();
-
-       if (STR_EQ(subject, MEDIA_SUBJ_PEAK_TIME_FOR_MUSIC)) {
-               query = createSqlPeakTime(MEDIA_TYPE_MUSIC, filter);
-
-       } else if (STR_EQ(subject, MEDIA_SUBJ_PEAK_TIME_FOR_VIDEO)) {
-               query = createSqlPeakTime(MEDIA_TYPE_VIDEO, filter);
-
-       } else if (STR_EQ(subject, MEDIA_SUBJ_COMMON_SETTING_FOR_MUSIC)) {
-               query = createSqlCommonSetting(MEDIA_TYPE_MUSIC, filter);
-
-       } else if (STR_EQ(subject, MEDIA_SUBJ_COMMON_SETTING_FOR_VIDEO)) {
-               query = createSqlCommonSetting(MEDIA_TYPE_VIDEO, filter);
-
-       } else if (STR_EQ(subject, MEDIA_SUBJ_MUSIC_FREQUENCY)) {
-               isTriggerItem = true;
-               query = createSqlFrequency(MEDIA_TYPE_MUSIC, filter);
-
-       } else if (STR_EQ(subject, MEDIA_SUBJ_VIDEO_FREQUENCY)) {
-               isTriggerItem = true;
-               query = createSqlFrequency(MEDIA_TYPE_VIDEO, filter);
-       }
-
-       IF_FAIL_RETURN(!query.empty(), ERR_OPERATION_FAILED);
-
-       bool ret = executeQuery(filter, query.c_str());
-       IF_FAIL_RETURN(ret, ERR_OPERATION_FAILED);
-
-       return ERR_NONE;
-}
-
-std::string MediaDbHandle::createWhereClause(int mediaType, Json filter)
-{
-       std::stringstream whereClause;
-
-       whereClause << CX_MEDIA_TYPE " = " << mediaType << " AND ";
-       whereClause << StatsDbHandleBase::createWhereClause(filter);
-
-       return whereClause.str();
-}
-
-std::string MediaDbHandle::createSqlPeakTime(int mediaType, Json filter)
-{
-       std::string where = createWhereClause(mediaType, filter);
-       return StatsDbHandleBase::createSqlPeakTime(filter, MEDIA_TABLE_NAME, where);
-}
-
-std::string MediaDbHandle::createSqlCommonSetting(int mediaType, Json filter)
-{
-       std::string where = createWhereClause(mediaType, filter);
-       return StatsDbHandleBase::createSqlCommonSetting(filter, MEDIA_TABLE_NAME, where);
-}
-
-std::string MediaDbHandle::createSqlFrequency(int mediaType, Json filter)
-{
-       Json filterCleaned;
-       std::string weekStr;
-       std::string timeOfDay;
-
-       if (filter.get(NULL, STATS_DAY_OF_WEEK, &weekStr))
-               filterCleaned.set(NULL, STATS_DAY_OF_WEEK, weekStr);
-
-       if (filter.get(NULL, STATS_TIME_OF_DAY, &timeOfDay))
-               filterCleaned.set(NULL, STATS_TIME_OF_DAY, timeOfDay);
-
-       std::string whereClause = createWhereClause(mediaType, filterCleaned);
-
-       std::stringstream query;
-       query <<
-               "SELECT IFNULL(COUNT(*),0) AS " STATS_TOTAL_COUNT \
-               " FROM " MEDIA_TABLE_NAME \
-               " WHERE " << whereClause;
-
-       return query.str();
-}
-
-void MediaDbHandle::replyTriggerItem(int error, Json &jsonResult)
-{
-       IF_FAIL_VOID_TAG(STR_EQ(reqProvider->getSubject(), MEDIA_SUBJ_MUSIC_FREQUENCY) ||
-               STR_EQ(reqProvider->getSubject(), MEDIA_SUBJ_VIDEO_FREQUENCY), _E, "Invalid subject");
-
-       Json results;
-       int val;
-
-       jsonResult.get(NULL, STATS_TOTAL_COUNT, &val);
-       results.set(NULL, STATS_TOTAL_COUNT, val);
-
-       reqProvider->replyToRead(reqFilter, error, results);
-}
diff --git a/src/statistics/media/DbHandle.h b/src/statistics/media/DbHandle.h
deleted file mode 100644 (file)
index 8b7f1c1..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_STATS_MEDIA_DB_HANDLE_H_
-#define _CONTEXT_STATS_MEDIA_DB_HANDLE_H_
-
-#include <string>
-#include <Json.h>
-#include "../shared/DbHandleBase.h"
-
-namespace ctx {
-       class MediaDbHandle : public StatsDbHandleBase {
-       public:
-               MediaDbHandle(ContextProvider *provider);
-               ~MediaDbHandle();
-
-               int read(Json filter);
-
-       protected:
-               std::string createWhereClause(int mediaType, Json filter);
-               std::string createSqlPeakTime(int mediaType, Json filter);
-               std::string createSqlCommonSetting(int mediaType, Json filter);
-               std::string createSqlFrequency(int mediaType, Json filter);
-               void replyTriggerItem(int error, Json &jsonResult);
-       };
-}
-
-#endif /* End of _CONTEXT_STATS_MEDIA_DB_HANDLE_H_ */
diff --git a/src/statistics/media/MediaContentMonitor.cpp b/src/statistics/media/MediaContentMonitor.cpp
deleted file mode 100644 (file)
index 78ff0ef..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <time.h>
-#include <Types.h>
-#include "../shared/SystemInfo.h"
-#include "MediaStatisticsTypes.h"
-#include "DbHandle.h"
-#include "MediaContentMonitor.h"
-
-#define PLAYCOUNT_RETENTION_PERIOD 259200      /* 1 month in secs */
-#define ONE_DAY_IN_SEC 86400
-
-ctx::MediaContentMonitor::MediaContentMonitor() :
-       __started(false),
-       __lastCleanupTime(0)
-{
-       __dbManager.createTable(0, MEDIA_TABLE_NAME, MEDIA_TABLE_COLUMNS, NULL, NULL);
-       __dbManager.execute(0, MEDIA_PLAYCOUNT_TABLE_SCHEMA, NULL);
-
-       __started = __startMonitoring();
-}
-
-ctx::MediaContentMonitor::~MediaContentMonitor()
-{
-       if (__started)
-               __stopMonitoring();
-}
-
-bool ctx::MediaContentMonitor::__startMonitoring()
-{
-       int err;
-       err = media_content_connect();
-       IF_FAIL_RETURN_TAG(err == MEDIA_CONTENT_ERROR_NONE, false, _E, "media_content_connect() failed");
-
-       err = media_content_set_db_updated_cb(__onMediaContentDbUpdated, this);
-       if (err != MEDIA_CONTENT_ERROR_NONE) {
-               media_content_disconnect();
-               _E("media_content_set_db_updated_cb() failed");
-               return false;
-       }
-
-       return true;
-}
-
-void ctx::MediaContentMonitor::__stopMonitoring()
-{
-       media_content_unset_db_updated_cb();
-       media_content_disconnect();
-}
-
-void ctx::MediaContentMonitor::__onMediaContentDbUpdated(
-               media_content_error_e error, int pid,
-               media_content_db_update_item_type_e updateItem,
-               media_content_db_update_type_e updateType,
-               media_content_type_e mediaType,
-               char *uuid, char *path, char *mimeType, void *userData)
-{
-       IF_FAIL_VOID(error == MEDIA_CONTENT_ERROR_NONE && uuid != NULL);
-       IF_FAIL_VOID(updateItem == MEDIA_ITEM_FILE && updateType == MEDIA_CONTENT_UPDATE);
-       IF_FAIL_VOID(mediaType == MEDIA_CONTENT_TYPE_MUSIC || mediaType == MEDIA_CONTENT_TYPE_VIDEO);
-
-       media_info_h media = NULL;
-       media_info_get_media_from_db(uuid, &media);
-       IF_FAIL_VOID_TAG(media, _E, "media_info_get_media_from_db() failed");
-
-       int cnt = -1;
-       media_info_get_played_count(media, &cnt);
-       media_info_destroy(media);
-       IF_FAIL_VOID_TAG(cnt >= 0, _E, "Invalid play count");
-
-       MediaContentMonitor *instance = static_cast<MediaContentMonitor*>(userData);
-       instance->__updatePlayCount(uuid,
-                       (mediaType == MEDIA_CONTENT_TYPE_MUSIC) ? MEDIA_TYPE_MUSIC : MEDIA_TYPE_VIDEO,
-                       cnt);
-}
-
-void ctx::MediaContentMonitor::__appendCleanupQuery(std::stringstream &query)
-{
-       int timestamp = static_cast<int>(time(NULL));
-       IF_FAIL_VOID(timestamp - __lastCleanupTime >= ONE_DAY_IN_SEC);
-
-       __lastCleanupTime = timestamp;
-
-       query <<
-               "DELETE FROM Log_MediaPlayCount WHERE UTC < strftime('%s', 'now') - " << PLAYCOUNT_RETENTION_PERIOD << ";" \
-               "DELETE FROM " MEDIA_TABLE_NAME " WHERE UTC < strftime('%s', 'now') - " << LOG_RETENTION_PERIOD << ";";
-}
-
-void ctx::MediaContentMonitor::__updatePlayCount(const char *uuid, int type, int count)
-{
-       std::stringstream query;
-       query <<
-               /* Inserting the media record to the play count table, if not exist */
-               "INSERT OR IGNORE INTO Log_MediaPlayCount" \
-               " (UUID, MediaType) VALUES ('" << uuid << "'," << type <<");" \
-               /* Updating the play count and getting the diff from the previous count */
-               "UPDATE Log_MediaPlayCount SET Diff = " << count << " - Count," \
-               " Count = " << count << ", UTC = strftime('%s', 'now')" \
-               " WHERE UUID = '" << uuid << "';";
-       __appendCleanupQuery(query);
-       query <<
-               /* Checking whether the play count changes */
-               "SELECT MediaType FROM Log_MediaPlayCount" \
-               " WHERE UUID = '" << uuid << "' AND Diff > 0;";
-
-       __dbManager.execute(0, query.str().c_str(), this);
-}
-
-void ctx::MediaContentMonitor::onExecuted(unsigned int queryId, int error, std::vector<Json>& records)
-{
-       IF_FAIL_VOID(!records.empty());
-
-       int mediaType = 0;
-       records[0].get(NULL, CX_MEDIA_TYPE, &mediaType);
-
-       __insertLog(mediaType);
-}
-
-void ctx::MediaContentMonitor::__insertLog(int mediaType)
-{
-       int systemVolume = -1, mediaVolume = -1, audioJack = -1;
-
-       Json data;
-       data.set(NULL, CX_MEDIA_TYPE, mediaType);
-
-       if (ctx::system_info::getAudioJackState(&audioJack))
-               data.set(NULL, STATS_AUDIO_JACK, audioJack);
-
-       if (ctx::system_info::getVolume(&systemVolume, &mediaVolume)) {
-               data.set(NULL, STATS_SYSTEM_VOLUME, systemVolume);
-               data.set(NULL, STATS_MEDIA_VOLUME, mediaVolume);
-       }
-
-       __dbManager.insert(0, MEDIA_TABLE_NAME, data, NULL);
-}
diff --git a/src/statistics/media/MediaContentMonitor.h b/src/statistics/media/MediaContentMonitor.h
deleted file mode 100644 (file)
index b8709aa..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_STATS_MEDIA_CONTENT_MONITOR_H_
-#define _CONTEXT_STATS_MEDIA_CONTENT_MONITOR_H_
-
-#include <sstream>
-#include <media_content.h>
-#include <DatabaseManager.h>
-
-namespace ctx {
-
-       class MediaContentMonitor : public IDatabaseListener {
-       private:
-               bool __started;
-               int __lastCleanupTime;
-               DatabaseManager __dbManager;
-
-               bool __startMonitoring();
-               void __stopMonitoring();
-
-               void __appendCleanupQuery(std::stringstream &query);
-               void __updatePlayCount(const char *uuid, int type, int count);
-               void __insertLog(int mediaType);
-
-               void onTableCreated(unsigned int queryId, int error) {}
-               void onInserted(unsigned int queryId, int error, int64_t rowId) {}
-               void onExecuted(unsigned int queryId, int error, std::vector<Json>& records);
-
-               static void __onMediaContentDbUpdated(media_content_error_e error, int pid,
-                               media_content_db_update_item_type_e updateItem,
-                               media_content_db_update_type_e updateType,
-                               media_content_type_e mediaType,
-                               char *uuid, char *path, char *mimeType, void *userData);
-
-       public:
-               MediaContentMonitor();
-               ~MediaContentMonitor();
-       };
-
-}      /* namespace ctx */
-
-#endif /* End of _CONTEXT_STATS_MEDIA_CONTENT_MONITOR_H_ */
diff --git a/src/statistics/media/MediaStatisticsTypes.h b/src/statistics/media/MediaStatisticsTypes.h
deleted file mode 100644 (file)
index a71e553..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_STATS_MEDIA_TYPES_H_
-#define _CONTEXT_STATS_MEDIA_TYPES_H_
-
-#include "../shared/CommonTypes.h"
-
-#define MEDIA_HISTORY_PRIV                                     "mediahistory.read"
-#define MEDIA_SUBJ_LOGGER                                      "stats/media/logger"
-#define MEDIA_SUBJ_PEAK_TIME_FOR_MUSIC         "stats/music/peak_time"
-#define MEDIA_SUBJ_PEAK_TIME_FOR_VIDEO         "stats/video/peak_time"
-#define MEDIA_SUBJ_COMMON_SETTING_FOR_MUSIC    "stats/music/setting"
-#define MEDIA_SUBJ_COMMON_SETTING_FOR_VIDEO    "stats/video/setting"
-#define MEDIA_SUBJ_MUSIC_FREQUENCY                     "stats/music/frequency"
-#define MEDIA_SUBJ_VIDEO_FREQUENCY                     "stats/video/frequency"
-
-#define MEDIA_TABLE_NAME       "Log_MediaPlayback"
-#define MEDIA_TABLE_COLUMNS \
-       "MediaType INTEGER NOT NULL, " \
-       "SystemVolume INTEGER, MediaVolume INTEGER, AudioJack INTEGER, " \
-       "UTC TIMESTAMP DEFAULT (strftime('%s', 'now')), " \
-       "LocalTime TIMESTAMP DEFAULT (strftime('%s', 'now', 'localtime'))"
-
-#define MEDIA_PLAYCOUNT_TABLE_SCHEMA \
-       "CREATE TABLE IF NOT EXISTS Log_MediaPlayCount" \
-       " (UUID TEXT NOT NULL PRIMARY KEY, MediaType INTEGER NOT NULL," \
-       " Count INTEGER DEFAULT 0, Diff INTEGER DEFAULT 0, " \
-       " UTC TIMESTAMP DEFAULT (strftime('%s', 'now')))"
-
-#define CX_MEDIA_TYPE          "MediaType"
-
-enum mediaType_e {
-       MEDIA_TYPE_MUSIC = 1,
-       MEDIA_TYPE_VIDEO,
-};
-
-#endif /* End of _CONTEXT_STATS_MEDIA_TYPES_H_ */
diff --git a/src/statistics/media/MediaStatsLogger.cpp b/src/statistics/media/MediaStatsLogger.cpp
deleted file mode 100644 (file)
index 9b1db7d..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "MediaStatisticsTypes.h"
-#include "MediaStatsLogger.h"
-
-using namespace ctx;
-
-MediaStatsLogger::MediaStatsLogger() :
-       ContextProvider(MEDIA_SUBJ_LOGGER)
-{
-}
-
-MediaStatsLogger::~MediaStatsLogger()
-{
-}
-
-int MediaStatsLogger::subscribe(Json option, Json* requestResult)
-{
-       return ERR_NONE;
-}
-
-int MediaStatsLogger::unsubscribe(Json option)
-{
-       return ERR_NONE;
-}
diff --git a/src/statistics/media/MediaStatsLogger.h b/src/statistics/media/MediaStatsLogger.h
deleted file mode 100644 (file)
index 28e8aca..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_MEDIA_STATS_LOGGER_H_
-#define _CONTEXT_MEDIA_STATS_LOGGER_H_
-
-#include <ContextProvider.h>
-#include "MediaContentMonitor.h"
-
-namespace ctx {
-
-       class MediaStatsLogger : public ContextProvider {
-       public:
-               MediaStatsLogger();
-               ~MediaStatsLogger();
-
-               int subscribe(Json option, Json *requestResult);
-               int unsubscribe(Json option);
-
-               void submitTriggerItem() {}
-
-       private:
-               MediaContentMonitor __contentMon;
-       };
-
-}      /* namespace ctx */
-
-#endif /* _CONTEXT_MEDIA_STATS_LOGGER_H_ */
-
diff --git a/src/statistics/media/MediaStatsProvider.cpp b/src/statistics/media/MediaStatsProvider.cpp
deleted file mode 100644 (file)
index b8ce482..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "MediaStatsProvider.h"
-#include "DbHandle.h"
-
-using namespace ctx;
-
-MediaStatsProvider::MediaStatsProvider(const char *subject) :
-       ContextProvider(subject)
-{
-}
-
-MediaStatsProvider::~MediaStatsProvider()
-{
-}
-
-bool MediaStatsProvider::isSupported()
-{
-       /* TODO */
-       return true;
-}
-
-void MediaStatsProvider::submitTriggerItem()
-{
-}
-
-int MediaStatsProvider::read(Json option, Json* requestResult)
-{
-       MediaDbHandle *handle = new(std::nothrow) MediaDbHandle(this);
-       IF_FAIL_RETURN_TAG(handle, ERR_OPERATION_FAILED, _E, "Memory allocation failed");
-
-       int err = handle->read(option);
-       if (err != ERR_NONE) {
-               delete handle;
-               return err;
-       }
-
-       return ERR_NONE;
-}
-
-void MusicFreqProvider::submitTriggerItem()
-{
-       registerTriggerItem(OPS_READ,
-                       "{" TRIG_DEF_TOTAL_COUNT "}",
-                       "{" TRIG_DEF_TIME_OF_DAY "," TRIG_DEF_DAY_OF_WEEK "}");
-}
-
-void VideoFreqProvider::submitTriggerItem()
-{
-       registerTriggerItem(OPS_READ,
-                       "{" TRIG_DEF_TOTAL_COUNT "}",
-                       "{" TRIG_DEF_TIME_OF_DAY "," TRIG_DEF_DAY_OF_WEEK "}");
-}
diff --git a/src/statistics/media/MediaStatsProvider.h b/src/statistics/media/MediaStatsProvider.h
deleted file mode 100644 (file)
index 5895c46..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_MEDIA_STATS_PROVIDER_H_
-#define _CONTEXT_MEDIA_STATS_PROVIDER_H_
-
-#include <ContextProvider.h>
-#include "MediaStatisticsTypes.h"
-
-namespace ctx {
-
-       class MediaStatsProvider : public ContextProvider {
-       public:
-               int read(Json option, Json* requestResult);
-
-               bool isSupported();
-               virtual void submitTriggerItem();
-
-       protected:
-               MediaStatsProvider(const char *subject);
-               virtual ~MediaStatsProvider();
-       };      /* class MediaStatsProvider */
-
-
-       class MusicPeakTimeProvider : public MediaStatsProvider {
-       public:
-               MusicPeakTimeProvider() :
-                       MediaStatsProvider(MEDIA_SUBJ_PEAK_TIME_FOR_MUSIC) {}
-       };
-
-
-       class VideoPeakTimeProvider : public MediaStatsProvider {
-       public:
-               VideoPeakTimeProvider() :
-                       MediaStatsProvider(MEDIA_SUBJ_PEAK_TIME_FOR_VIDEO) {}
-       };
-
-
-       class MusicSettingProvider: public MediaStatsProvider {
-       public:
-               MusicSettingProvider() :
-                       MediaStatsProvider(MEDIA_SUBJ_COMMON_SETTING_FOR_MUSIC) {}
-       };
-
-
-       class VideoSettingProvider: public MediaStatsProvider {
-       public:
-               VideoSettingProvider() :
-                       MediaStatsProvider(MEDIA_SUBJ_COMMON_SETTING_FOR_VIDEO) {}
-       };
-
-
-       class MusicFreqProvider: public MediaStatsProvider {
-       public:
-               MusicFreqProvider() :
-                       MediaStatsProvider(MEDIA_SUBJ_MUSIC_FREQUENCY) {}
-
-               void submitTriggerItem();
-       };
-
-
-       class VideoFreqProvider: public MediaStatsProvider {
-       public:
-               VideoFreqProvider() :
-                       MediaStatsProvider(MEDIA_SUBJ_VIDEO_FREQUENCY) {}
-
-               void submitTriggerItem();
-       };
-
-}      /* namespace ctx */
-
-#endif /* _CONTEXT_MEDIA_STATS_PROVIDER_H_ */
diff --git a/src/statistics/prediction/assoc_rule.cpp b/src/statistics/prediction/assoc_rule.cpp
deleted file mode 100644 (file)
index 05be246..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "assoc_rule.h"
-
-std::ostream& ctx::operator<<(std::ostream &out, const ctx::AssocRule &rule)
-{
-       return out << rule.antecedent << " => " << rule.consequent
-                       << "; support:" << rule.support << "; confidence:" << rule.confidence;
-}
-
-bool ctx::operator==(const ctx::AssocRule& left, const ctx::AssocRule& right)
-{
-       return  left.antecedent == right.antecedent &&
-                       left.consequent == right.consequent &&
-                       left.support == right.support &&
-                       left.confidence == right.confidence;
-}
diff --git a/src/statistics/prediction/assoc_rule.h b/src/statistics/prediction/assoc_rule.h
deleted file mode 100644 (file)
index 20d195d..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_ASSOC_RULE_H_
-#define _PREDICTION_ASSOC_RULE_H_
-
-#include "item_set.h"
-#include <iostream>
-
-namespace ctx {
-
-       struct AssocRule {
-               ItemSet antecedent;
-               ItemSet consequent;
-               double support;
-               double confidence;
-
-               AssocRule(const ItemSet& antecedent_,
-                               const ItemSet& consequent_,
-                               const double& support_,
-                               const double& confidence_)
-                               : antecedent(antecedent_)
-                               , consequent(consequent_)
-                               , support(support_)
-                               , confidence(confidence_) {}
-       };
-
-       bool operator==(const AssocRule& left, const AssocRule& right);
-
-       std::ostream& operator<<(std::ostream &out, const AssocRule &rule);
-
-}      /* namespace ctx */
-
-#endif /* _PREDICTION_ASSOC_RULE_H_ */
diff --git a/src/statistics/prediction/assoc_rule_miner.cpp b/src/statistics/prediction/assoc_rule_miner.cpp
deleted file mode 100644 (file)
index a639af8..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "assoc_rule_miner.h"
-#include "single_category_item_id_filter.h"
-#include "basket_filter.h"
-#include "basket_compressor.h"
-#include "baskets_agregator.h"
-#include "assoc_rule_producer.h"
-#include "weight_apriori.h"
-
-std::list<ctx::AssocRule> ctx::AssocRuleMiner::mine_from_baskets(
-               std::list<ctx::Basket>& initBaskets,
-               ctx::ItemCatalogue& itemCatalogue,
-               double minSupport,
-               double minConfidence,
-               std::string consequentCategory)
-{
-       SingleCategoryItemIdFilter itemIdFilter(consequentCategory, itemCatalogue);
-       BasketFilter::filter_in_place(initBaskets,itemIdFilter);
-
-       std::list<Basket> compressedBaskets = BasketCompressor::compress(initBaskets);
-
-       BasketsAgregator basketsAgregator(compressedBaskets);
-       basketsAgregator.generate_bitsets(itemCatalogue.maxId());
-       auto freqItemSets = WeightApriori::find_frequent_itemid_sets(basketsAgregator, minSupport);
-       auto rulesOfIds = AssocRuleProducer::generate_rules(freqItemSets, itemIdFilter, minConfidence);
-       return remove_assoc_rule_ids(rulesOfIds, itemCatalogue);
-}
-
-std::list<ctx::AssocRule> ctx::AssocRuleMiner::mine_from_events(
-               const ctx::EventSet& events,
-               double minSupport,
-               double minConfidence,
-               std::string consequentCategory)
-{
-       ItemCatalogue itemCatalogue;
-
-       BasketProducer basketProducer(itemCatalogue);
-       for (auto& event : events) {
-               basketProducer.put_event(event);
-       }
-
-       std::list<Basket> initBaskets = basketProducer.make_baskets();
-
-       return mine_from_baskets(initBaskets, itemCatalogue, minSupport, minConfidence, consequentCategory);
-}
-
-std::list<ctx::AssocRule> ctx::AssocRuleMiner::remove_assoc_rule_ids(
-               const std::list<ctx::AssocRuleOfIds>& rulesOfIds,
-               const ctx::ItemCatalogue& itemCatalogue)
-{
-       std::list<AssocRule> result;
-       for (const AssocRuleOfIds ruleOfIds : rulesOfIds) {
-               AssocRule rule(remove_assoc_rule_ids(ruleOfIds.antecedent, itemCatalogue),
-                                       remove_assoc_rule_ids(ruleOfIds.consequent, itemCatalogue),
-                                       ruleOfIds.support,
-                                       ruleOfIds.confidence);
-               result.push_back(rule);
-       }
-       return result;
-}
-
-ctx::ItemSet ctx::AssocRuleMiner::remove_assoc_rule_ids(const ctx::ItemIdSet& itemIdSet, const ctx::ItemCatalogue& itemCatalogue)
-{
-       ItemSet itemSet;
-       for (int id : itemIdSet) {
-               itemSet.push_back(itemCatalogue.item_of_id(id));
-       }
-       return itemSet;
-}
diff --git a/src/statistics/prediction/assoc_rule_miner.h b/src/statistics/prediction/assoc_rule_miner.h
deleted file mode 100644 (file)
index a9c9e97..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_ASSOC_RULE_MINER_H_
-#define _PREDICTION_ASSOC_RULE_MINER_H_
-
-#include <list>
-#include <string>
-#include "event_set.h"
-#include "assoc_rule.h"
-#include "assoc_rule_of_ids.h"
-#include "basket_producer.h"
-#include "i_item_id_filter.h"
-
-namespace ctx {
-
-       class AssocRuleMiner {
-
-       public:
-               static std::list<AssocRule> mine_from_events(
-                               const EventSet& events,
-                               double minSupport,
-                               double minConfidence,
-                               std::string consequentCategory);
-               static std::list<AssocRule> mine_from_baskets(
-                               std::list<Basket>& initBaskets,
-                               ItemCatalogue& itemCatalogue,
-                               double minSupport,
-                               double minConfidence,
-                               std::string consequentCategory);
-       private:
-               static std::list<AssocRule> remove_assoc_rule_ids(const std::list<AssocRuleOfIds>& rulesOfIds, const ItemCatalogue& itemCatalogue);
-               static ItemSet remove_assoc_rule_ids(const ItemIdSet& itemIdSet, const ItemCatalogue& itemCatalogue);
-
-       };
-
-}      /* namespace ctx */
-
-#endif /* _PREDICTION_ASSOC_RULE_MINER_H_ */
diff --git a/src/statistics/prediction/assoc_rule_of_ids.h b/src/statistics/prediction/assoc_rule_of_ids.h
deleted file mode 100644 (file)
index 9597a55..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_ASSOC_RULE_OF_IDS_H_
-#define _PREDICTION_ASSOC_RULE_OF_IDS_H_
-
-#include "item_id_set.h"
-
-namespace ctx {
-
-       /* rule of the form antecedent => consequent */
-       class AssocRuleOfIds {
-
-       public:
-               ItemIdSet antecedent;
-               ItemIdSet consequent;
-               double support;
-               double confidence;
-       };
-
-       inline bool operator==(const AssocRuleOfIds& left, const AssocRuleOfIds& right)
-       {
-               return  left.support == right.support
-                        && left.confidence == right.confidence
-                        && left.antecedent == right.antecedent
-                        && left.consequent == right.consequent;
-       }
-
-}      /* namespace ctx */
-
-#endif /* _PREDICTION_ASSOC_RULE_OF_IDS_H_ */
diff --git a/src/statistics/prediction/assoc_rule_producer.cpp b/src/statistics/prediction/assoc_rule_producer.cpp
deleted file mode 100644 (file)
index da9f5d2..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "assoc_rule_producer.h"
-
-ctx::AssocRuleOfIds ctx::AssocRuleProducer::rule_template(const ctx::ItemIdSet& sourceItemIdSet,
-               const ctx::IItemIdFilter& itemIdFilter)
-{
-       AssocRuleOfIds ruleTempl;
-       for (int itemId : sourceItemIdSet) {
-               ItemIdSet &destination = itemIdFilter.pass(itemId)
-                               ? ruleTempl.consequent
-                               : ruleTempl.antecedent;
-               destination.push_back(itemId);
-       }
-       return ruleTempl;
-}
-
-std::list<ctx::AssocRuleOfIds> ctx::AssocRuleProducer::generate_rules(
-               const std::list<std::pair<ctx::ItemIdSet, double>>& freqItemIdSets,
-               const ctx::IItemIdFilter& itemIdFilter, double minConfidence)
-{
-       std::list<AssocRuleOfIds> rules;
-
-       for (auto & pair : freqItemIdSets) {
-               ItemIdSet freqItemIdSet = pair.first;
-               double support = pair.second;
-               AssocRuleOfIds rule = AssocRuleProducer::rule_template(freqItemIdSet, itemIdFilter);
-               if (rule.antecedent.size() > 0 && rule.consequent.size() > 0) {
-                       rule.support = support;
-                       double antecedentSupport = AssocRuleProducer::supportOf(freqItemIdSets, rule.antecedent);
-                       rule.confidence = support / antecedentSupport;
-                       if (rule.confidence >= minConfidence) {
-                               rules.push_back(rule);
-                       }
-               }
-       }
-       return rules;
-}
-
-double ctx::AssocRuleProducer::supportOf(
-               const std::list<std::pair<ctx::ItemIdSet, double>> &allFreqItemIdSets, const ctx::ItemIdSet &wanted)
-{
-       for (auto & pair : allFreqItemIdSets) {
-               if (pair.first == wanted) {
-                       return pair.second;
-               }
-       }
-       return 0.0;
-}
diff --git a/src/statistics/prediction/assoc_rule_producer.h b/src/statistics/prediction/assoc_rule_producer.h
deleted file mode 100644 (file)
index 2b02b79..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_ASSOC_RULE_PRODUCER_H_
-#define _PREDICTION_ASSOC_RULE_PRODUCER_H_
-
-#include "assoc_rule_of_ids.h"
-#include "basket.h"
-#include "i_item_id_filter.h"
-#include <list>
-
-namespace ctx {
-
-       class AssocRuleProducer {
-
-       public:
-               static std::list<AssocRuleOfIds> generate_rules(
-                               const std::list<std::pair<ItemIdSet,double>> &freqItemIdSets,
-                               const IItemIdFilter &itemIdFilter,
-                               double minConfidence);
-
-               static AssocRuleOfIds rule_template(const ItemIdSet &sourceItemIdSet, const IItemIdFilter &antecedentItemIdFilter);
-
-       private:
-               static double supportOf(const std::list<std::pair<ItemIdSet,double>> &allFreqItemIdSets, const ItemIdSet &wanted);
-
-       };
-
-}      /* namespace ctx */
-
-#endif /* _PREDICTION_ASSOC_RULE_PRODUCER_H_ */
diff --git a/src/statistics/prediction/basket.cpp b/src/statistics/prediction/basket.cpp
deleted file mode 100644 (file)
index 35357ce..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "basket.h"
-
-void ctx::Basket::compute_bitset(int maxId)
-{
-       mBitSet.resize(maxId+1, false);
-       for (int itemId : itemIdSet) {
-               mBitSet[itemId] = true;
-       }
-}
-
-bool ctx::Basket::includes(const ctx::ItemIdSet& potentialSubset)
-{
-       for (int itemId : potentialSubset) {
-               if (!mBitSet[itemId]) {
-                       return false;
-               }
-       }
-       return true;
-}
diff --git a/src/statistics/prediction/basket.h b/src/statistics/prediction/basket.h
deleted file mode 100644 (file)
index 1adb851..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_BASKET_H_
-#define _PREDICTION_BASKET_H_
-
-#include "item_id_set.h"
-#include <vector>
-
-namespace ctx {
-
-       class Basket {
-
-       public:
-               ItemIdSet itemIdSet;
-               int weight;
-
-               Basket(const ItemIdSet& itemIdSet_, const int& weight_) : itemIdSet(itemIdSet_), weight(weight_) {};
-               void compute_bitset(int maxId);
-               bool includes(const ItemIdSet& potentialSubset); // compute_bitset() should be invoked first
-
-       private:
-               std::vector<bool> mBitSet;
-
-       };
-
-       // TODO If there is no "inline" below the project does not compile.
-       inline bool operator==(const Basket& left, const Basket& right)
-       {
-               return left.weight == right.weight && left.itemIdSet == right.itemIdSet;
-       }
-
-}      /* namespace ctx */
-
-#endif /* _PREDICTION_BASKET_H_ */
diff --git a/src/statistics/prediction/basket_compressor.cpp b/src/statistics/prediction/basket_compressor.cpp
deleted file mode 100644 (file)
index f46c40d..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "basket_compressor.h"
-#include <sstream>
-#include <map>
-
-std::string ctx::BasketCompressor::itemset_string(const ctx::ItemIdSet& itemIdSet)
-{
-       std::stringstream ss;
-       for (int itemId : itemIdSet) {
-               ss << itemId << ',';
-       }
-       return ss.str();
-}
-
-std::list<ctx::Basket> ctx::BasketCompressor::compress(const std::list<ctx::Basket>& inputBaskets)
-{
-       std::map<std::string,Basket> basketsMap;
-       // TODO: maybe it is worth to resign from string keys and use std::map<ItemSet,weight> instead.
-
-       for (const Basket& basket : inputBaskets) {
-               std::string itemSetStr = itemset_string(basket.itemIdSet);
-
-               auto findResult = basketsMap.find(itemSetStr);
-               if (findResult == basketsMap.end()) {
-                       basketsMap.insert(std::pair<std::string,Basket>(itemSetStr, basket));
-               } else {
-                       Basket& compressedBasket = findResult->second;
-                       compressedBasket.weight += basket.weight;
-               }
-       }
-
-       std::list<Basket> compressedBaskets;
-       for (auto pair : basketsMap) {
-               compressedBaskets.push_back(pair.second);
-       }
-       return compressedBaskets;
-}
diff --git a/src/statistics/prediction/basket_compressor.h b/src/statistics/prediction/basket_compressor.h
deleted file mode 100644 (file)
index 776f074..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_BASKET_COMPRESSOR_H_
-#define _PREDICTION_BASKET_COMPRESSOR_H_
-
-#include <list>
-#include <string>
-#include "basket.h"
-
-namespace ctx {
-
-       class BasketCompressor {
-
-       public:
-               static std::list<Basket> compress(const std::list<Basket> &inputBaskets);
-
-       private:
-               static std::string itemset_string(const ItemIdSet &itemIdSet);
-
-       };
-
-}      /* namespace ctx */
-
-#endif /* _PREDICTION_BASKET_COMPRESSOR_H_ */
diff --git a/src/statistics/prediction/basket_filter.cpp b/src/statistics/prediction/basket_filter.cpp
deleted file mode 100644 (file)
index da03b6c..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "basket_filter.h"
-
-void ctx::BasketFilter::filter_in_place(std::list<ctx::Basket>& baskets, const ctx::IItemIdFilter& itemIdFilter)
-{
-       baskets.remove_if([&itemIdFilter] (Basket &basket) -> bool { return !BasketPass(basket, itemIdFilter); });
-}
-
-bool ctx::BasketFilter::BasketPass(const ctx::Basket& basket, const ctx::IItemIdFilter& itemIdFilter)
-{
-       for (int itemId : basket.itemIdSet) {
-               if (itemIdFilter.pass(itemId)) {
-                       return true;
-               }
-       }
-       return false;
-}
diff --git a/src/statistics/prediction/basket_filter.h b/src/statistics/prediction/basket_filter.h
deleted file mode 100644 (file)
index 6f8a114..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_BASKET_FILTER_H_
-#define _PREDICTION_BASKET_FILTER_H_
-
-#include "basket.h"
-#include "i_item_id_filter.h"
-#include <list>
-
-namespace ctx {
-
-       class BasketFilter {
-
-       public:
-               static void filter_in_place(std::list<Basket> &inputBaskets, const IItemIdFilter &itemIdFilter);
-
-       private:
-               static bool BasketPass(const Basket &basket, const IItemIdFilter &itemIdFilter);
-
-       };
-
-}      /* namespace ctx */
-
-#endif /* _PREDICTION_BASKET_FILTER_H_ */
diff --git a/src/statistics/prediction/basket_producer.cpp b/src/statistics/prediction/basket_producer.cpp
deleted file mode 100644 (file)
index 99a3af9..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "basket_producer.h"
-#include <set>
-
-void ctx::BasketProducer::put_event(const ctx::Event& event)
-{
-       int iid = mItemCatalogue.id_of(event.item);
-       put_change(event.interval.start, iid);  // positive value indicates start
-       put_change(event.interval.end,  -iid);  // negative value indicates end
-}
-
-std::list<ctx::Basket> ctx::BasketProducer::make_baskets()
-{
-       std::list<Basket> baskets;
-
-       time_t intervalStart;
-       std::set<int> currentItemIds;
-
-       bool first = true;
-       for (auto changePair : mChanges) {
-               if (first) {
-                       first = false;
-               } else {
-                       time_t intervalEnd = changePair.first;
-                       int weight = intervalEnd - intervalStart;
-                       ItemIdSet itemIdSet;
-                       for (int itemId : currentItemIds) {
-                               itemIdSet.push_back(itemId);
-                       }
-                       baskets.push_back(Basket(itemIdSet, weight));
-               }
-
-               for (int itemId : changePair.second) {
-                       if (itemId > 0) {  // item with itemId starts now
-                               currentItemIds.insert(itemId);
-                       } else {           // item with -itemId ends now
-                               currentItemIds.erase(-itemId);
-                       }
-               }
-
-               intervalStart = changePair.first;
-       }
-
-       return baskets;
-}
-
-void ctx::BasketProducer::put_change(time_t time, int value)
-{
-       if (mChanges.find(time) == mChanges.end()) {
-               mChanges[time] = std::list<int>();
-       }
-       mChanges[time].push_back(value);
-}
diff --git a/src/statistics/prediction/basket_producer.h b/src/statistics/prediction/basket_producer.h
deleted file mode 100644 (file)
index f2c9757..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_BASKET_PRODUCER_H_
-#define _PREDICTION_BASKET_PRODUCER_H_
-
-#include "event.h"
-#include "basket.h"
-#include "item_catalogue.h"
-#include <list>
-
-namespace ctx {
-
-       class BasketProducer {
-
-       public:
-               BasketProducer(ItemCatalogue& itemCatalogue) : mItemCatalogue(itemCatalogue) {};
-               void put_event(const Event& e);
-               std::list<Basket> make_baskets();
-
-       private:
-               void put_change(time_t time, int value);
-
-               ItemCatalogue& mItemCatalogue;
-
-               /*
-                * Changes in timestamps.
-                * If an item starts than its id is stored.
-                * If an item ends than its negated id is stored.
-                */
-               std::map<time_t, std::list<int>> mChanges;
-
-       };
-
-}      /* namespace ctx */
-
-#endif /* _PREDICTION_BASKET_PRODUCER_H_ */
diff --git a/src/statistics/prediction/baskets_agregator.cpp b/src/statistics/prediction/baskets_agregator.cpp
deleted file mode 100644 (file)
index 7a57e9b..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "baskets_agregator.h"
-
-ctx::BasketsAgregator::BasketsAgregator(std::list<ctx::Basket>& baskets) : mBaskets(baskets)
-{
-}
-
-ctx::ItemIdSet ctx::BasketsAgregator::unique_item_ids()
-{
-       ItemIdSet allItemIds;
-       for (const Basket& basket : mBaskets) {
-               for (int itemId : basket.itemIdSet) {
-                       allItemIds.push_back(itemId);
-               }
-       }
-       allItemIds.sort();
-       allItemIds.unique();
-       return allItemIds;
-}
-
-void ctx::BasketsAgregator::generate_bitsets(int maxId)
-{
-       for (Basket& basket : mBaskets) {
-               basket.compute_bitset(maxId);
-       }
-}
-
-double ctx::BasketsAgregator::supportOf(const ctx::ItemIdSet& itemIdSet)
-{
-       int matchedCount = 0;
-       int unmatchedCount = 0;
-       for (Basket& basket : mBaskets) {
-               if (basket.includes(itemIdSet)) {
-                       matchedCount += basket.weight;
-               } else {
-                       unmatchedCount += basket.weight;
-               }
-       }
-       return (double) matchedCount / (double) (matchedCount + unmatchedCount);
-}
diff --git a/src/statistics/prediction/baskets_agregator.h b/src/statistics/prediction/baskets_agregator.h
deleted file mode 100644 (file)
index 5ce18c0..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_BASKETS_AGREGATOR_H_
-#define _PREDICTION_BASKETS_AGREGATOR_H_
-
-#include <list>
-#include <memory>
-#include "basket.h"
-
-namespace ctx {
-
-       class BasketsAgregator {
-
-       public:
-               BasketsAgregator(std::list<Basket>& baskets);
-               void generate_bitsets(int maxId);
-               ItemIdSet unique_item_ids();
-               double supportOf(const ItemIdSet &itemIdSet);
-
-       private:
-               std::list<Basket>& mBaskets;
-
-       };
-
-}      /* namespace ctx */
-
-#endif /* _PREDICTION_BASKETS_AGREGATOR_H_ */
diff --git a/src/statistics/prediction/event.cpp b/src/statistics/prediction/event.cpp
deleted file mode 100644 (file)
index 817e108..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "event.h"
-
-bool ctx::operator==(const ctx::Event& left, const ctx::Event& right)
-{
-       return left.item == right.item && left.interval == right.interval;
-}
-
-bool ctx::operator!=(const ctx::Event& left, const ctx::Event& right)
-{
-       return !(left == right);
-}
diff --git a/src/statistics/prediction/event.h b/src/statistics/prediction/event.h
deleted file mode 100644 (file)
index 99048e4..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_EVENT_H_
-#define _PREDICTION_EVENT_H_
-
-#include "item.h"
-#include "interval.h"
-
-namespace ctx {
-
-       struct Event {
-               Item item;
-               Interval interval;
-
-               /* long time event */
-               Event(const Item& item_, const Interval& interval_) : item(item_), interval(interval_) {}
-
-               /* instant event */
-               Event(const Item& item_, const time_t& start_time_) : item(item_), interval(start_time_, start_time_ + 1) {}
-       };
-
-       bool operator==(const Event& left, const Event& right);
-       bool operator!=(const Event& left, const Event& right);
-
-}      /* namespace ctx */
-
-#endif /* _PREDICTION_EVENT_H_ */
diff --git a/src/statistics/prediction/event_set.h b/src/statistics/prediction/event_set.h
deleted file mode 100644 (file)
index e097ece..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_EVENT_SET_H_
-#define _PREDICTION_EVENT_SET_H_
-
-#include "event.h"
-
-namespace ctx {
-
-       typedef std::list<Event> EventSet;
-
-}      /* namespace ctx */
-
-#endif /* _PREDICTION_EVENT_SET_H_ */
diff --git a/src/statistics/prediction/i_item_id_filter.h b/src/statistics/prediction/i_item_id_filter.h
deleted file mode 100644 (file)
index 1a8ac45..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_I_ITEM_ID_FILTER_H_
-#define _PREDICTION_I_ITEM_ID_FILTER_H_
-
-namespace ctx {
-
-       class IItemIdFilter {
-
-       public:
-               virtual ~IItemIdFilter() {}
-               virtual bool pass(int itemId) const = 0;
-
-       };
-
-}      /* namespace ctx */
-
-#endif /* _PREDICTION_I_ITEM_ID_FILTER_H_ */
diff --git a/src/statistics/prediction/interval.cpp b/src/statistics/prediction/interval.cpp
deleted file mode 100644 (file)
index b6dc8f9..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "interval.h"
-
-bool ctx::operator==(const Interval& left, const Interval& right)
-{
-       return left.start == right.start && left.end == right.end;
-}
-
-bool ctx::operator!=(const Interval& left, const Interval& right)
-{
-       return !(left == right);
-}
diff --git a/src/statistics/prediction/interval.h b/src/statistics/prediction/interval.h
deleted file mode 100644 (file)
index 3576da1..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_INTERVAL_H_
-#define _PREDICTION_INTERVAL_H_
-
-#include <ctime>
-
-namespace ctx {
-
-       struct Interval {
-               time_t start;
-               time_t end;
-
-               Interval(time_t start_, time_t end_) : start(start_), end(end_) {}
-       };
-
-       bool operator==(const Interval& left, const Interval& right);
-       bool operator!=(const Interval& left, const Interval& right);
-
-}      /* namespace ctx */
-
-#endif /* _PREDICTION_INTERVAL_H_ */
diff --git a/src/statistics/prediction/item.cpp b/src/statistics/prediction/item.cpp
deleted file mode 100644 (file)
index 9a80ca9..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "item.h"
-
-ctx::Item::Item(const std::string &s)
-{
-       size_t leftBracket = s.find('[');
-       size_t rightBracket = s.find(']', leftBracket);
-       category = s.substr(leftBracket + 1, rightBracket - 1);
-       value = s.substr(rightBracket + 1);
-       return;
-}
-
-bool ctx::Item::operator==(const ctx::Item& other) const
-{
-       return other.category == category && other.value == value;
-}
-
-bool ctx::Item::operator!=(const ctx::Item& other) const
-{
-       return !operator==(other);
-}
-
-std::ostream& ctx::operator<<(std::ostream& out, const ctx::Item& item)
-{
-       return out << '[' << item.category << ']' << item.value;
-}
diff --git a/src/statistics/prediction/item.h b/src/statistics/prediction/item.h
deleted file mode 100644 (file)
index 0e933ce..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_ITEM_H_
-#define _PREDICTION_ITEM_H_
-
-#include <string>
-#include <iostream>
-
-namespace ctx {
-
-       struct Item {
-               std::string category;
-               std::string value;
-
-               Item(const std::string &category_, const std::string &value_) : category(category_), value(value_) {}
-               Item(const std::string &s); // in the form of "[Category]Value"
-
-               bool operator==(const Item& other) const;
-               bool operator!=(const Item& other) const;
-       };
-
-       std::ostream& operator<<(std::ostream& out, const Item& item);
-
-}      /* namespace ctx */
-
-namespace std {
-
-       template <> struct hash<ctx::Item> {
-               size_t operator()(const ctx::Item &item) const {
-                       hash<std::string> hasher;
-                       return hasher(item.category + ":" + item.value);
-               }
-       };
-
-}
-
-#endif /* _PREDICTION_ITEM_H_ */
diff --git a/src/statistics/prediction/item_catalogue.cpp b/src/statistics/prediction/item_catalogue.cpp
deleted file mode 100644 (file)
index 666b5a8..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "item_catalogue.h"
-#include "item_string_converter.h"
-
-int ctx::ItemCatalogue::id_of(const ctx::Item& item)
-{
-       std::string s = ItemStringConverter::item_to_string(item);
-       std::map<std::string,int>::iterator it = mItemIdsOfStrings.find(s);
-       if (it == mItemIdsOfStrings.end()) { // new item
-               mMaxId++;
-               mItemIdsOfStrings[s] = mMaxId;
-               mItemStrings.push_back(s);
-               extendCategoryItemIds(item.category, mMaxId);
-               return mMaxId;
-       } else { // existing item
-               return mItemIdsOfStrings[s];
-       }
-}
-
-bool ctx::ItemCatalogue::exists_item_of_id(int id) const
-{
-       return id > 0 && id <= mMaxId;
-}
-
-ctx::Item ctx::ItemCatalogue::item_of_id(int id) const
-{
-       return ItemStringConverter::string_to_item(mItemStrings[id]);
-}
-
-std::set<int> ctx::ItemCatalogue::category_item_ids(std::string category) const
-{
-       auto it = mCategoryItemIds.find(category);
-       if (it == mCategoryItemIds.end()) {
-               return std::set<int>();
-       } else {
-               return it->second;
-       }
-}
-
-void ctx::ItemCatalogue::extendCategoryItemIds(std::string category, int itemId)
-{
-       if (mCategoryItemIds.find(category) == mCategoryItemIds.end()) {
-               mCategoryItemIds[category] = std::set<int>();
-       }
-       mCategoryItemIds[category].insert(itemId);
-}
diff --git a/src/statistics/prediction/item_catalogue.h b/src/statistics/prediction/item_catalogue.h
deleted file mode 100644 (file)
index 404765b..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_ITEM_CATALOGUE_H_
-#define _PREDICTION_ITEM_CATALOGUE_H_
-
-#include "item.h"
-#include <map>
-#include <set>
-#include <vector>
-
-namespace ctx {
-
-       class ItemCatalogue {
-
-       public:
-               ItemCatalogue() : mMaxId(0) {
-                       mItemStrings.push_back(std::string(""));
-               }
-
-               int id_of(Item const &item);
-
-               bool exists_item_of_id(int id) const;
-               Item item_of_id(int id) const;
-               std::set<int> category_item_ids(std::string category) const;
-               int maxId() const {return mMaxId;};
-
-       private:
-               /* Translates item string to its id */
-               std::map<std::string,int> mItemIdsOfStrings;
-
-               /* Translating category string to int */
-               std::map<std::string,std::set<int>> mCategoryItemIds;
-
-               /* Stores item strings (index is item's id) */
-               std::vector<std::string> mItemStrings;
-
-               /* Preserves maximal item's id */
-               int mMaxId;
-
-               void extendCategoryItemIds(std::string category, int itemId);
-
-       };
-
-}      /* namespace ctx */
-
-#endif /* _PREDICTION_ITEM_CATALOGUE_H_ */
diff --git a/src/statistics/prediction/item_id_set.h b/src/statistics/prediction/item_id_set.h
deleted file mode 100644 (file)
index ce18f71..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_ITEM_ID_SET_H_
-#define _PREDICTION_ITEM_ID_SET_H_
-
-#include <list>
-
-namespace ctx {
-
-       /* A set storing item ids */
-       typedef std::list<int> ItemIdSet;
-
-}      /* namespace ctx */
-
-#endif /* _PREDICTION_ITEM_ID_SET_H_ */
diff --git a/src/statistics/prediction/item_set.cpp b/src/statistics/prediction/item_set.cpp
deleted file mode 100644 (file)
index dccee66..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "item_set.h"
-#include <algorithm>
-
-std::ostream& ctx::operator<<(std::ostream& out, const ctx::ItemSet& itemSet)
-{
-       bool first = true;
-       for (auto& item : itemSet) {
-               if (first) {
-                       first = false;
-               } else {
-                       out << ", ";
-               }
-               out << item;
-       }
-       return out;
-}
-
-bool ctx::itemset_includes_in(const ctx::ItemSet& small, const ctx::ItemSet& big)
-{
-       for (const Item& s : small) {
-               if (std::find(big.begin(), big.end(), s) == big.end())
-                       return false;
-       }
-       return true;
-}
diff --git a/src/statistics/prediction/item_set.h b/src/statistics/prediction/item_set.h
deleted file mode 100644 (file)
index f13c8bc..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_ITEM_SET_H_
-#define _PREDICTION_ITEM_SET_H_
-
-#include <list>
-#include "item.h"
-
-namespace ctx {
-
-       /* A set storing item ids */
-       typedef std::list<Item> ItemSet;
-
-       std::ostream& operator<<(std::ostream& out, const ItemSet& itemSet);
-
-       bool itemset_includes_in(const ItemSet& small, const ItemSet& big);
-
-}      /* namespace ctx */
-
-#endif /* _PREDICTION_ITEM_SET_H_ */
diff --git a/src/statistics/prediction/item_string_converter.cpp b/src/statistics/prediction/item_string_converter.cpp
deleted file mode 100644 (file)
index 399847a..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "item_string_converter.h"
-#include <string>
-
-std::string ctx::ItemStringConverter::item_to_string(const ctx::Item &item)
-{
-       return item.category + SEPARATOR + item.value;
-}
-
-ctx::Item ctx::ItemStringConverter::string_to_item(const std::string& s)
-{
-       size_t pos = s.find(SEPARATOR);
-       //assert(pos != std::string::npos);
-       return Item(s.substr(0, pos), s.substr(pos + 1));
-}
diff --git a/src/statistics/prediction/item_string_converter.h b/src/statistics/prediction/item_string_converter.h
deleted file mode 100644 (file)
index 15de8b2..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_ITEM_STRING_CONVERTER_H_
-#define _PREDICTION_ITEM_STRING_CONVERTER_H_
-
-#include "item.h"
-
-namespace ctx {
-
-       class ItemStringConverter {
-
-       public:
-               static const char SEPARATOR = ':';
-               static std::string item_to_string(const Item &item);
-               static Item string_to_item(const std::string& s);
-
-       };
-
-}      /* namespace ctx */
-
-#endif /* _PREDICTION_ITEM_STRING_CONVERTER_H_ */
diff --git a/src/statistics/prediction/single_category_item_id_filter.cpp b/src/statistics/prediction/single_category_item_id_filter.cpp
deleted file mode 100644 (file)
index 6646e8d..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "single_category_item_id_filter.h"
-
-ctx::SingleCategoryItemIdFilter::SingleCategoryItemIdFilter(std::string category, const ctx::ItemCatalogue &itemCatalogue)
-{
-       mAcceptedItemIds = itemCatalogue.category_item_ids(category);
-}
-
-bool ctx::SingleCategoryItemIdFilter::pass(int itemId) const
-{
-       return mAcceptedItemIds.find(itemId) != mAcceptedItemIds.end();
-}
diff --git a/src/statistics/prediction/single_category_item_id_filter.h b/src/statistics/prediction/single_category_item_id_filter.h
deleted file mode 100644 (file)
index 4cc7dd6..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_SINGLE_CATEGORY_ITEM_ID_FILTER_H_
-#define _PREDICTION_SINGLE_CATEGORY_ITEM_ID_FILTER_H_
-
-#include "i_item_id_filter.h"
-#include "item_catalogue.h"
-
-namespace ctx {
-
-       class SingleCategoryItemIdFilter : public IItemIdFilter {
-
-       public:
-               SingleCategoryItemIdFilter(std::string category, const ItemCatalogue& itemCatalogue);
-               bool pass(int itemId) const override;
-
-       private:
-               std::set<int> mAcceptedItemIds;
-
-       };
-
-}      /* namespace ctx */
-
-#endif /* _PREDICTION_SINGLE_CATEGORY_ITEM_ID_FILTER_H_ */
diff --git a/src/statistics/prediction/weight_apriori.cpp b/src/statistics/prediction/weight_apriori.cpp
deleted file mode 100644 (file)
index 92aaebc..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "weight_apriori.h"
-#include <algorithm>
-#include <iostream>
-
-std::list<ctx::ItemIdSet> ctx::WeightApriori::find_wider_candidates(const std::list<ctx::ItemIdSet> &narrowFreqSets, int widerSize)
-{
-       std::list<ItemIdSet> candidates;
-       for (auto iter1 = narrowFreqSets.begin(); iter1 != narrowFreqSets.end(); ++iter1) {
-               auto iter2 = iter1; ++iter2;
-               for (;iter2 != narrowFreqSets.end(); ++iter2) {
-                       ItemIdSet itemIdSet1 = *iter1;
-                       ItemIdSet itemIdSet2 = *iter2;
-                       itemIdSet1.merge(itemIdSet2);
-                       itemIdSet1.unique();
-                       if (int(itemIdSet1.size()) == widerSize) {
-                               candidates.push_back(itemIdSet1);
-                       }
-               }
-       }
-       candidates.sort();
-       candidates.unique();
-       return candidates;
-}
-
-void ctx::WeightApriori::prune_wider_candidates(std::list<ctx::ItemIdSet>& widerCandidates, const std::list<ctx::ItemIdSet>& narrowFreqSets)
-{
-       std::list<ItemIdSet> pruned;
-       for (auto iter = widerCandidates.begin(); iter != widerCandidates.end();) {
-               if (survives_prunning(*iter, narrowFreqSets)) {
-                       ++iter;
-               } else {
-                       iter = widerCandidates.erase(iter);
-               }
-       }
-}
-
-bool ctx::WeightApriori::survives_prunning(ctx::ItemIdSet& widerCandidate, const std::list<ctx::ItemIdSet>& narrowFreqSets)
-{
-       int removedItemId = widerCandidate.front();
-       widerCandidate.pop_front();
-       for (auto iter = widerCandidate.begin();; ++iter) {
-               if (std::find(narrowFreqSets.begin(), narrowFreqSets.end(), widerCandidate) == narrowFreqSets.end()) {
-                       return false; // Caution: In this case the original contents of widerCandidate is not preserved.
-               }
-               if (iter == widerCandidate.end()) {
-                       widerCandidate.push_back(removedItemId); // Restoring original contents of widerCandidate.
-                       return true;
-               }
-               int newRemovedItemId = *iter;
-               *iter = removedItemId;
-               removedItemId = newRemovedItemId;
-       }
-}
-
-std::list<std::pair<ctx::ItemIdSet, double>> ctx::WeightApriori::find_frequent_itemid_sets(ctx::BasketsAgregator &basketAgregator, double supportThreshold)
-{
-       std::list<std::pair<ItemIdSet, double>> allFreqItemsets;
-       std::list<ItemIdSet> freqItemsetsOfCurrSize;
-       std::list<ItemIdSet> candidates;
-
-       int candidateSize = 1;
-       candidates = single_size_candidates(basketAgregator);
-
-       while (!candidates.empty()) {
-               for (ItemIdSet candidate : candidates) {
-                       double support = basketAgregator.supportOf(candidate);
-                       if (support >= supportThreshold) {
-                               freqItemsetsOfCurrSize.push_back(candidate);
-                               allFreqItemsets.push_back(std::make_pair(candidate,support));
-                       }
-               }
-               candidates = find_wider_candidates(freqItemsetsOfCurrSize, ++candidateSize);
-               freqItemsetsOfCurrSize.clear();
-       }
-       return allFreqItemsets;
-}
-
-std::list<ctx::ItemIdSet> ctx::WeightApriori::single_size_candidates(ctx::BasketsAgregator& basketAgregator)
-{
-       std::list<ItemIdSet> candidates;
-       for (int itemId : basketAgregator.unique_item_ids()) {
-               candidates.push_back({itemId});
-       }
-       return candidates;
-}
diff --git a/src/statistics/prediction/weight_apriori.h b/src/statistics/prediction/weight_apriori.h
deleted file mode 100644 (file)
index 6cb493d..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_WEIGHT_APRIORI_H_
-#define _PREDICTION_WEIGHT_APRIORI_H_
-
-#include "baskets_agregator.h"
-#include <list>
-#include <utility>
-
-namespace ctx {
-
-       class WeightApriori {
-
-       public:
-               static std::list<ItemIdSet> find_wider_candidates(const std::list<ItemIdSet> &narrowFreqSets, int widerSize);
-               static void prune_wider_candidates(std::list<ItemIdSet> &widerCandidates, const std::list<ItemIdSet> &narrowFreqSets);
-
-               static bool survives_prunning(ItemIdSet &widerCandidate, const std::list<ItemIdSet> &narrowFreqSets);
-
-               /* Find frequent itemsets along with its support value. */
-               static std::list<std::pair<ItemIdSet,double>> find_frequent_itemid_sets(BasketsAgregator &basketAgregator, double supportThreshold);
-
-       private:
-               static std::list<ItemIdSet> single_size_candidates(BasketsAgregator &basketAgregator);
-
-       };
-
-}      /* namespace ctx */
-
-#endif /* _PREDICTION_WEIGHT_APRIORI_H_ */
diff --git a/src/statistics/shared/CommonTypes.h b/src/statistics/shared/CommonTypes.h
deleted file mode 100644 (file)
index d6673e1..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_STATS_COMMON_TYPES_H_
-#define _CONTEXT_STATS_COMMON_TYPES_H_
-
-#define LOG_RETENTION_PERIOD   7776000         /* 90 days in secs */
-
-#define DEFAULT_TIMESPAN               30
-#define DEFAULT_LIMIT                  10
-
-#define STATS_QUERY_RESULT             "QueryResult"
-#define STATS_RESULT_SIZE              "ResultSize"
-#define STATS_COL_ROW_ID               "rowId"
-
-#define STATS_TIMESPAN                 "TimeSpan"
-#define STATS_START_TIME               "StartTime"
-#define STATS_END_TIME                 "EndTime"
-#define STATS_LAST_TIME                        "LastTime"
-#define STATS_TOTAL_COUNT              "TotalCount"
-#define STATS_AVERAGE_COUNT            "AvgCount"
-#define STATS_DURATION                 "Duration"
-#define STATS_TOTAL_DURATION   "TotalDuration"
-#define STATS_DAY_OF_WEEK              "DayOfWeek"
-#define STATS_HOUR_OF_DAY              "HourOfDay"
-#define STATS_TIME_OF_DAY              "TimeOfDay"
-#define STATS_TOTAL_COUNT              "TotalCount"
-#define STATS_APP_ID                   "AppId"
-#define STATS_PKG_ID                   "PkgId"
-#define STATS_AUDIO_JACK               "AudioJack"
-#define STATS_SYSTEM_VOLUME            "SystemVolume"
-#define STATS_MEDIA_VOLUME             "MediaVolume"
-#define STATS_BSSID                            "BSSID"
-#define STATS_UNIV_TIME                        "UTC"
-#define STATS_LOCAL_TIME               "LocalTime"
-#define STATS_RANK                             "Rank"
-
-#define STATS_SUN              "Sun"
-#define STATS_MON              "Mon"
-#define STATS_TUE              "Tue"
-#define STATS_WED              "Wed"
-#define STATS_THU              "Thu"
-#define STATS_FRI              "Fri"
-#define STATS_SAT              "Sat"
-#define STATS_WEEKDAY  "Weekday"
-#define STATS_WEEKEND  "Weekend"
-
-enum StatsDayOfWeek_e {
-       STATS_DAY_OF_WEEK_WEEKDAY = 1,
-       STATS_DAY_OF_WEEK_WEEKEND,
-       STATS_DAY_OF_WEEK_ALL,
-       STATS_DAY_OF_WEEK_SUN,
-       STATS_DAY_OF_WEEK_MON,
-       STATS_DAY_OF_WEEK_TUE,
-       STATS_DAY_OF_WEEK_WED,
-       STATS_DAY_OF_WEEK_THU,
-       STATS_DAY_OF_WEEK_FRI,
-       STATS_DAY_OF_WEEK_SAT,
-};
-
-#define TRIG_DEF_RANK                  "\"Rank\":{\"type\":\"integer\",\"min\":1}"
-#define TRIG_DEF_TOTAL_COUNT   "\"TotalCount\":{\"type\":\"integer\",\"min\":0}"
-#define TRIG_DEF_TIME_OF_DAY   "\"TimeOfDay\":{\"type\":\"string\"}"
-#define TRIG_DEF_DAY_OF_WEEK   "\"DayOfWeek\":{\"type\":\"string\",\"values\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\",\"Sun\",\"Weekday\",\"Weekend\"]}"
-
-#endif /* End of _CONTEXT_STATS_COMMMON_TYPES_ */
diff --git a/src/statistics/shared/DbHandleBase.cpp b/src/statistics/shared/DbHandleBase.cpp
deleted file mode 100644 (file)
index 979f75b..0000000
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <sstream>
-#include <Types.h>
-#include "CommonTypes.h"
-#include "DbHandleBase.h"
-
-#define DAY_OF_WEEK(SECOND) "CAST(strftime('%w', " SECOND ", 'unixepoch') AS INTEGER)"
-#define HOUR_OF_DAY(SECOND) "CAST(strftime('%H', " SECOND ", 'unixepoch') AS INTEGER)"
-
-using namespace ctx;
-
-StatsDbHandleBase::StatsDbHandleBase(ContextProvider *provider) :
-       isTriggerItem(false),
-       reqProvider(provider)
-{
-}
-
-StatsDbHandleBase::~StatsDbHandleBase()
-{
-}
-
-int StatsDbHandleBase::generateQid()
-{
-       static int qid = 0;
-
-       if (qid++ < 0) qid = 1;
-       return qid;
-}
-
-bool StatsDbHandleBase::executeQuery(Json filter, const char* query)
-{
-       bool ret = __dbManager.execute(generateQid(), query, this);
-       IF_FAIL_RETURN(ret, false);
-
-       reqFilter = filter;
-
-       return true;
-}
-
-std::string StatsDbHandleBase::createWhereClause(Json filter)
-{
-       std::stringstream whereClause;
-       int week = 0;
-       int start = 0;
-       int end = 0;
-       int timespan = DEFAULT_TIMESPAN;
-       std::string appId;
-       std::string weekStr;
-       std::string timeOfDay;
-
-       if (filter.get(NULL, STATS_DAY_OF_WEEK, &weekStr)) {
-               // In case of string (from Trigger)
-               if (weekStr == STATS_WEEKDAY) {
-                       week = STATS_DAY_OF_WEEK_WEEKDAY;
-
-               } else if (weekStr == STATS_WEEKEND) {
-                       week = STATS_DAY_OF_WEEK_WEEKEND;
-
-               } else if (weekStr == STATS_SUN) {
-                       week = STATS_DAY_OF_WEEK_SUN;
-
-               } else if (weekStr == STATS_MON) {
-                       week = STATS_DAY_OF_WEEK_MON;
-
-               } else if (weekStr == STATS_TUE) {
-                       week = STATS_DAY_OF_WEEK_TUE;
-
-               } else if (weekStr == STATS_WED) {
-                       week = STATS_DAY_OF_WEEK_WED;
-
-               } else if (weekStr == STATS_THU) {
-                       week = STATS_DAY_OF_WEEK_THU;
-
-               } else if (weekStr == STATS_FRI) {
-                       week = STATS_DAY_OF_WEEK_FRI;
-
-               } else if (weekStr == STATS_SAT) {
-                       week = STATS_DAY_OF_WEEK_SAT;
-               }
-       } else {
-               // In case of integer (from History)
-               filter.get(NULL, STATS_DAY_OF_WEEK, &week);
-       }
-
-       switch(week) {
-       case STATS_DAY_OF_WEEK_WEEKDAY:
-               whereClause << "(" DAY_OF_WEEK(STATS_LOCAL_TIME) " > 0 AND " DAY_OF_WEEK(STATS_LOCAL_TIME) " < 6) AND ";
-               break;
-       case STATS_DAY_OF_WEEK_WEEKEND:
-               whereClause << "(" DAY_OF_WEEK(STATS_LOCAL_TIME) " = 0 OR " DAY_OF_WEEK(STATS_LOCAL_TIME) " = 6) AND ";
-               break;
-       case STATS_DAY_OF_WEEK_SUN:
-       case STATS_DAY_OF_WEEK_MON:
-       case STATS_DAY_OF_WEEK_TUE:
-       case STATS_DAY_OF_WEEK_WED:
-       case STATS_DAY_OF_WEEK_THU:
-       case STATS_DAY_OF_WEEK_FRI:
-       case STATS_DAY_OF_WEEK_SAT:
-               whereClause << DAY_OF_WEEK(STATS_LOCAL_TIME) " = " << week - STATS_DAY_OF_WEEK_SUN << " AND ";
-               break;
-       default:
-               break;
-       }
-
-       if (filter.get(NULL, STATS_APP_ID, &appId))
-               whereClause << STATS_APP_ID " = '" << appId << "' AND ";
-
-       if (filter.get(NULL, STATS_START_TIME, &start))
-               whereClause << STATS_UNIV_TIME " >= " << start << " AND ";
-
-       if (filter.get(NULL, STATS_END_TIME, &end))
-               whereClause << STATS_UNIV_TIME " <= " << end << " AND ";
-
-       if (filter.get(NULL, STATS_TIME_OF_DAY, &timeOfDay)) {
-               size_t pivot = timeOfDay.find('-');
-               if (pivot != std::string::npos) {
-                       std::string from = timeOfDay.substr(0, pivot);
-                       std::string to = timeOfDay.substr(pivot + 1);
-                       whereClause << "(" HOUR_OF_DAY(STATS_LOCAL_TIME) " >= " << from \
-                               << " AND " HOUR_OF_DAY(STATS_LOCAL_TIME) " < " << to << ") AND ";
-               }
-       }
-
-       filter.get(NULL, STATS_TIMESPAN, &timespan);
-       whereClause << STATS_UNIV_TIME " > strftime('%s', 'now', '-" << timespan <<" day')";
-
-       return whereClause.str();
-}
-
-std::string StatsDbHandleBase::createSqlPeakTime(Json filter, const char* tableName, std::string whereClause)
-{
-       std::stringstream query;
-       int limit = DEFAULT_LIMIT;
-
-       filter.get(NULL, STATS_RESULT_SIZE, &limit);
-
-       query <<
-               "SELECT " \
-                       HOUR_OF_DAY(STATS_LOCAL_TIME) " AS " STATS_HOUR_OF_DAY ", COUNT(*) AS " STATS_TOTAL_COUNT \
-               " FROM " << tableName << \
-               " WHERE " << whereClause << \
-               " GROUP BY " HOUR_OF_DAY(STATS_LOCAL_TIME) \
-               " ORDER BY " STATS_TOTAL_COUNT " DESC" \
-               " LIMIT " << limit;
-
-       return query.str();
-}
-
-std::string StatsDbHandleBase::createSqlCommonSetting(Json filter, const char* tableName, std::string whereClause)
-{
-       std::stringstream query;
-
-       query <<
-               "SELECT ( SELECT " STATS_AUDIO_JACK \
-                               " FROM " << tableName << \
-                               " WHERE " << whereClause << \
-                               " GROUP BY " STATS_AUDIO_JACK \
-                               " ORDER BY count(" STATS_AUDIO_JACK ") DESC" \
-                               " LIMIT 1 ) AS " STATS_AUDIO_JACK \
-                       ", ( SELECT " STATS_SYSTEM_VOLUME \
-                               " FROM " << tableName << \
-                               " WHERE " << whereClause << \
-                               " GROUP BY " STATS_SYSTEM_VOLUME \
-                               " ORDER BY count(" STATS_SYSTEM_VOLUME ") DESC" \
-                               " LIMIT 1 ) AS " STATS_SYSTEM_VOLUME \
-                       ", ( SELECT " STATS_MEDIA_VOLUME \
-                               " FROM " << tableName << \
-                               " WHERE " << whereClause << \
-                               " GROUP BY " STATS_MEDIA_VOLUME \
-                               " ORDER BY count(" STATS_MEDIA_VOLUME ") DESC" \
-                               " LIMIT 1 ) AS " STATS_MEDIA_VOLUME;
-
-       return query.str();
-}
-
-void StatsDbHandleBase::onTableCreated(unsigned int queryId, int error)
-{
-}
-
-void StatsDbHandleBase::onInserted(unsigned int queryId, int error, int64_t rowId)
-{
-       delete this;
-}
-
-void StatsDbHandleBase::__jsonVectorToArray(std::vector<Json> &vecJson, Json &jsonResult)
-{
-       std::vector<Json>::iterator vecJsonEnd = vecJson.end();
-
-       for(auto vecJsonPos = vecJson.begin(); vecJsonPos != vecJsonEnd; ++vecJsonPos) {
-               Json originJson = *vecJsonPos;
-               jsonResult.append(NULL, STATS_QUERY_RESULT, originJson);
-       }
-}
-
-void StatsDbHandleBase::onExecuted(unsigned int queryId, int error, std::vector<Json>& records)
-{
-       if (isTriggerItem) {
-               if (records.size() == 1) {
-                       replyTriggerItem(error, records[0]);
-               } else {
-                       _E("Invalid query result");
-                       Json dummy;
-                       reqProvider->replyToRead(reqFilter, ERR_OPERATION_FAILED, dummy);
-               }
-       } else {
-               Json results = "{\"" STATS_QUERY_RESULT "\":[]}";
-               __jsonVectorToArray(records, results);
-               reqProvider->replyToRead(reqFilter, error, results);
-       }
-
-       delete this;
-}
diff --git a/src/statistics/shared/DbHandleBase.h b/src/statistics/shared/DbHandleBase.h
deleted file mode 100644 (file)
index 8949550..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_STATS_DB_HANDLE_BASE_H_
-#define _CONTEXT_STATS_DB_HANDLE_BASE_H_
-
-#include <string>
-#include <ContextProvider.h>
-#include <DatabaseManager.h>
-
-namespace ctx {
-       class StatsDbHandleBase : public IDatabaseListener {
-       protected:
-               bool isTriggerItem;
-               ContextProvider *reqProvider;
-               Json reqFilter;
-
-               StatsDbHandleBase(ContextProvider *provider);
-               ~StatsDbHandleBase();
-
-               std::string createWhereClause(Json filter);
-               std::string createSqlPeakTime(Json filter, const char* tableName, std::string whereClause);
-               std::string createSqlCommonSetting(Json filter, const char* tableName, std::string whereClause);
-
-               bool executeQuery(Json filter, const char* query);
-               virtual void replyTriggerItem(int error, Json &jsonResult) = 0;
-               static int generateQid();
-
-       private:
-               void __jsonVectorToArray(std::vector<Json> &vecJson, Json &jsonResult);
-
-               void onTableCreated(unsigned int queryId, int error);
-               void onInserted(unsigned int queryId, int error, int64_t rowId);
-               void onExecuted(unsigned int queryId, int error, std::vector<Json>& records);
-
-               DatabaseManager __dbManager;
-       };
-}
-
-#endif /* End of _CONTEXT_STATS_DB_HANDLE_BASE_H_ */
diff --git a/src/statistics/shared/SystemInfo.cpp b/src/statistics/shared/SystemInfo.cpp
deleted file mode 100644 (file)
index 63731f7..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <glib.h>
-#include <runtime_info.h>
-#include <sound_manager.h>
-#include <Types.h>
-#include <SharedVars.h>
-#include "SystemInfo.h"
-
-#define CONNECTED              1
-#define NOT_CONNECTED  0
-
-using namespace ctx;
-
-bool system_info::getAudioJackState(int* state)
-{
-       int value = NOT_CONNECTED;
-       int err = runtime_info_get_value_int(RUNTIME_INFO_KEY_AUDIO_JACK_STATUS, &value);
-       IF_FAIL_RETURN(err == RUNTIME_INFO_ERROR_NONE, false);
-
-       *state = (value == NOT_CONNECTED ? NOT_CONNECTED : CONNECTED);
-
-       return true;
-}
-
-bool system_info::getVolume(int* systemVolume, int* mediaVolume)
-{
-       int err;
-
-       err = sound_manager_get_volume(SOUND_TYPE_SYSTEM, systemVolume);
-       IF_FAIL_RETURN(err == RUNTIME_INFO_ERROR_NONE, false);
-
-       err = sound_manager_get_volume(SOUND_TYPE_MEDIA, mediaVolume);
-       IF_FAIL_RETURN(err == RUNTIME_INFO_ERROR_NONE, false);
-
-       return true;
-}
-
-bool system_info::getWifiBssid(std::string& bssid)
-{
-#if 0
-       /* NOTE: This routine does not work, because the wifi API does not support multi-sessions in one process */
-       int err;
-       char *strBuf = NULL;
-       wifi_ap_h ap = NULL;
-
-       err = wifi_initialize();
-       IF_FAIL_RETURN_TAG(err == WIFI_ERROR_NONE, false, _W, "wifi_initialize() failed (%d)", err);
-
-       err = wifi_get_connected_ap(&ap);
-       if (err != WIFI_ERROR_NONE) {
-               _D("wifi_get_connected_ap() failed (%d)", err);
-               wifi_deinitialize();
-               return false;
-       }
-
-       wifi_ap_get_bssid(ap, &strBuf);
-       bssid = (strBuf != NULL ? strBuf : "");
-       g_free(strBuf);
-
-       wifi_ap_destroy(ap);
-       wifi_deinitialize();
-
-       return !bssid.empty();
-#endif
-       bssid = SharedVars().get(SharedVars::WIFI_BSSID);
-       return true;
-}
diff --git a/src/statistics/shared/SystemInfo.h b/src/statistics/shared/SystemInfo.h
deleted file mode 100644 (file)
index 86f5b19..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_STATS_SYSTEM_INFO_READER_H_
-#define _CONTEXT_STATS_SYSTEM_INFO_READER_H_
-
-#include <string>
-
-namespace ctx {
-       namespace system_info {
-               bool getAudioJackState(int* state);
-               bool getVolume(int* systemVolume, int* mediaVolume);
-               bool getWifiBssid(std::string& bssid);
-       }
-}
-
-#endif /* End of _CONTEXT_STATS_SYSTEM_INFO_READER_H_ */
diff --git a/src/statistics/social/DbHandle.cpp b/src/statistics/social/DbHandle.cpp
deleted file mode 100644 (file)
index 5c1c0a6..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <sstream>
-#include <contacts.h>
-#include <Types.h>
-#include "SocialStatisticsTypes.h"
-#include "DbHandle.h"
-
-using namespace ctx;
-
-SocialDbHandle::SocialDbHandle(ContextProvider *provider) :
-       StatsDbHandleBase(provider)
-{
-}
-
-SocialDbHandle::~SocialDbHandle()
-{
-}
-
-int SocialDbHandle::read(Json filter)
-{
-       std::string query;
-       const char *subject = reqProvider->getSubject();
-
-       if (STR_EQ(subject, SOCIAL_SUBJ_FREQ_ADDRESS)) {
-               query = createSqlFreqAddress(filter);
-
-       } else if (STR_EQ(subject, SOCIAL_SUBJ_FREQUENCY)) {
-               isTriggerItem = true;
-               query = createSqlFrequency(filter);
-       }
-
-       IF_FAIL_RETURN(!query.empty(), ERR_OPERATION_FAILED);
-
-       bool ret = executeQuery(filter, query.c_str());
-       IF_FAIL_RETURN(ret, ERR_OPERATION_FAILED);
-
-       return ERR_NONE;
-}
-
-std::string SocialDbHandle::createWhereClause(Json filter)
-{
-       std::stringstream whereClause;
-       int commType = -1;
-
-       whereClause << StatsDbHandleBase::createWhereClause(filter);
-
-       filter.get(NULL, SOCIAL_COMMUNICATION_TYPE, &commType);
-
-       switch(commType) {
-       case SOCIAL_COMMUNICATION_TYPE_CALL:
-               whereClause <<
-                       " AND " SOCIAL_PHONE_LOG_TYPE " >= " << CONTACTS_PLOG_TYPE_VOICE_INCOMING <<
-                       " AND " SOCIAL_PHONE_LOG_TYPE " <= " << CONTACTS_PLOG_TYPE_VIDEO_BLOCKED;
-               break;
-       case SOCIAL_COMMUNICATION_TYPE_MESSAGE:
-               whereClause <<
-                       " AND " SOCIAL_PHONE_LOG_TYPE " >= " << CONTACTS_PLOG_TYPE_MMS_INCOMING <<
-                       " AND " SOCIAL_PHONE_LOG_TYPE " <= " << CONTACTS_PLOG_TYPE_MMS_BLOCKED;
-               break;
-       default:
-               break;
-       }
-
-       return whereClause.str();
-}
-
-std::string SocialDbHandle::createSqlFreqAddress(Json filter)
-{
-       std::stringstream query;
-       int limit = DEFAULT_LIMIT;
-
-       filter.get(NULL, STATS_RESULT_SIZE, &limit);
-
-       query <<
-               "SELECT " SOCIAL_ADDRESS ", " \
-                       "COUNT(*) AS " STATS_TOTAL_COUNT ", " \
-                       "SUM(" STATS_DURATION ") AS " STATS_TOTAL_DURATION ", " \
-                       "MAX(" STATS_UNIV_TIME ") AS " STATS_LAST_TIME \
-               " FROM " SOCIAL_TABLE_CONTACT_LOG \
-               " WHERE " << createWhereClause(filter) <<
-               " GROUP BY " SOCIAL_ADDRESS \
-               " ORDER BY COUNT(*) DESC" \
-               " LIMIT " << limit;
-
-       return query.str();
-}
-
-std::string SocialDbHandle::createSqlFrequency(Json filter)
-{
-       Json filterCleaned;
-       std::string weekStr;
-       std::string timeOfDay;
-       std::string address;
-
-       if (!filter.get(NULL, SOCIAL_ADDRESS, &address)) {
-               _E("Invalid parameter");
-               return "";
-       }
-
-       if (filter.get(NULL, STATS_DAY_OF_WEEK, &weekStr))
-               filterCleaned.set(NULL, STATS_DAY_OF_WEEK, weekStr);
-
-       if (filter.get(NULL, STATS_TIME_OF_DAY, &timeOfDay))
-               filterCleaned.set(NULL, STATS_TIME_OF_DAY, timeOfDay);
-
-       std::stringstream query;
-
-       query <<
-               "DELETE FROM " SOCIAL_TEMP_CONTACT_FREQ ";";
-
-       query <<
-               "INSERT INTO " SOCIAL_TEMP_CONTACT_FREQ \
-               " SELECT " SOCIAL_ADDRESS ", COUNT(*) AS " STATS_TOTAL_COUNT \
-               " FROM " SOCIAL_TABLE_CONTACT_LOG \
-               " WHERE " << createWhereClause(filterCleaned) <<
-               " GROUP BY " SOCIAL_ADDRESS ";";
-
-       query <<
-               "INSERT OR IGNORE INTO " SOCIAL_TEMP_CONTACT_FREQ " (" SOCIAL_ADDRESS ")" \
-               " VALUES ('" << address << "');";
-
-       query <<
-               "SELECT S." SOCIAL_ADDRESS ", S." STATS_TOTAL_COUNT ", 1+COUNT(lesser." STATS_TOTAL_COUNT ") AS " STATS_RANK \
-               " FROM " SOCIAL_TEMP_CONTACT_FREQ " AS S" \
-               " LEFT JOIN " SOCIAL_TEMP_CONTACT_FREQ " AS lesser" \
-               " ON S." STATS_TOTAL_COUNT " < lesser." STATS_TOTAL_COUNT \
-               " WHERE S." SOCIAL_ADDRESS " = '" << address << "'";
-
-
-       return query.str();
-}
-
-void SocialDbHandle::replyTriggerItem(int error, Json &jsonResult)
-{
-       IF_FAIL_VOID_TAG(STR_EQ(reqProvider->getSubject(), SOCIAL_SUBJ_FREQUENCY), _E, "Invalid subject");
-
-       Json results;
-       std::string valStr;
-       int val;
-
-       jsonResult.get(NULL, SOCIAL_ADDRESS, &valStr);
-       results.set(NULL, SOCIAL_ADDRESS, valStr);
-       jsonResult.get(NULL, STATS_TOTAL_COUNT, &val);
-       results.set(NULL, STATS_TOTAL_COUNT, val);
-       jsonResult.get(NULL, STATS_RANK, &val);
-       results.set(NULL, STATS_RANK, val);
-
-       reqProvider->replyToRead(reqFilter, error, results);
-}
diff --git a/src/statistics/social/DbHandle.h b/src/statistics/social/DbHandle.h
deleted file mode 100644 (file)
index 576c6a1..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_STATS_SOCIAL_DB_HANDLE_H_
-#define _CONTEXT_STATS_SOCIAL_DB_HANDLE_H_
-
-#include <string>
-#include <Json.h>
-#include "../shared/DbHandleBase.h"
-
-namespace ctx {
-       class SocialDbHandle : public StatsDbHandleBase {
-       public:
-               SocialDbHandle(ContextProvider *provider);
-               ~SocialDbHandle();
-
-               int read(Json filter);
-
-       protected:
-               std::string createWhereClause(Json filter);
-               std::string createSqlFreqAddress(Json filter);
-               std::string createSqlFrequency(Json filter);
-               void replyTriggerItem(int error, Json &jsonResult);
-       };
-}
-
-#endif /* End of _CONTEXT_STATS_SOCIAL_DB_HANDLE_H_ */
diff --git a/src/statistics/social/LogAggregator.cpp b/src/statistics/social/LogAggregator.cpp
deleted file mode 100644 (file)
index dac092d..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <sstream>
-#include <Json.h>
-#include <Types.h>
-#include "SocialStatisticsTypes.h"
-#include "LogAggregator.h"
-
-ctx::ContactLogAggregator::ContactLogAggregator() :
-       __timerId(-1),
-       __timeDiff(0)
-{
-       __createTable();
-       __timerId = __timerManager.setAt(3, 0, DayOfWeek::EVERYDAY, this);
-}
-
-ctx::ContactLogAggregator::~ContactLogAggregator()
-{
-       __timerManager.remove(__timerId);
-}
-
-void ctx::ContactLogAggregator::__createTable()
-{
-       static bool done = false;
-       IF_FAIL_VOID(!done);
-
-       __dbManager.createTable(0, SOCIAL_TABLE_CONTACT_LOG, SOCIAL_TABLE_CONTACT_LOG_COLUMNS, NULL, NULL);
-       __dbManager.execute(0, SOCIAL_TEMP_CONTACT_FREQ_SQL, NULL);
-
-       done = true;
-}
-
-bool ctx::ContactLogAggregator::onTimerExpired(int timerId)
-{
-       aggregateContactLog();
-       return true;
-}
-
-void ctx::ContactLogAggregator::aggregateContactLog()
-{
-       __dbManager.execute(0,
-                       "SELECT IFNULL(MAX(" STATS_UNIV_TIME "),0) AS " STATS_LAST_TIME \
-                       ", (strftime('%s', 'now', 'localtime')) - (strftime('%s', 'now')) AS " TIME_DIFFERENCE \
-                       " FROM " SOCIAL_TABLE_CONTACT_LOG, this);
-}
-
-void ctx::ContactLogAggregator::onExecuted(unsigned int queryId, int error, std::vector<Json>& records)
-{
-       IF_FAIL_VOID_TAG(!records.empty(), _E, "Invalid query result");
-
-       int lastTime = 0;
-       records[0].get(NULL, STATS_LAST_TIME, &lastTime);
-       records[0].get(NULL, TIME_DIFFERENCE, &__timeDiff);
-
-       _D("Last Time: %d / Local - UTC: %d", lastTime, __timeDiff);
-
-       contacts_list_h list = NULL;
-
-       __getUpdatedContactLogList(lastTime, &list);
-       IF_FAIL_VOID(list);
-
-       __removeExpiredLog();
-       __insertContactLogList(list);
-       __destroyContactLogList(list);
-}
-
-void ctx::ContactLogAggregator::__getUpdatedContactLogList(int lastTime, contacts_list_h *list)
-{
-       contacts_filter_h filter = NULL;
-       contacts_query_h query = NULL;
-
-       int err = contacts_connect();
-       IF_FAIL_VOID_TAG(err == CONTACTS_ERROR_NONE, _E, "contacts_connect() failed");
-
-       err = contacts_filter_create(_contacts_phone_log._uri, &filter);
-       IF_FAIL_CATCH_TAG(err == CONTACTS_ERROR_NONE, _E, "contacts_filter_create() failed");
-
-       contacts_filter_add_int(filter, _contacts_phone_log.log_type, CONTACTS_MATCH_GREATER_THAN_OR_EQUAL, CONTACTS_PLOG_TYPE_VOICE_INCOMING);
-       contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_AND);
-       contacts_filter_add_int(filter, _contacts_phone_log.log_type, CONTACTS_MATCH_LESS_THAN_OR_EQUAL, CONTACTS_PLOG_TYPE_MMS_BLOCKED);
-       contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_AND);
-       contacts_filter_add_int(filter, _contacts_phone_log.log_time , CONTACTS_MATCH_GREATER_THAN, lastTime);
-       contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_AND);
-
-       err = contacts_query_create(_contacts_phone_log._uri, &query);
-       IF_FAIL_CATCH_TAG(err == CONTACTS_ERROR_NONE, _E, "contacts_query_create() failed");
-
-       contacts_query_set_filter(query, filter);
-       contacts_query_set_sort(query, _contacts_phone_log.log_time, true);
-
-       err = contacts_db_get_records_with_query(query, 0, 0, list);
-       IF_FAIL_CATCH_TAG(err == CONTACTS_ERROR_NONE, _E, "contacts_db_get_records_with_query() failed");
-
-CATCH:
-       if (filter)
-               contacts_filter_destroy(filter);
-       if (query)
-               contacts_query_destroy(query);
-}
-
-void ctx::ContactLogAggregator::__destroyContactLogList(contacts_list_h list)
-{
-       if (list)
-               contacts_list_destroy(list, true);
-
-       contacts_disconnect();
-}
-
-void ctx::ContactLogAggregator::__insertContactLogList(contacts_list_h list)
-{
-       IF_FAIL_VOID(contacts_list_first(list) == CONTACTS_ERROR_NONE);
-
-       do {
-               contacts_record_h record = NULL;
-               contacts_list_get_current_record_p(list, &record);
-               if (record == NULL) break;
-
-               ctx::Json data;
-
-               char* address = NULL;
-               int logType;
-               int duration = 0;
-               int accessTime = 0;
-
-               contacts_record_get_str_p(record, _contacts_phone_log.address, &address);
-
-               if (!address) {
-                       _W("Getting address failed");
-                       continue;
-               }
-
-               contacts_record_get_int(record, _contacts_phone_log.log_type, &logType);
-               contacts_record_get_int(record, _contacts_phone_log.extra_data1, &duration);
-               contacts_record_get_int(record, _contacts_phone_log.log_time, &accessTime);
-
-               data.set(NULL, SOCIAL_ADDRESS, address);
-               data.set(NULL, SOCIAL_PHONE_LOG_TYPE, logType);
-               data.set(NULL, STATS_DURATION, duration);
-               data.set(NULL, STATS_UNIV_TIME, accessTime);
-               data.set(NULL, STATS_LOCAL_TIME, accessTime + __timeDiff);
-
-               __dbManager.insert(0, SOCIAL_TABLE_CONTACT_LOG, data, NULL);
-
-       } while(contacts_list_next(list) == CONTACTS_ERROR_NONE);
-}
-
-void ctx::ContactLogAggregator::__removeExpiredLog()
-{
-       std::stringstream query;
-       query << "DELETE FROM " SOCIAL_TABLE_CONTACT_LOG " WHERE " \
-               STATS_UNIV_TIME " < strftime('%s', 'now') - " << LOG_RETENTION_PERIOD;
-       __dbManager.execute(0, query.str().c_str(), NULL);
-}
diff --git a/src/statistics/social/LogAggregator.h b/src/statistics/social/LogAggregator.h
deleted file mode 100644 (file)
index cc3962d..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_STATS_SOCIAL_CONTACT_LOG_AGGREGATOR_H_
-#define _CONTEXT_STATS_SOCIAL_CONTACT_LOG_AGGREGATOR_H_
-
-#include <contacts.h>
-#include <DatabaseManager.h>
-#include <TimerManager.h>
-
-namespace ctx {
-
-       class ContactLogAggregator : public IDatabaseListener, public ITimerListener {
-       private:
-               int __timerId;
-               int __timeDiff;
-               TimerManager __timerManager;
-               DatabaseManager __dbManager;
-
-               void __createTable();
-               void __getUpdatedContactLogList(int last_time, contacts_list_h *list);
-               void __insertContactLogList(contacts_list_h list);
-               void __destroyContactLogList(contacts_list_h list);
-               void __removeExpiredLog();
-
-       public:
-               ContactLogAggregator();
-               ~ContactLogAggregator();
-
-               void aggregateContactLog();
-
-               void onTableCreated(unsigned int queryId, int error) {}
-               void onInserted(unsigned int queryId, int error, int64_t rowId) {}
-               void onExecuted(unsigned int queryId, int error, std::vector<Json>& records);
-               bool onTimerExpired(int timerId);
-
-       };      /* class ContactLogAggregator */
-
-}      /* namespace ctx */
-
-#endif /* End of _CONTEXT_STATS_SOCIAL_CONTACT_LOG_AGGREGTOR_H_ */
diff --git a/src/statistics/social/SocialStatisticsTypes.h b/src/statistics/social/SocialStatisticsTypes.h
deleted file mode 100644 (file)
index 7c68b93..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_STATS_SOCIAL_TYPES_H_
-#define _CONTEXT_STATS_SOCIAL_TYPES_H_
-
-#include "../shared/CommonTypes.h"
-
-#define SOCIAL_HISTORY_PRIV                    "callhistory.read"
-#define SOCIAL_SUBJ_LOGGER                     "stats/contact/logger"
-#define SOCIAL_SUBJ_FREQ_ADDRESS       "stats/contact/often"
-#define SOCIAL_SUBJ_FREQUENCY          "stats/contact/frequency"
-
-#define SOCIAL_TABLE_CONTACT_LOG       "Log_Contact"
-#define SOCIAL_TABLE_CONTACT_LOG_COLUMNS \
-       "Address TEXT NOT NULL, PLogType INTEGER NOT NULL, " \
-       "Duration INTEGER NOT NULL DEFAULT 0, " \
-       "UTC TIMESTAMP DEFAULT (strftime('%s', 'now')), " \
-       "LocalTime TIMESTAMP DEFAULT (strftime('%s', 'now', 'localtime'))"
-
-#define SOCIAL_TEMP_CONTACT_FREQ       "Temp_ContactFreq"
-#define SOCIAL_TEMP_CONTACT_FREQ_SQL \
-       "CREATE TABLE IF NOT EXISTS " SOCIAL_TEMP_CONTACT_FREQ \
-       " (Address TEXT NOT NULL UNIQUE, TotalCount INTEGER DEFAULT 0);"
-
-#define SOCIAL_COMMUNICATION_TYPE      "CommunicationType"
-#define SOCIAL_ADDRESS                         "Address"
-#define SOCIAL_PHONE_LOG_TYPE          "PLogType"
-#define TIME_DIFFERENCE                                "TimeDIff"
-
-enum SocialCommType {
-       SOCIAL_COMMUNICATION_TYPE_CALL = 1,
-       SOCIAL_COMMUNICATION_TYPE_MESSAGE,
-       SOCIAL_COMMUNICATION_TYPE_ALL
-};
-
-#endif /* End of _CONTEXT_STATS_SOCIAL_TYPES_ */
diff --git a/src/statistics/social/SocialStatsLogger.cpp b/src/statistics/social/SocialStatsLogger.cpp
deleted file mode 100644 (file)
index a32fa80..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "SocialStatisticsTypes.h"
-#include "SocialStatsLogger.h"
-
-using namespace ctx;
-
-SocialStatsLogger::SocialStatsLogger() :
-       ContextProvider(SOCIAL_SUBJ_LOGGER)
-{
-}
-
-SocialStatsLogger::~SocialStatsLogger()
-{
-}
-
-int SocialStatsLogger::subscribe(Json option, Json* requestResult)
-{
-       return ERR_NONE;
-}
-
-int SocialStatsLogger::unsubscribe(Json option)
-{
-       return ERR_NONE;
-}
diff --git a/src/statistics/social/SocialStatsLogger.h b/src/statistics/social/SocialStatsLogger.h
deleted file mode 100644 (file)
index 17850e9..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_SOCIAL_STATS_LOGGER_H_
-#define _CONTEXT_SOCIAL_STATS_LOGGER_H_
-
-#include <ContextProvider.h>
-#include "LogAggregator.h"
-
-namespace ctx {
-
-       class SocialStatsLogger : public ContextProvider {
-       public:
-               SocialStatsLogger();
-               ~SocialStatsLogger();
-
-               int subscribe(Json option, Json* requestResult);
-               int unsubscribe(Json option);
-
-               void submitTriggerItem() {}
-
-       private:
-               ContactLogAggregator __aggregator;
-       };
-
-}      /* namespace ctx */
-
-#endif /* _CONTEXT_SOCIAL_STATS_LOGGER_H_ */
-
diff --git a/src/statistics/social/SocialStatsProvider.cpp b/src/statistics/social/SocialStatsProvider.cpp
deleted file mode 100644 (file)
index 0c0dd6d..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "SocialStatsProvider.h"
-#include "DbHandle.h"
-
-using namespace ctx;
-
-SocialStatsProvider::SocialStatsProvider(const char *subject) :
-       ContextProvider(subject)
-{
-}
-
-SocialStatsProvider::~SocialStatsProvider()
-{
-}
-
-bool SocialStatsProvider::isSupported()
-{
-       /* TODO */
-       return true;
-}
-
-void SocialStatsProvider::submitTriggerItem()
-{
-}
-
-int SocialStatsProvider::read(Json option, Json* requestResult)
-{
-       SocialDbHandle *handle = new(std::nothrow) SocialDbHandle(this);
-       IF_FAIL_RETURN_TAG(handle, ERR_OPERATION_FAILED, _E, "Memory allocation failed");
-
-       int err = handle->read(option);
-       if (err != ERR_NONE) {
-               delete handle;
-               return err;
-       }
-
-       return ERR_NONE;
-}
-
-void ContactFreqProvider::submitTriggerItem()
-{
-       registerTriggerItem(OPS_READ,
-                       "{" TRIG_DEF_RANK "," TRIG_DEF_TOTAL_COUNT "}",
-                       "{"
-                               "\"Address\":{\"type\":\"string\"},"
-                               TRIG_DEF_TIME_OF_DAY "," TRIG_DEF_DAY_OF_WEEK
-                       "}");
-}
diff --git a/src/statistics/social/SocialStatsProvider.h b/src/statistics/social/SocialStatsProvider.h
deleted file mode 100644 (file)
index 0ee94fd..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_SOCIAL_STATS_PROVIDER_H_
-#define _CONTEXT_SOCIAL_STATS_PROVIDER_H_
-
-#include <ContextProvider.h>
-#include "SocialStatisticsTypes.h"
-
-namespace ctx {
-
-       class SocialStatsProvider : public ContextProvider {
-       public:
-               int read(Json option, Json* requestResult);
-
-               bool isSupported();
-               virtual void submitTriggerItem();
-
-       protected:
-               SocialStatsProvider(const char *subject);
-               virtual ~SocialStatsProvider();
-       };
-
-
-       class ContactFreqProvider: public SocialStatsProvider {
-       public:
-               ContactFreqProvider() :
-                       SocialStatsProvider(SOCIAL_SUBJ_FREQUENCY) {}
-
-               void submitTriggerItem();
-       };
-
-
-       class TopContactsProvider: public SocialStatsProvider {
-       public:
-               TopContactsProvider() :
-                       SocialStatsProvider(SOCIAL_SUBJ_FREQ_ADDRESS) {}
-       };
-
-}      /* namespace ctx */
-
-#endif /* _CONTEXT_SOCIAL_STATS_PROVIDER_H_ */
diff --git a/src/system/Battery.cpp b/src/system/Battery.cpp
new file mode 100644 (file)
index 0000000..69b1ecd
--- /dev/null
@@ -0,0 +1,140 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "Battery.h"
+
+using namespace ctx;
+
+DeviceStatusBattery::DeviceStatusBattery()
+       : DeviceProviderBase(DEVICE_ST_SUBJ_BATTERY)
+{
+}
+
+DeviceStatusBattery::~DeviceStatusBattery()
+{
+}
+
+bool DeviceStatusBattery::isSupported()
+{
+       return true;
+}
+
+void DeviceStatusBattery::submitTriggerItem()
+{
+       registerTriggerItem(OPS_SUBSCRIBE | OPS_READ,
+                       "{"
+                               "\"Level\":{\"type\":\"string\",\"values\":[\"Empty\",\"Critical\",\"Low\",\"Normal\",\"High\",\"Full\"]},"
+                               TRIG_BOOL_ITEM_DEF("IsCharging")
+                       "}",
+                       NULL);
+}
+
+void DeviceStatusBattery::__updateCb(device_callback_e deviceType, void* value, void* userData)
+{
+       IF_FAIL_VOID(deviceType == DEVICE_CALLBACK_BATTERY_LEVEL);
+
+       DeviceStatusBattery *instance = static_cast<DeviceStatusBattery*>(userData);
+       instance->__handleUpdate(deviceType, value);
+}
+
+void DeviceStatusBattery::__handleUpdate(device_callback_e deviceType, void* value)
+{
+       intptr_t level = (intptr_t)value;
+
+       const char* levelString = __transToString(level);
+       IF_FAIL_VOID(levelString);
+
+       Json dataRead;
+       dataRead.set(NULL, DEVICE_ST_LEVEL, levelString);
+
+       bool chargingState = false;
+       int ret = device_battery_is_charging(&chargingState);
+       IF_FAIL_VOID_TAG(ret == DEVICE_ERROR_NONE, _E, "Getting state failed");
+
+       dataRead.set(NULL, DEVICE_ST_IS_CHARGING, chargingState ? DEVICE_ST_TRUE : DEVICE_ST_FALSE);
+       publish(NULL, ERR_NONE, dataRead);
+}
+
+const char* DeviceStatusBattery::__transToString(intptr_t level)
+{
+       switch (level) {
+       case DEVICE_BATTERY_LEVEL_EMPTY:
+               return DEVICE_ST_EMPTY;
+
+       case DEVICE_BATTERY_LEVEL_CRITICAL:
+               return DEVICE_ST_CRITICAL;
+
+       case DEVICE_BATTERY_LEVEL_LOW:
+               return DEVICE_ST_LOW;
+
+       case DEVICE_BATTERY_LEVEL_HIGH:
+               return DEVICE_ST_NORMAL;
+
+       case DEVICE_BATTERY_LEVEL_FULL:
+       {
+               int percent;
+               device_battery_get_percent(&percent);
+
+               if (percent == 100) {
+                       return DEVICE_ST_FULL;
+               } else {
+                       return DEVICE_ST_HIGH;
+               }
+               break;
+       }
+
+       default:
+               _E("Invalid battery level");
+               return NULL;
+       }
+}
+
+int DeviceStatusBattery::subscribe()
+{
+       int ret = device_add_callback(DEVICE_CALLBACK_BATTERY_LEVEL, __updateCb, this);
+       IF_FAIL_RETURN(ret == DEVICE_ERROR_NONE, ERR_OPERATION_FAILED);
+       return ERR_NONE;
+}
+
+int DeviceStatusBattery::unsubscribe()
+{
+       int ret = device_remove_callback(DEVICE_CALLBACK_BATTERY_LEVEL, __updateCb);
+       IF_FAIL_RETURN(ret == DEVICE_ERROR_NONE, ERR_OPERATION_FAILED);
+       return ERR_NONE;
+}
+
+int DeviceStatusBattery::read()
+{
+       device_battery_level_e level;
+       Json dataRead;
+
+       int ret = device_battery_get_level_status(&level);
+       IF_FAIL_RETURN(ret == DEVICE_ERROR_NONE, ERR_OPERATION_FAILED);
+
+       const char* levelString = __transToString(level);
+       IF_FAIL_RETURN(levelString, ERR_OPERATION_FAILED);
+
+       dataRead.set(NULL, DEVICE_ST_LEVEL, levelString);
+
+       bool chargingState = false;
+       ret = device_battery_is_charging(&chargingState);
+       IF_FAIL_RETURN(ret == DEVICE_ERROR_NONE, ERR_OPERATION_FAILED);
+
+       dataRead.set(NULL, DEVICE_ST_IS_CHARGING, chargingState ? DEVICE_ST_TRUE : DEVICE_ST_FALSE);
+
+       replyToRead(NULL, ERR_NONE, dataRead);
+       return ERR_NONE;
+}
diff --git a/src/system/Battery.h b/src/system/Battery.h
new file mode 100644 (file)
index 0000000..34482b4
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _DEVICE_SYSTEM_STATUS_BATTERY_H_
+#define _DEVICE_SYSTEM_STATUS_BATTERY_H_
+
+#include <device/callback.h>
+#include <device/battery.h>
+#include "../shared/SystemTypes.h"
+#include "../shared/DeviceProviderBase.h"
+
+namespace ctx {
+
+       class DeviceStatusBattery : public DeviceProviderBase {
+       public:
+               DeviceStatusBattery();
+               ~DeviceStatusBattery();
+
+               int subscribe();
+               int unsubscribe();
+               int read();
+
+               bool isSupported();
+               void submitTriggerItem();
+
+       private:
+               const char* __transToString(intptr_t level);
+               void __handleUpdate(device_callback_e deviceType, void* value);
+               static void __updateCb(device_callback_e deviceType, void* value, void* userData);
+       };
+}
+
+#endif // _DEVICE_SYSTEM_STATUS_BATTERY_H_
diff --git a/src/system/Charger.cpp b/src/system/Charger.cpp
new file mode 100644 (file)
index 0000000..5703747
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "Charger.h"
+
+using namespace ctx;
+
+DeviceStatusCharger::DeviceStatusCharger() :
+       DeviceStatusRuntimeInfo(DEVICE_ST_SUBJ_CHARGER, RUNTIME_INFO_KEY_CHARGER_CONNECTED)
+{
+}
+
+DeviceStatusCharger::~DeviceStatusCharger()
+{
+}
+
+bool DeviceStatusCharger::isSupported()
+{
+       return true;
+}
+
+void DeviceStatusCharger::submitTriggerItem()
+{
+       registerTriggerItem(OPS_SUBSCRIBE | OPS_READ,
+                       "{" TRIG_BOOL_ITEM_DEF("IsConnected") "}", NULL);
+}
+
+void DeviceStatusCharger::handleUpdate()
+{
+       bool chargerStatus = false;
+
+       int ret = runtime_info_get_value_bool(RUNTIME_INFO_KEY_CHARGER_CONNECTED, &chargerStatus);
+       IF_FAIL_VOID_TAG(ret == RUNTIME_INFO_ERROR_NONE, _E, "Getting runtime info failed");
+
+       Json dataRead;
+       dataRead.set(NULL, DEVICE_ST_IS_CONNECTED, chargerStatus ? DEVICE_ST_TRUE : DEVICE_ST_FALSE);
+
+       publish(NULL, ERR_NONE, dataRead);
+}
+
+int DeviceStatusCharger::read()
+{
+       bool chargerStatus = false;
+       Json dataRead;
+
+       int ret = runtime_info_get_value_bool(RUNTIME_INFO_KEY_CHARGER_CONNECTED, &chargerStatus);
+       IF_FAIL_RETURN_TAG(ret == RUNTIME_INFO_ERROR_NONE, ERR_OPERATION_FAILED, _E, "Getting runtime info failed");
+
+       dataRead.set(NULL, DEVICE_ST_IS_CONNECTED, chargerStatus ? DEVICE_ST_TRUE : DEVICE_ST_FALSE);
+
+       replyToRead(NULL, ERR_NONE, dataRead);
+       return ERR_NONE;
+}
diff --git a/src/system/Charger.h b/src/system/Charger.h
new file mode 100644 (file)
index 0000000..a6746a3
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _DEVICE_SYSTEM_STATUS_CHARGER_
+#define _DEVICE_SYSTEM_STATUS_CHARGER_
+
+#include "RuntimeInfoBase.h"
+
+namespace ctx {
+
+       class DeviceStatusCharger : public DeviceStatusRuntimeInfo {
+       public:
+               DeviceStatusCharger();
+               ~DeviceStatusCharger();
+
+               int read();
+
+               bool isSupported();
+               void submitTriggerItem();
+
+       protected:
+               void handleUpdate();
+       };
+}
+
+#endif // _DEVICE_SYSTEM_STATUS_CHARGER_H_
diff --git a/src/system/Gps.cpp b/src/system/Gps.cpp
new file mode 100644 (file)
index 0000000..9b6d083
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "Gps.h"
+
+using namespace ctx;
+
+static const char* __getStatusString(int gpsStatus)
+{
+       switch (gpsStatus) {
+       case RUNTIME_INFO_GPS_STATUS_DISABLED:
+               return DEVICE_ST_DISABLED;
+
+       case RUNTIME_INFO_GPS_STATUS_SEARCHING:
+               return DEVICE_ST_SEARCHING;
+
+       case RUNTIME_INFO_GPS_STATUS_CONNECTED:
+               return DEVICE_ST_CONNECTED;
+
+       default:
+               _E("Unknown GPS status: %d", gpsStatus);
+               return NULL;
+       }
+}
+
+DeviceStatusGps::DeviceStatusGps() :
+       DeviceStatusRuntimeInfo(DEVICE_ST_SUBJ_GPS, RUNTIME_INFO_KEY_GPS_STATUS)
+{
+}
+
+DeviceStatusGps::~DeviceStatusGps()
+{
+}
+
+bool DeviceStatusGps::isSupported()
+{
+       return getSystemInfoBool("tizen.org/feature/location.gps");
+}
+
+void DeviceStatusGps::submitTriggerItem()
+{
+       registerTriggerItem(OPS_SUBSCRIBE | OPS_READ,
+                       "{"
+                               "\"State\":{\"type\":\"string\",\"values\":[\"Disabled\",\"Searching\",\"Connected\"]}"
+                       "}",
+                       NULL);
+}
+
+void DeviceStatusGps::handleUpdate()
+{
+       int gpsStatus;
+       int ret = runtime_info_get_value_int(RUNTIME_INFO_KEY_GPS_STATUS, &gpsStatus);
+       IF_FAIL_VOID_TAG(ret == RUNTIME_INFO_ERROR_NONE, _E, "Getting runtime info failed");
+
+       Json dataRead;
+
+       const char* stateStr = __getStatusString(gpsStatus);
+       IF_FAIL_VOID(stateStr);
+
+       dataRead.set(NULL, DEVICE_ST_STATE, stateStr);
+
+       publish(NULL, ERR_NONE, dataRead);
+}
+
+int DeviceStatusGps::read()
+{
+       int gpsStatus;
+       Json dataRead;
+
+       int ret = runtime_info_get_value_int(RUNTIME_INFO_KEY_GPS_STATUS, &gpsStatus);
+       IF_FAIL_RETURN_TAG(ret == RUNTIME_INFO_ERROR_NONE, ERR_OPERATION_FAILED, _E, "Getting runtime info failed");
+
+       const char* stateStr = __getStatusString(gpsStatus);
+       IF_FAIL_RETURN(stateStr, ERR_OPERATION_FAILED);
+
+       dataRead.set(NULL, DEVICE_ST_STATE, stateStr);
+
+       replyToRead(NULL, ERR_NONE, dataRead);
+       return ERR_NONE;
+}
diff --git a/src/system/Gps.h b/src/system/Gps.h
new file mode 100644 (file)
index 0000000..87acd1b
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _DEVICE_SYSTEM_STATUS_GPS_H_
+#define _DEVICE_SYSTEM_STATUS_GPS_H_
+
+#include "RuntimeInfoBase.h"
+
+namespace ctx {
+
+       class DeviceStatusGps : public DeviceStatusRuntimeInfo {
+       public:
+               DeviceStatusGps();
+               ~DeviceStatusGps();
+
+               int read();
+
+               bool isSupported();
+               void submitTriggerItem();
+
+       protected:
+               void handleUpdate();
+       };
+}
+
+#endif // _DEVICE_SYSTEM_STATUS_GPS_H_
diff --git a/src/system/Psmode.cpp b/src/system/Psmode.cpp
new file mode 100644 (file)
index 0000000..c7d61d7
--- /dev/null
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "Psmode.h"
+
+using namespace ctx;
+
+DeviceStatusPsmode::DeviceStatusPsmode() :
+       DeviceProviderBase(DEVICE_ST_SUBJ_PSMODE)
+{
+}
+
+DeviceStatusPsmode::~DeviceStatusPsmode()
+{
+}
+
+bool DeviceStatusPsmode::isSupported()
+{
+       return true;
+}
+
+void DeviceStatusPsmode::submitTriggerItem()
+{
+       registerTriggerItem(OPS_SUBSCRIBE | OPS_READ,
+                       "{" TRIG_BOOL_ITEM_DEF("IsEnabled") "}", NULL);
+}
+
+void DeviceStatusPsmode::__updateCb(keynode_t *node, void* userData)
+{
+       DeviceStatusPsmode *instance = static_cast<DeviceStatusPsmode*>(userData);
+       instance->__handleUpdate(node);
+}
+
+void DeviceStatusPsmode::__handleUpdate(keynode_t *node)
+{
+       int status;
+       Json dataRead;
+
+       status = vconf_keynode_get_int(node);
+       IF_FAIL_VOID_TAG(status >= 0, _E, "Getting state failed");
+
+       dataRead.set(NULL, DEVICE_ST_IS_ENABLED, status == 0 ? DEVICE_ST_FALSE : DEVICE_ST_TRUE);
+
+       publish(NULL, ERR_NONE, dataRead);
+}
+
+int DeviceStatusPsmode::subscribe()
+{
+       int ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_PSMODE, __updateCb, this);
+       IF_FAIL_RETURN(ret == VCONF_OK, ERR_OPERATION_FAILED);
+       return ERR_NONE;
+}
+
+int DeviceStatusPsmode::unsubscribe()
+{
+       int ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_PSMODE, __updateCb);
+       IF_FAIL_RETURN(ret == VCONF_OK, ERR_OPERATION_FAILED);
+       return ERR_NONE;
+}
+
+int DeviceStatusPsmode::read()
+{
+       int mode;
+       int ret = vconf_get_int(VCONFKEY_SETAPPL_PSMODE, &mode);
+       IF_FAIL_RETURN(ret == VCONF_OK, ERR_OPERATION_FAILED);
+
+       Json dataRead;
+       dataRead.set(NULL, DEVICE_ST_IS_ENABLED, mode == 0 ? DEVICE_ST_FALSE : DEVICE_ST_TRUE);
+
+       replyToRead(NULL, ERR_NONE, dataRead);
+       return ERR_NONE;
+}
diff --git a/src/system/Psmode.h b/src/system/Psmode.h
new file mode 100644 (file)
index 0000000..0cbe3cb
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _DEVICE_SYSTEM_STATUS_POWER_SAVING_MODE_H_
+#define _DEVICE_SYSTEM_STATUS_POWER_SAVING_MODE_H_
+
+#include <vconf.h>
+#include "../shared/SystemTypes.h"
+#include "../shared/DeviceProviderBase.h"
+
+namespace ctx {
+
+       class DeviceStatusPsmode : public DeviceProviderBase {
+       public:
+               DeviceStatusPsmode();
+               ~DeviceStatusPsmode();
+
+               int subscribe();
+               int unsubscribe();
+               int read();
+
+               bool isSupported();
+               void submitTriggerItem();
+
+       private:
+               void __handleUpdate(keynode_t *node);
+               static void __updateCb(keynode_t *node, void* userData);
+       };
+}
+
+#endif // _DEVICE_SYSTEM_STATUS_POWER_SAVING_MODE_H_
diff --git a/src/system/RuntimeInfoBase.cpp b/src/system/RuntimeInfoBase.cpp
new file mode 100644 (file)
index 0000000..1f745ad
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "RuntimeInfoBase.h"
+
+using namespace ctx;
+
+DeviceStatusRuntimeInfo::DeviceStatusRuntimeInfo(const char *subject, runtime_info_key_e key) :
+       DeviceProviderBase(subject),
+       __infoKey(key)
+{
+}
+
+runtime_info_key_e DeviceStatusRuntimeInfo::__getInfoKey()
+{
+       return __infoKey;
+}
+
+void DeviceStatusRuntimeInfo::updateCb(runtime_info_key_e runtimeKey, void* userData)
+{
+       DeviceStatusRuntimeInfo *instance = static_cast<DeviceStatusRuntimeInfo*>(userData);
+       IF_FAIL_VOID_TAG(runtimeKey == instance->__getInfoKey(), _W, "Runtime info key mismatch");
+       instance->handleUpdate();
+}
+
+int DeviceStatusRuntimeInfo::subscribe()
+{
+       int ret = runtime_info_set_changed_cb(__infoKey, updateCb, this);
+       IF_FAIL_RETURN(ret == RUNTIME_INFO_ERROR_NONE, ERR_OPERATION_FAILED);
+       return ERR_NONE;
+}
+
+int DeviceStatusRuntimeInfo::unsubscribe()
+{
+       int ret = runtime_info_unset_changed_cb(__infoKey);
+       IF_FAIL_RETURN(ret == RUNTIME_INFO_ERROR_NONE, ERR_OPERATION_FAILED);
+       return ERR_NONE;
+}
diff --git a/src/system/RuntimeInfoBase.h b/src/system/RuntimeInfoBase.h
new file mode 100644 (file)
index 0000000..7d8f6ee
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _DEVICE_SYSTEM_STATUS_RUNTIME_INFO_BASE_H_
+#define _DEVICE_SYSTEM_STATUS_RUNTIME_INFO_BASE_H_
+
+#include <runtime_info.h>
+#include "../shared/SystemTypes.h"
+#include "../shared/DeviceProviderBase.h"
+
+namespace ctx {
+
+       class DeviceStatusRuntimeInfo : public DeviceProviderBase {
+       public:
+               DeviceStatusRuntimeInfo(const char *subject, runtime_info_key_e key);
+
+               int subscribe();
+               int unsubscribe();
+               virtual int read() = 0;
+
+       protected:
+               runtime_info_key_e __infoKey;
+
+               virtual ~DeviceStatusRuntimeInfo(){}
+               static void updateCb(runtime_info_key_e runtimeKey, void* userData);
+               virtual void handleUpdate() = 0;
+
+       private:
+               runtime_info_key_e __getInfoKey();
+       };
+}
+
+#endif // _DEVICE_SYSTEM_STATUS_RUNTIME_INFO_BASE_H_
diff --git a/src/system/Usb.cpp b/src/system/Usb.cpp
new file mode 100644 (file)
index 0000000..c94edf7
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "Usb.h"
+
+using namespace ctx;
+
+DeviceStatusUsb::DeviceStatusUsb()     :
+       DeviceStatusRuntimeInfo(DEVICE_ST_SUBJ_USB, RUNTIME_INFO_KEY_USB_CONNECTED)
+{
+}
+
+DeviceStatusUsb::~DeviceStatusUsb()
+{
+}
+
+bool DeviceStatusUsb::isSupported()
+{
+       return getSystemInfoBool("tizen.org/feature/usb.host");
+}
+
+void DeviceStatusUsb::submitTriggerItem()
+{
+       registerTriggerItem(OPS_SUBSCRIBE | OPS_READ,
+                       "{" TRIG_BOOL_ITEM_DEF("IsConnected") "}", NULL);
+}
+
+void DeviceStatusUsb::handleUpdate()
+{
+       bool status = false;
+
+       int ret = runtime_info_get_value_bool(RUNTIME_INFO_KEY_USB_CONNECTED, &status);
+       IF_FAIL_VOID_TAG(ret == RUNTIME_INFO_ERROR_NONE, _E, "Getting runtime info failed");
+
+       Json dataRead;
+       dataRead.set(NULL, DEVICE_ST_IS_CONNECTED, status ? DEVICE_ST_TRUE : DEVICE_ST_FALSE);
+
+       publish(NULL, ERR_NONE, dataRead);
+}
+
+int DeviceStatusUsb::read()
+{
+       bool status = false;
+       Json dataRead;
+
+       int ret = runtime_info_get_value_bool(RUNTIME_INFO_KEY_USB_CONNECTED, &status);
+       IF_FAIL_RETURN_TAG(ret == RUNTIME_INFO_ERROR_NONE, ERR_OPERATION_FAILED, _E, "Getting runtime info failed");
+
+       dataRead.set(NULL, DEVICE_ST_IS_CONNECTED, status ? DEVICE_ST_TRUE : DEVICE_ST_FALSE);
+
+       replyToRead(NULL, ERR_NONE, dataRead);
+       return ERR_NONE;
+}
diff --git a/src/system/Usb.h b/src/system/Usb.h
new file mode 100644 (file)
index 0000000..fc8678c
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _DEVICE_SYSTEM_STATUS_USB_H_
+#define _DEVICE_SYSTEM_STATUS_USB_H_
+
+#include "RuntimeInfoBase.h"
+
+namespace ctx {
+
+       class DeviceStatusUsb : public DeviceStatusRuntimeInfo {
+       public:
+               DeviceStatusUsb();
+               ~DeviceStatusUsb();
+
+               int read();
+
+               bool isSupported();
+               void submitTriggerItem();
+
+       protected:
+               void handleUpdate();
+       };
+}
+
+#endif // _DEVICE_SYSTEM_STATUS_USB_H_
diff --git a/src/time/Alarm.cpp b/src/time/Alarm.cpp
new file mode 100644 (file)
index 0000000..26bac0b
--- /dev/null
@@ -0,0 +1,269 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "Alarm.h"
+
+using namespace ctx;
+
+DeviceStatusAlarm::DeviceStatusAlarm()
+       : ContextProvider(DEVICE_ST_SUBJ_ALARM)
+{
+}
+
+DeviceStatusAlarm::~DeviceStatusAlarm()
+{
+       __clear();
+
+       for (auto it = __optionSet.begin(); it != __optionSet.end(); ++it) {
+               delete *it;
+       }
+       __optionSet.clear();
+}
+
+bool DeviceStatusAlarm::isSupported()
+{
+       return true;
+}
+
+void DeviceStatusAlarm::submitTriggerItem()
+{
+       registerTriggerItem(OPS_SUBSCRIBE,
+                       "{"
+                               "\"TimeOfDay\":{\"type\":\"integer\",\"min\":0,\"max\":1439},"
+                               "\"DayOfWeek\":{\"type\":\"string\",\"values\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\",\"Sun\",\"Weekday\",\"Weekend\"]}"
+                       "}",
+                       NULL);
+}
+
+int DeviceStatusAlarm::subscribe(Json option, Json *requestResult)
+{
+       int dow = __getArrangedDayOfWeek(option);
+
+       int time;
+       for (int i = 0; option.getAt(NULL, DEVICE_ST_TIME_OF_DAY, i, &time); i++) {
+               __add(time, dow);
+       }
+
+       Json* elem = new(std::nothrow) Json(option);
+       if (elem) {
+               __optionSet.insert(elem);
+       } else {
+               unsubscribe(option);
+               _E("Memory allocation failed");
+               return ERR_OUT_OF_MEMORY;
+       }
+
+       return ERR_NONE;
+}
+
+int DeviceStatusAlarm::unsubscribe(Json option)
+{
+       int dow = __getArrangedDayOfWeek(option);
+
+       int time;
+       for (int i = 0; option.getAt(NULL, DEVICE_ST_TIME_OF_DAY, i, &time); i++) {
+               __remove(time, dow);
+       }
+
+       OptionSet::iterator target = __findOption(option);
+       if (target != __optionSet.end()) {
+               delete (*target);
+               __optionSet.erase(target);
+       }
+
+       return ERR_NONE;
+}
+
+int DeviceStatusAlarm::__getArrangedDayOfWeek(Json& option)
+{
+       int dow = 0;
+
+       std::string tempDay;
+       for (int i = 0; option.getAt(NULL, DEVICE_ST_DAY_OF_WEEK, i, &tempDay); i++) {
+               dow |= TimerManager::dowToInt(tempDay);
+       }
+       _D("Requested day of week (%#x)", dow);
+
+       return dow;
+}
+
+DeviceStatusAlarm::RefCountArray::RefCountArray()
+{
+       memset(count, 0, sizeof(int) * DAYS_PER_WEEK);
+}
+
+int DeviceStatusAlarm::__mergeDayOfWeek(int* refCnt)
+{
+       int dayOfWeek = 0;
+
+       for (int d = 0; d < DAYS_PER_WEEK; ++d) {
+               if (refCnt[d] > 0) {
+                       dayOfWeek |= (0x01 << d);
+               }
+       }
+
+       return dayOfWeek;
+}
+
+bool DeviceStatusAlarm::__add(int minute, int dayOfWeek)
+{
+       IF_FAIL_RETURN_TAG(minute >=0 && minute < 1440 &&
+                       dayOfWeek > 0 && dayOfWeek <= static_cast<int>(DayOfWeek::EVERYDAY),
+                       false, _E, "Invalid parameter");
+
+       RefCountArray &ref = __refCountMap[minute];
+
+       for (int d = 0; d < DAYS_PER_WEEK; ++d) {
+               if ((dayOfWeek & (0x01 << d)) != 0) {
+                       ref.count[d] += 1;
+               }
+       }
+
+       return __resetTimer(minute);
+}
+
+bool DeviceStatusAlarm::__remove(int minute, int dayOfWeek)
+{
+       IF_FAIL_RETURN_TAG(minute >= 0 && minute < 1440 &&
+                       dayOfWeek > 0 && dayOfWeek <= static_cast<int>(DayOfWeek::EVERYDAY),
+                       false, _E, "Invalid parameter");
+
+       RefCountArray &ref = __refCountMap[minute];
+
+       for (int d = 0; d < DAYS_PER_WEEK; ++d) {
+               if ((dayOfWeek & (0x01 << d)) != 0 && ref.count[d] > 0) {
+                       ref.count[d] -= 1;
+               }
+       }
+
+       return __resetTimer(minute);
+}
+
+bool DeviceStatusAlarm::__resetTimer(int minute)
+{
+       int dayOfWeek = __mergeDayOfWeek(__refCountMap[minute].count);
+       TimerState &timer = __timerStateMap[minute];
+
+       if (dayOfWeek == timer.dayOfWeek) {
+               /* Necessary timers are already running... */
+               return true;
+       }
+
+       if (dayOfWeek == 0 && timer.timerId > 0) {
+               /* Turn off the timer at hour, if it is not necessray anymore. */
+               __timerManager.remove(timer.timerId);
+               __timerStateMap.erase(minute);
+               __refCountMap.erase(minute);
+               return true;
+       }
+
+       if (timer.timerId > 0) {
+               /* Turn off the current timer, to set a new one. */
+               __timerManager.remove(timer.timerId);
+               timer.timerId = -1;
+               timer.dayOfWeek = 0;
+       }
+
+       /* Create a new timer, w.r.t. the new dayOfWeek value. */
+       int h = minute / 60;
+       int m = minute - h * 60;
+       int tid = __timerManager.setAt(h, m, static_cast<DayOfWeek>(dayOfWeek), this);
+       IF_FAIL_RETURN_TAG(tid > 0, false, _E, "Timer setting failed");
+
+       timer.timerId = tid;
+       timer.dayOfWeek = dayOfWeek;
+
+       return true;
+}
+
+void DeviceStatusAlarm::__clear()
+{
+       for (auto it = __timerStateMap.begin(); it != __timerStateMap.end(); ++it) {
+               if (it->second.timerId > 0) {
+                       __timerManager.remove(it->second.timerId);
+               }
+       }
+
+       __timerStateMap.clear();
+       __refCountMap.clear();
+}
+
+bool DeviceStatusAlarm::onTimerExpired(int timerId)
+{
+       time_t rawTime;
+       struct tm timeInfo;
+
+       time(&rawTime);
+       tzset();
+       localtime_r(&rawTime, &timeInfo);
+
+       int hour = timeInfo.tm_hour;
+       int min = timeInfo.tm_min;
+       int dayOfWeek = (0x01 << timeInfo.tm_wday);
+
+       __handleUpdate(hour, min, dayOfWeek);
+
+       return true;
+}
+
+void DeviceStatusAlarm::__handleUpdate(int hour, int min, int dayOfWeek)
+{
+       _I("Time: %02d:%02d, Day of Week: %#x", hour, min, dayOfWeek);
+
+       Json dataRead;
+       int resultTime = hour * 60 + min;
+       std::string resultDay = TimerManager::dowToStr(dayOfWeek);
+       dataRead.set(NULL, DEVICE_ST_TIME_OF_DAY, resultTime);
+       dataRead.set(NULL, DEVICE_ST_DAY_OF_WEEK, resultDay);
+
+       for (auto it = __optionSet.begin(); it != __optionSet.end(); ++it) {
+               Json option = (**it);
+               if (__isMatched(option, resultTime, resultDay)) {
+                       publish(option, ERR_NONE, dataRead);
+               }
+       }
+}
+
+bool DeviceStatusAlarm::__isMatched(Json& option, int time, std::string day)
+{
+       bool ret = false;
+       int optionTime;
+       for (int i = 0; option.getAt(NULL, DEVICE_ST_TIME_OF_DAY, i, &optionTime); i++){
+               if (time == optionTime) {
+                       ret = true;
+                       break;
+               }
+       }
+       IF_FAIL_RETURN(ret, false);
+
+       std::string optionDay;
+       for (int i = 0; option.getAt(NULL, DEVICE_ST_DAY_OF_WEEK, i, &optionDay); i++){
+               if (day == optionDay) {
+                       return true;
+               }
+       }
+
+       return false;
+}
+
+DeviceStatusAlarm::OptionSet::iterator DeviceStatusAlarm::__findOption(Json& option)
+{
+       for (auto it = __optionSet.begin(); it != __optionSet.end(); ++it) {
+               if (option == (**it))
+                       return it;
+       }
+       return __optionSet.end();
+}
diff --git a/src/time/Alarm.h b/src/time/Alarm.h
new file mode 100644 (file)
index 0000000..797e62f
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _DEVICE_SYSTEM_STATUS_ALARM_H_
+#define _DEVICE_SYSTEM_STATUS_ALARM_H_
+
+#include <map>
+#include <set>
+#include <TimerManager.h>
+#include <ContextProvider.h>
+#include "../shared/SystemTypes.h"
+
+namespace ctx {
+
+       class DeviceStatusAlarm : public ContextProvider, ITimerListener {
+       public:
+               DeviceStatusAlarm();
+               ~DeviceStatusAlarm();
+
+               int subscribe(Json option, Json *requestResult);
+               int unsubscribe(Json option);
+
+               bool isSupported();
+               void submitTriggerItem();
+
+       protected:
+               bool onTimerExpired(int timerId);
+
+       private:
+               struct RefCountArray {
+                       int count[7];   /* reference counts for days of week*/
+                       RefCountArray();
+               };
+
+               struct TimerState {
+                       int timerId;
+                       int dayOfWeek; /* day of week, merged into one integer */
+                       TimerState() : timerId(-1), dayOfWeek(0) {}
+               };
+
+               typedef std::map<int, RefCountArray> RefCountMap;
+               typedef std::map<int, TimerState> TimerStateMap;
+               typedef std::set<Json*> OptionSet;
+
+               RefCountMap __refCountMap;
+               TimerStateMap __timerStateMap;
+               OptionSet __optionSet;
+               TimerManager __timerManager;
+
+               bool __add(int minute, int dayOfWeek);
+               bool __remove(int minute, int dayOfWeek);
+               bool __resetTimer(int hour);
+               void __clear();
+               void __handleUpdate(int hour, int min, int dayOfWeek);
+
+               int __getArrangedDayOfWeek(Json& option);
+               int __mergeDayOfWeek(int *refCnt);
+
+               bool __isMatched(Json& option, int time, std::string day);
+               OptionSet::iterator __findOption(Json& option);
+       };
+}
+
+#endif // _DEVICE_SYSTEM_STATUS_ALARM_H_
diff --git a/src/time/Time.cpp b/src/time/Time.cpp
new file mode 100644 (file)
index 0000000..73f3f37
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <TimerManager.h>
+#include "Time.h"
+
+using namespace ctx;
+
+DeviceStatusTime::DeviceStatusTime() :
+       DeviceProviderBase(DEVICE_ST_SUBJ_TIME)
+{
+}
+
+DeviceStatusTime::~DeviceStatusTime()
+{
+}
+
+bool DeviceStatusTime::isSupported()
+{
+       return true;
+}
+
+void DeviceStatusTime::submitTriggerItem()
+{
+       registerTriggerItem(OPS_READ,
+                       "{"
+                               "\"TimeOfDay\":{\"type\":\"integer\",\"min\":0,\"max\":1439},"
+                               "\"DayOfWeek\":{\"type\":\"string\",\"values\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\",\"Sun\",\"Weekday\",\"Weekend\"]},"
+                               "\"DayOfMonth\":{\"type\":\"integer\",\"min\":1,\"max\":31}"
+                       "}",
+                       NULL);
+}
+
+int DeviceStatusTime::subscribe()
+{
+       return ERR_NOT_SUPPORTED;
+}
+
+int DeviceStatusTime::unsubscribe()
+{
+       return ERR_NOT_SUPPORTED;
+}
+
+int DeviceStatusTime::read()
+{
+       time_t rawtime;
+       struct tm timeInfo;
+
+       time(&rawtime);
+       tzset();
+       localtime_r(&rawtime, &timeInfo);
+
+       int dayOfMonth = timeInfo.tm_mday;
+       int minuteOfDay = timeInfo.tm_hour * 60 + timeInfo.tm_min;
+       std::string dayOfWeek = TimerManager::dowToStr(0x01 << timeInfo.tm_wday);
+
+       Json dataRead;
+       dataRead.set(NULL, DEVICE_ST_DAY_OF_MONTH, dayOfMonth);
+       dataRead.set(NULL, DEVICE_ST_DAY_OF_WEEK, dayOfWeek);
+       dataRead.set(NULL, DEVICE_ST_TIME_OF_DAY, minuteOfDay);
+
+       _I("Time: %02d:%02d, Day of Week: %s, Day of Month: %d", timeInfo.tm_hour, timeInfo.tm_min, dayOfWeek.c_str(), dayOfMonth);
+
+       replyToRead(NULL, ERR_NONE, dataRead);
+
+       return ERR_NONE;
+}
diff --git a/src/time/Time.h b/src/time/Time.h
new file mode 100644 (file)
index 0000000..48e2202
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _DEVICE_SYSTEM_STATUS_TIME_H_
+#define _DEVICE_SYSTEM_STATUS_TIME_H_
+
+#include "../shared/DeviceProviderBase.h"
+#include "../shared/SystemTypes.h"
+
+namespace ctx {
+
+       class DeviceStatusTime : public DeviceProviderBase {
+       public:
+               DeviceStatusTime();
+               ~DeviceStatusTime();
+
+               int subscribe();
+               int unsubscribe();
+               int read();
+
+               bool isSupported();
+               void submitTriggerItem();
+       };
+}
+
+#endif // _DEVICE_SYSTEM_STATUS_TIME_H_
diff --git a/src/wifi/Wifi.cpp b/src/wifi/Wifi.cpp
new file mode 100644 (file)
index 0000000..8de9fa4
--- /dev/null
@@ -0,0 +1,250 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <SharedVars.h>
+#include "Wifi.h"
+
+using namespace ctx;
+
+DeviceStatusWifi::DeviceStatusWifi() :
+       DeviceProviderBase(DEVICE_ST_SUBJ_WIFI),
+       __lastState(UNKNOWN),
+       __isInitialized(false),
+       __isActivated(false),
+       __connState(WIFI_CONNECTION_STATE_FAILURE)
+{
+       IF_FAIL_VOID_TAG(__startMonitor(), _W, "WiFi monitor initialization failed");
+
+       if (!__getCurrentState()) {
+               __stopMonitor();
+               _W("Getting current WiFi status failed");
+       }
+}
+
+DeviceStatusWifi::~DeviceStatusWifi()
+{
+       __stopMonitor();
+}
+
+bool DeviceStatusWifi::isSupported()
+{
+       return getSystemInfoBool("tizen.org/feature/network.wifi");
+}
+
+void DeviceStatusWifi::submitTriggerItem()
+{
+       registerTriggerItem(OPS_SUBSCRIBE | OPS_READ,
+                       "{"
+                               "\"State\":{\"type\":\"string\",\"values\":[\"Disabled\",\"Unconnected\",\"Connected\"]},"
+                               "\"BSSID\":{\"type\":\"string\"}"
+                       "}",
+                       NULL);
+}
+
+bool DeviceStatusWifi::__getCurrentState()
+{
+       int err;
+
+       if (!__isInitialized) {
+               err = wifi_initialize();
+               IF_FAIL_RETURN_TAG(err == WIFI_ERROR_NONE, false, _E, "wifi_initialize() failed");
+       }
+
+       err = wifi_is_activated(&__isActivated);
+       IF_FAIL_RETURN_TAG(err == WIFI_ERROR_NONE, false, _E, "wifi_is_activated() failed");
+
+       err = wifi_get_connection_state(&__connState);
+       IF_FAIL_RETURN_TAG(err == WIFI_ERROR_NONE, false, _E, "wifi_get_connection_state() failed");
+
+       if (__isActivated) {
+               if (__connState == WIFI_CONNECTION_STATE_CONNECTED) {
+                       __lastState = CONNECTED;
+                       __getBssid();
+               } else {
+                       __lastState = UNCONNECTED;
+                       __clearBssid();
+               }
+       } else {
+               __lastState = DISABLED;
+               __clearBssid();
+       }
+
+       if (!__isInitialized)
+               wifi_deinitialize();
+
+       return true;
+}
+
+bool DeviceStatusWifi::__getBssid()
+{
+       int err;
+       char *strBuf = NULL;
+       wifi_ap_h ap = NULL;
+
+       err = wifi_get_connected_ap(&ap);
+       IF_FAIL_RETURN_TAG(err == WIFI_ERROR_NONE, false, _E, "wifi_get_connected_ap() failed");
+
+       wifi_ap_get_bssid(ap, &strBuf);
+       __bssid = (strBuf != NULL ? strBuf : "");
+       g_free(strBuf);
+
+       wifi_ap_destroy(ap);
+
+       if (__bssid.empty())
+               _W("Failed to get BSSID");
+
+       SharedVars().set(SharedVars::WIFI_BSSID, __bssid);
+       _D("BSSID: %s", __bssid.c_str());
+
+       return !__bssid.empty();
+}
+
+void DeviceStatusWifi::__clearBssid()
+{
+       __bssid.clear();
+       SharedVars().clear(SharedVars::WIFI_BSSID);
+       _D("No WiFi connection");
+}
+
+bool DeviceStatusWifi::__getResponsePacket(Json* data)
+{
+       switch (__lastState) {
+       case DISABLED:
+               data->set(NULL, DEVICE_ST_STATE, DEVICE_ST_DISABLED);
+               break;
+
+       case UNCONNECTED:
+               data->set(NULL, DEVICE_ST_STATE, DEVICE_ST_UNCONNECTED);
+               break;
+
+       case CONNECTED:
+               data->set(NULL, DEVICE_ST_STATE, DEVICE_ST_CONNECTED);
+               data->set(NULL, DEVICE_ST_BSSID, __bssid);
+               break;
+
+       default:
+               return false;
+       }
+
+       return true;
+}
+
+int DeviceStatusWifi::read()
+{
+       IF_FAIL_RETURN(__getCurrentState(), ERR_OPERATION_FAILED);
+
+       Json dataRead;
+       if (__getResponsePacket(&dataRead)) {
+               replyToRead(NULL, ERR_NONE, dataRead);
+               return ERR_NONE;
+       }
+
+       return ERR_OPERATION_FAILED;
+}
+
+bool DeviceStatusWifi::__startMonitor()
+{
+       IF_FAIL_RETURN(!__isInitialized, true);
+
+       int err;
+       err = wifi_initialize();
+       IF_FAIL_RETURN_TAG(err == WIFI_ERROR_NONE, false, _E, "wifi_initialize() failed");
+
+       err = wifi_set_device_state_changed_cb(__deviceStateChangedCb, this);
+       IF_FAIL_CATCH_TAG(err == WIFI_ERROR_NONE, _E, "wifi_set_device_state_changed_cb() failed");
+
+       err = wifi_set_connection_state_changed_cb(__connectionStateChangedCb, this);
+       IF_FAIL_CATCH_TAG(err == WIFI_ERROR_NONE, _E, "wifi_set_connection_state_changed_cb() failed");
+
+       __isInitialized = true;
+       return true;
+
+CATCH:
+       wifi_deinitialize();
+       return false;
+}
+
+void DeviceStatusWifi::__stopMonitor()
+{
+       IF_FAIL_VOID(__isInitialized);
+
+       wifi_unset_device_state_changed_cb();
+       wifi_unset_connection_state_changed_cb();
+       wifi_deinitialize();
+       __isInitialized = false;
+}
+
+int DeviceStatusWifi::subscribe()
+{
+#if 0
+       IF_FAIL_RETURN(__startMonitor(), ERR_OPERATION_FAILED);
+       if (!__getCurrentState()) {
+               __stopMonitor();
+               return ERR_OPERATION_FAILED;
+       }
+#endif
+
+       return ERR_NONE;
+}
+
+int DeviceStatusWifi::unsubscribe()
+{
+#if 0
+       __stopMonitor();
+#endif
+       return ERR_NONE;
+}
+
+void DeviceStatusWifi::__handleUpdate()
+{
+       int prevState = __lastState;
+
+       if (__isActivated) {
+               if (__connState == WIFI_CONNECTION_STATE_CONNECTED) {
+                       __lastState = CONNECTED;
+               } else {
+                       __lastState = UNCONNECTED;
+               }
+       } else {
+               __lastState = DISABLED;
+       }
+
+       if (__lastState != prevState) {
+               if (__lastState == CONNECTED) {
+                       __getBssid();
+               } else {
+                       __clearBssid();
+               }
+
+               Json data;
+               if (__beingSubscribed && __getResponsePacket(&data))
+                       publish(NULL, ERR_NONE, data);
+       }
+}
+
+void DeviceStatusWifi::__deviceStateChangedCb(wifi_device_state_e state, void *userData)
+{
+       DeviceStatusWifi *instance = static_cast<DeviceStatusWifi*>(userData);
+       instance->__isActivated = (state == WIFI_DEVICE_STATE_ACTIVATED);
+       instance->__handleUpdate();
+}
+
+void DeviceStatusWifi::__connectionStateChangedCb(wifi_connection_state_e state, wifi_ap_h ap, void *userData)
+{
+       DeviceStatusWifi *instance = static_cast<DeviceStatusWifi*>(userData);
+       instance->__connState = state;
+       instance->__handleUpdate();
+}
diff --git a/src/wifi/Wifi.h b/src/wifi/Wifi.h
new file mode 100644 (file)
index 0000000..2c5cee6
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _DEVICE_SYSTEM_STATUS_WIFI_H_
+#define _DEVICE_SYSTEM_STATUS_WIFI_H_
+
+#include <string>
+#include <wifi.h>
+#include "../shared/DeviceProviderBase.h"
+#include "../shared/SystemTypes.h"
+
+namespace ctx {
+
+       class DeviceStatusWifi : public DeviceProviderBase {
+       public:
+               DeviceStatusWifi();
+               ~DeviceStatusWifi();
+
+               int subscribe();
+               int unsubscribe();
+               int read();
+
+               bool isSupported();
+               void submitTriggerItem();
+
+       private:
+               enum InternalState {
+                       UNKNOWN = -1,
+                       DISABLED = 0,
+                       UNCONNECTED,
+                       CONNECTED,
+               };
+
+               int __lastState;
+               bool __isInitialized;
+               bool __isActivated;
+               wifi_connection_state_e __connState;
+               std::string __bssid;
+
+               bool __getCurrentState();
+               bool __getBssid();
+               void __clearBssid();
+               bool __getResponsePacket(Json* data);
+               void __handleUpdate();
+               bool __startMonitor();
+               void __stopMonitor();
+               static void __deviceStateChangedCb(wifi_device_state_e state, void *userData);
+               static void __connectionStateChangedCb(wifi_connection_state_e state, wifi_ap_h ap, void *userData);
+       };
+}
+
+#endif // _CONTEXT_SYSTEM_STATUS_WIFI_H_