diff --git a/trunk/paradiseo-old-mo/AUTHORS b/trunk/paradiseo-old-mo/AUTHORS new file mode 100644 index 000000000..5c3a864b2 --- /dev/null +++ b/trunk/paradiseo-old-mo/AUTHORS @@ -0,0 +1,9 @@ +Source Code: + Sebastien CAHON + Jean-Charles BOISSON : Jean-Charles.Boisson@lifl.fr + +Lessons: + Sebastien CAHON + +Documentation: + Jean-Charles BOISSON : Jean-Charles.Boisson@lifl.fr diff --git a/trunk/paradiseo-old-mo/CMakeLists.txt b/trunk/paradiseo-old-mo/CMakeLists.txt new file mode 100644 index 000000000..99a7232bd --- /dev/null +++ b/trunk/paradiseo-old-mo/CMakeLists.txt @@ -0,0 +1,41 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) + +########################################################################################################################################## +### 0) If you want to set your own variables in mo-conf.cmake and avoid the cmd line +########################################################################################################################################## + +INCLUDE(mo-conf.cmake OPTIONAL) + +########################################################################################################################################## + + +########################################################################################################################################## +### 1) Project properties +########################################################################################################################################## + +# set the project name +PROJECT(ParadisEO-MO) + +SET(PACKAGE_BUGREPORT "paradiseo-help@lists.gforge.inria.fr" CACHE STRING "Package bug report" FORCE) +SET(PACKAGE_NAME "ParadisEO-MO - Moving Objects" CACHE STRING "Package name" FORCE) +SET(PACKAGE_STRING "ParadisEO-MO 1.2" CACHE STRING "MO Package string full name" FORCE) +SET(PACKAGE_VERSION "1.2" CACHE STRING "Package version" FORCE) +SET(GLOBAL_VERSION "1.2" CACHE STRING "Global version" FORCE) +SET(VERSION "1.2" CACHE STRING "Version" FORCE) +########################################################################################################################################## + + +########################################################################################################################################## +### 2) Include the common CMake configuration +########################################################################################################################################## + +# The "config" variable must be provided on the command line +IF(NOT DEFINED config OR NOT config) + MESSAGE(FATAL_ERROR "The \"config\" variable must be set on the command line to + give the path of the install configuration file. ") +ENDIF(NOT DEFINED config OR NOT config) + +# Need the config file whose full path is given thanks to the "config" variable +INCLUDE(${config}) +########################################################################################################################################## + diff --git a/trunk/paradiseo-old-mo/CTestConfig.cmake b/trunk/paradiseo-old-mo/CTestConfig.cmake new file mode 100644 index 000000000..465d208d6 --- /dev/null +++ b/trunk/paradiseo-old-mo/CTestConfig.cmake @@ -0,0 +1,7 @@ +set(CTEST_PROJECT_NAME "ParadisEO") +set(CTEST_NIGHTLY_START_TIME "00:00:00 EST") + +set(CTEST_DROP_METHOD "http") +set(CTEST_DROP_SITE "cdash.inria.fr") +set(CTEST_DROP_LOCATION "/CDash/submit.php?project=ParadisEO") +set(CTEST_DROP_SITE_CDASH TRUE) diff --git a/trunk/paradiseo-old-mo/README b/trunk/paradiseo-old-mo/README new file mode 100644 index 000000000..089902ff4 --- /dev/null +++ b/trunk/paradiseo-old-mo/README @@ -0,0 +1,76 @@ + PARADISEO-MO README FILE +======================================================================= + +======================================================================= + +Welcome to PARADISEO-MO (Moving Objects), one part of the ParadisEO framework. + +======================================================================= + BUILDING PARADISEO-MO +======================================================================= +The basic installation procedure goes the following: + +To compile paradiseo-mo in the default directory, +go to paradiseo-mo/build/ and run: + > cmake ../ -Dconfig= + > make + // for an easy-use of the provided lessons + > make install + // optional (if the documentation is not already available) + > make doc + +To compile paradiseo-mo anywhere else, simply run: + > cmake $(MO) -Dconfig= + > make + // for an easy-use of the provided lessons + > make install + // optional (if the documentation is not already available) + > make doc + +where $(MO) is the top-level directory of PARADISEO-MO. + +To clean everything, simply run + > make clean + +====================================================================== + DIRECTORY STRUCTURE +====================================================================== +After unpacking the archive file, you should end up with the following +structure: + +.../ The MAIN PARADISEO-MO directory, created when unpacking. + | + +-- build Repertory where the executables will be produced. + | + | + +-- src SOURCE directory contains most PARADISEO-MO .h files. + | + | + +-- doc DOCUMENTATION directory (generated by Doxygen). + | | + | +- html HTML files - start at index.html. + | | + | +- latex latex files - use to generate Postcript doc. + | | + | +- man Unix man format documentation. + | + | + +-- tutorial TUTORIAL with lessons + | + +- examples APPLICATIONS - one directory per separate application. + | | + | +- tsp traveling salesman problem (TSP) example sources. + | | + | +- benchs TSP instance files. + | + +- Lesson1 How make a Hill Climbing on the TSP example (source file and lesson_1.pdf). + | + +- Lesson2 How make a Tabu Search on the TSP example (source file and lesson_2.pdf). + | + +- Lesson3 How make a Simulated Annealing on the TSP example (source file and lesson_3.pdf). + +=================================================================== + NOTES +=================================================================== + +Mailing list : paradiseo-help@lists.gforge.inria.fr diff --git a/trunk/paradiseo-old-mo/doc/CMakeLists.txt b/trunk/paradiseo-old-mo/doc/CMakeLists.txt new file mode 100755 index 000000000..8963a9ba5 --- /dev/null +++ b/trunk/paradiseo-old-mo/doc/CMakeLists.txt @@ -0,0 +1,26 @@ + +########################################################################################## +### MO Doc generation using Doxygen +########################################################################################## + +IF (DOXYGEN_FOUND) + + SET(DOC_DIR ${CMAKE_BINARY_DIR}/doc CACHE PATH "MO documentation directory") + SET(MO_DOC_CONFIG_FILE "mo.doxyfile" CACHE PATH "MO documentation configuration file") + # define the doc target + IF (DOXYGEN_EXECUTABLE) + ADD_CUSTOM_TARGET(doc + COMMAND ${DOXYGEN_EXECUTABLE} ${MO_DOC_CONFIG_FILE} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + ) + ENDIF (DOXYGEN_EXECUTABLE) + + # configure doxyfile file + CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/doc/${MO_DOC_CONFIG_FILE}.cmake" + "${CMAKE_BINARY_DIR}/doc/${MO_DOC_CONFIG_FILE}") + +ELSE (DOXYGEN_FOUND) + MESSAGE(STATUS "Unable to generate the documentation, Doxygen package not found") +ENDIF (DOXYGEN_FOUND) + +########################################################################################## diff --git a/trunk/paradiseo-old-mo/doc/mo.doxyfile.cmake b/trunk/paradiseo-old-mo/doc/mo.doxyfile.cmake new file mode 100644 index 000000000..60e84efda --- /dev/null +++ b/trunk/paradiseo-old-mo/doc/mo.doxyfile.cmake @@ -0,0 +1,1261 @@ +# Doxyfile 1.5.2 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file that +# follow. The default is UTF-8 which is also the encoding used for all text before +# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into +# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of +# possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = @PACKAGE_NAME@ + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = @PACKAGE_VERSION@ + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = @CMAKE_BINARY_DIR@/doc + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, +# Italian, Japanese, Japanese-en (Japanese with English messages), Korean, +# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, +# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = NO + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = @CMAKE_SOURCE_DIR@ + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like the Qt-style comments (thus requiring an +# explicit @brief command for a brief description. + +JAVADOC_AUTOBRIEF = YES + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for Java. +# For instance, namespaces will be presented as packages, qualified scopes +# will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to +# include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = YES + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = YES + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = YES + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = NO + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from the +# version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = YES + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = NO + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = NO + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = @CMAKE_SOURCE_DIR@/src + +# This tag can be used to specify the character encoding of the source files that +# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default +# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. +# See http://www.gnu.org/software/libiconv for the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py + +FILE_PATTERNS = *.cpp \ + *.h + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the output. +# The symbol name can be a fully qualified name, a word, or if the wildcard * is used, +# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. Otherwise they will link to the documentstion. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 3 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = mo + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be +# generated containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + +GENERATE_TREEVIEW = YES + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = YES + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = YES + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = @EO_BIN_DIR@/doc/eo.doxytag=http://eodev.sourceforge.net/eo/doc/html + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = @CMAKE_BINARY_DIR@/doc/mo.doxytag + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to +# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to +# specify the directory where the mscgen tool resides. If left empty the tool is assumed to +# be found in the default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a caller dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable caller graphs for selected +# functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen will always +# show the root nodes and its direct children regardless of this setting. + +DOT_GRAPH_MAX_NODES = 50 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, which results in a white background. +# Warning: Depending on the platform used, enabling this option may lead to +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to +# read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = YES diff --git a/trunk/paradiseo-old-mo/doc/mo.doxytag b/trunk/paradiseo-old-mo/doc/mo.doxytag new file mode 100644 index 000000000..7ca1a54d1 --- /dev/null +++ b/trunk/paradiseo-old-mo/doc/mo.doxytag @@ -0,0 +1,1367 @@ + + + + main + Welcome to PARADISEO-Moving Objects + main + Paradiseo + authors + Introduction + LICENSE + Installation + + + moAlgo + classmo_algo.html + EOT + eoMonOp< EOT > + + + moAspirCrit + classmo_aspir_crit.html + M + eoBF + + virtual void + init + classmo_aspir_crit.html + a8ce84510a5ec7c9078381e542c6d140 + ()=0 + + + + moBestImprSelect + classmo_best_impr_select.html + M + moMoveSelect + + M::EOType::Fitness + Fitness + classmo_best_impr_select.html + c4ae17435221fb0a8e8acd285210cfcb + + + + void + init + classmo_best_impr_select.html + 83f961549986b8ad94692e433aa79114 + (const Fitness &_fitness) + + + bool + update + classmo_best_impr_select.html + 5c0729fd316b0ef78406bce5ca91de2a + (const M &_move, const Fitness &_fitness) + + + void + operator() + classmo_best_impr_select.html + 33b3de7bd322f737eb97cce9a5404527 + (M &_move, Fitness &_fitness) + + + bool + first_time + classmo_best_impr_select.html + 352b14d206b0772eb9f40efb7beb0f13 + + + + M + best_move + classmo_best_impr_select.html + bd86f70519f954c07ff0d8a2a3a8ff6a + + + + Fitness + best_fitness + classmo_best_impr_select.html + e51345fe28ca7cbaca65bdad1aa8ecb7 + + + + + moComparator + classmo_comparator.html + EOT + eoBF + + + moCoolingSchedule + classmo_cooling_schedule.html + eoUF< double &, bool > + + + moExponentialCoolingSchedule + classmo_exponential_cooling_schedule.html + moCoolingSchedule + + + moExponentialCoolingSchedule + classmo_exponential_cooling_schedule.html + e60ce9eb5e632f4758ea96ae92a52774 + (double _threshold, double _ratio) + + + bool + operator() + classmo_exponential_cooling_schedule.html + 95b075e9786a5cc984ef1bb59a2107e4 + (double &_temperature) + + + double + threshold + classmo_exponential_cooling_schedule.html + 8d4327c0bb33b7121a322279eea97f84 + + + + double + ratio + classmo_exponential_cooling_schedule.html + e8f3f87417c1c7253efb938a740846fa + + + + + moFirstImprSelect + classmo_first_impr_select.html + M + moMoveSelect + + M::EOType::Fitness + Fitness + classmo_first_impr_select.html + 64763ce3e6d2873266624382b407fa5a + + + + virtual void + init + classmo_first_impr_select.html + a923437ecc3db50e7052b002a9a1bbf8 + (const Fitness &_fitness) + + + bool + update + classmo_first_impr_select.html + f68b7ee7b35bf7347c16006f0587d313 + (const M &_move, const Fitness &_fitness) + + + void + operator() + classmo_first_impr_select.html + 976569efd882886cb13184daeba79766 + (M &_move, Fitness &_fitness) + + + bool + valid + classmo_first_impr_select.html + a99c0586ba07449234705c17a258d58c + + + + M + best_move + classmo_first_impr_select.html + dfed419a608dd7c41f07fa1f1279cb8c + + + + Fitness + initial_fitness + classmo_first_impr_select.html + 669f8f2f74e71bf2b7fdabfc9cca2c0e + + + + Fitness + best_fitness + classmo_first_impr_select.html + 287937f5c059b078ccec94e86e0a8238 + + + + + moFitComparator + classmo_fit_comparator.html + EOT + moComparator + + bool + operator() + classmo_fit_comparator.html + c920d5a49deb16710daf1e5fcde6b16c + (const EOT &_solution1, const EOT &_solution2) + + + + moFitSolContinue + classmo_fit_sol_continue.html + EOT + moSolContinue + + EOT::Fitness + Fitness + classmo_fit_sol_continue.html + 369ed94a788d8bdc08d5554f7669376f + + + + + moFitSolContinue + classmo_fit_sol_continue.html + 5f0dc5e529e8cd307ff4a1ae982d5b84 + (Fitness _fitness) + + + bool + operator() + classmo_fit_sol_continue.html + ce4e02895c13bfd131fc759adf83798f + (const EOT &_solution) + + + void + init + classmo_fit_sol_continue.html + 670bd895b4edfcd3aebb40d2295d7f7c + () + + + Fitness + fitness + classmo_fit_sol_continue.html + 87d0ba8f2f76f61c89317eed5f094dfc + + + + + moGenSolContinue + classmo_gen_sol_continue.html + EOT + moSolContinue + + + moGenSolContinue + classmo_gen_sol_continue.html + 8e2456421b641d38e3f800f3bbe45159 + (unsigned int _generationMaximumNumber) + + + bool + operator() + classmo_gen_sol_continue.html + 2fd5f2f10b6d6208412582578fad48ea + (const EOT &_solution) + + + void + init + classmo_gen_sol_continue.html + 6c5db8182157584b56507cc9075602d4 + () + + + unsigned int + generationMaximumNumber + classmo_gen_sol_continue.html + c838d923436b71c584891c1cbe3f47ba + + + + unsigned int + generationNumber + classmo_gen_sol_continue.html + af0b3e5ca3ceee0d843670955c8f1e58 + + + + + moHC + classmo_h_c.html + M + moAlgo< M::EOType > + + + moHC + classmo_h_c.html + 44a35bd30df6e79cff95a31b84889bd7 + (moMoveInit< M > &_move_initializer, moNextMove< M > &_next_move_generator, moMoveIncrEval< M > &_incremental_evaluation, moMoveSelect< M > &_move_selection, eoEvalFunc< EOT > &_full_evaluation) + + + + moHC + classmo_h_c.html + 5002f969ef0a4d959610158fc62f137a + (moMoveExpl< M > &_move_explorer, eoEvalFunc< EOT > &_full_evaluation) + + + bool + operator() + classmo_h_c.html + b739f9586b647e32bf31605066f984ad + (EOT &_solution) + + + M::EOType + EOT + classmo_h_c.html + d219296ede03c679646bce2fe8ff96cb + + + + EOT::Fitness + Fitness + classmo_h_c.html + 56487c97a7cf0c423cc879d1bbd45027 + + + + moMoveExpl< M > & + move_explorer + classmo_h_c.html + ec4e702a6ec240f40ff9d262c36d080b + + + + eoEvalFunc< EOT > & + full_evaluation + classmo_h_c.html + 1175c588c19d3658cfc690d5f3f8d825 + + + + + moHCMoveLoopExpl + classmo_h_c_move_loop_expl.html + M + moMoveLoopExpl + + + moHCMoveLoopExpl + classmo_h_c_move_loop_expl.html + fac2eb6695ba1b797ffab4f290d760b8 + (moMoveInit< M > &_move_initializer, moNextMove< M > &_next_move_generator, moMoveIncrEval< M > &_incremental_evaluation, moMoveSelect< M > &_move_selection) + + + void + operator() + classmo_h_c_move_loop_expl.html + fe9362c10d74a5e6ed09b56345396192 + (const EOT &_old_solution, EOT &_new_solution) + + + M::EOType + EOT + classmo_h_c_move_loop_expl.html + 077befd4106c201eafd3ea22bcea2fe9 + + + + M::EOType::Fitness + Fitness + classmo_h_c_move_loop_expl.html + f24871224316d5549b9013a2d27ab465 + + + + moMoveInit< M > & + move_initializer + classmo_h_c_move_loop_expl.html + 17506f3f1172714f9adbfa4e8a15953a + + + + moNextMove< M > & + next_move_generator + classmo_h_c_move_loop_expl.html + fdc44d40d8859bae1d7b92e77f36aa30 + + + + moMoveIncrEval< M > & + incremental_evaluation + classmo_h_c_move_loop_expl.html + a044b28f972d007a22736b646d86f265 + + + + moMoveSelect< M > & + move_selection + classmo_h_c_move_loop_expl.html + 5f0532e0ee8ef8ecaeeb4e56342be443 + + + + + moILS + classmo_i_l_s.html + M + moAlgo< M::EOType > + + + moILS + classmo_i_l_s.html + c83f81ba0836ae262305efa15eeb3da2 + (moAlgo< EOT > &_algorithm, moSolContinue< EOT > &_continue, moComparator< EOT > &_acceptance_criterion, eoMonOp< EOT > &_perturbation, eoEvalFunc< EOT > &_full_evaluation) + + + + moILS + classmo_i_l_s.html + 6d684a1d13ad224a911c8b0277812297 + (moMoveInit< M > &_move_initializer, moNextMove< M > &_next_move_generator, moMoveIncrEval< M > &_incremental_evaluation, moMoveSelect< M > &_move_selection, moSolContinue< EOT > &_continue, moComparator< EOT > &_acceptance_criterion, eoMonOp< EOT > &_perturbation, eoEvalFunc< EOT > &_full_evaluation) + + + + moILS + classmo_i_l_s.html + 740ac81a0d06eb471592ba0861d3a6d7 + (moMoveInit< M > &_move_initializer, moNextMove< M > &_next_move_generator, moMoveIncrEval< M > &_incremental_evaluation, moTabuList< M > &_tabu_list, moAspirCrit< M > &_aspiration_criterion, moSolContinue< EOT > &_moTS_continue, moSolContinue< EOT > &_continue, moComparator< EOT > &_acceptance_criterion, eoMonOp< EOT > &_perturbation, eoEvalFunc< EOT > &_full_evaluation) + + + + moILS + classmo_i_l_s.html + 36bab16abf36957dac36c467b86385bc + (moRandMove< M > &_random_move_generator, moMoveIncrEval< M > &_incremental_evaluation, moSolContinue< EOT > &_moSA_continue, double _initial_temperature, moCoolingSchedule &_cooling_schedule, moSolContinue< EOT > &_continue, moComparator< EOT > &_acceptance_criterion, eoMonOp< EOT > &_perturbation, eoEvalFunc< EOT > &_full_evaluation) + + + bool + operator() + classmo_i_l_s.html + 3f6b950e5a6c363f04b8d4c259502488 + (EOT &_solution) + + + M::EOType + EOT + classmo_i_l_s.html + c81bafc611e4d4fd44347cf7162198c7 + + + + EOT::Fitness + Fitness + classmo_i_l_s.html + 8c464a9eae064a78eff75d4c722b619c + + + + moAlgo< EOT > & + algorithm + classmo_i_l_s.html + 5651a4d94b59d523d341d5d6e24ca311 + + + + moSolContinue< EOT > & + continu + classmo_i_l_s.html + 30edab439401d7ec04fd8d37b4513d94 + + + + moComparator< EOT > & + acceptance_criterion + classmo_i_l_s.html + 295f6d0342c67bd3dc4cb82e2adc26be + + + + eoMonOp< EOT > & + perturbation + classmo_i_l_s.html + f667a1bda06b6d221292df9aba3db8a2 + + + + eoEvalFunc< EOT > & + full_evaluation + classmo_i_l_s.html + 8e8c383ac6ec34aaf071fa18bb54be67 + + + + + moImprBestFitAspirCrit + classmo_impr_best_fit_aspir_crit.html + M + moAspirCrit + + M::EOType::Fitness + Fitness + classmo_impr_best_fit_aspir_crit.html + 0bc1a8c9af99781e662570c04750cca8 + + + + + moImprBestFitAspirCrit + classmo_impr_best_fit_aspir_crit.html + e2c697a5cf3a7696e38bb52b6694a340 + () + + + void + init + classmo_impr_best_fit_aspir_crit.html + ffa451a14ff4ea86fb8bd9fdbc348630 + () + + + bool + operator() + classmo_impr_best_fit_aspir_crit.html + b6e5e96d57a6b846033fc22a9951b067 + (const M &_move, const Fitness &_fitness) + + + Fitness + best_fitness + classmo_impr_best_fit_aspir_crit.html + 03230e8672389de65aacd2bf7b6c1184 + + + + bool + first_time + classmo_impr_best_fit_aspir_crit.html + 2d5226c7dd661b33011402dbbbe78265 + + + + + moItRandNextMove + classmo_it_rand_next_move.html + M + moNextMove + + + moItRandNextMove + classmo_it_rand_next_move.html + c27b1fb0d64d4862dd886f7a59419b8c + (moRandMove< M > &_random_move_generator, unsigned int _iteration_maximum_number) + + + bool + operator() + classmo_it_rand_next_move.html + 21454db723a12fe6c8eb5caeccd32df6 + (M &_move, const EOT &_solution) + + + M::EOType + EOT + classmo_it_rand_next_move.html + ee666007fc494bf4a5f0cd065e5671cf + + + + moRandMove< M > & + random_move_generator + classmo_it_rand_next_move.html + 92601819402ad00d01933113d0bcf40d + + + + unsigned int + iteration_maximum_number + classmo_it_rand_next_move.html + 1b06067aee7a78f8a255563391514d2d + + + + unsigned int + iteration_number + classmo_it_rand_next_move.html + 2f8d52c88d6c002be518091cc52beca1 + + + + + moLinearCoolingSchedule + classmo_linear_cooling_schedule.html + moCoolingSchedule + + + moLinearCoolingSchedule + classmo_linear_cooling_schedule.html + 420939ebf57f01d242cbe4eb668dffde + (double _threshold, double _quantity) + + + bool + operator() + classmo_linear_cooling_schedule.html + b0a1886aaa7ee2a0c8e929e55ca321ce + (double &_current_temperature) + + + double + threshold + classmo_linear_cooling_schedule.html + e7f539f986801ea71392c4a55ba08a76 + + + + double + quantity + classmo_linear_cooling_schedule.html + 6159dc39ceda89b23ffdab3d6ce8d8ed + + + + + moLSCheckPoint + classmo_l_s_check_point.html + M + eoBF + + void + operator() + classmo_l_s_check_point.html + e9b9d41e40dd7bab648327686b2b938d + (const M &_move, const typename M::EOType &_solution) + + + void + add + classmo_l_s_check_point.html + f95f2dc556cdfbdc81688562ca95202d + (eoBF< const M &, const typename M::EOType &, void > &_function) + + + std::vector< eoBF< const M &, const typename M::EOType &, void > * > + functions + classmo_l_s_check_point.html + 56a7427a6aebac7955c22bab302c050a + + + + + moMove + classmo_move.html + EOT + eoUF< EOT &, void > + + EOT + EOType + classmo_move.html + 7fb853a91ba1319530529e515380bbba + + + + + moMoveExpl + classmo_move_expl.html + M + eoBF< const M::EOType &, M::EOType &, void > + + + moMoveIncrEval + classmo_move_incr_eval.html + M + eoBF + + + moMoveInit + classmo_move_init.html + M + eoBF + + + moMoveLoopExpl + classmo_move_loop_expl.html + M + moMoveExpl + + + moMoveSelect + classmo_move_select.html + M + eoBF< M &, M::EOType::Fitness &, void > + + M::EOType::Fitness + Fitness + classmo_move_select.html + 8148ccc0e6fbd209c3fe6829559895c8 + + + + virtual void + init + classmo_move_select.html + 58038bd859632c1bd022d23d9792bdca + (const Fitness &_fitness)=0 + + + virtual bool + update + classmo_move_select.html + 5b4d3b2f030cca80c563c3db0c4af404 + (const M &_move, const Fitness &_fitness)=0 + + + + moNextMove + classmo_next_move.html + M + eoBF + + + moNoAspirCrit + classmo_no_aspir_crit.html + M + moAspirCrit + + bool + operator() + classmo_no_aspir_crit.html + 289aac56f03c4651fcbcec4a91fb6fd6 + (const M &_move, const typename M::EOType::Fitness &_fitness) + + + void + init + classmo_no_aspir_crit.html + f3a286fc4c2d36bd390ba9a3074f3037 + () + + + + moNoFitImprSolContinue + classmo_no_fit_impr_sol_continue.html + EOT + moSolContinue + + EOT::Fitness + Fitness + classmo_no_fit_impr_sol_continue.html + 64c184de66bb37d75d53aa600ac947b3 + + + + + moNoFitImprSolContinue + classmo_no_fit_impr_sol_continue.html + 0793f68a0ad558c8203b97c33c8f9c90 + (unsigned int _maxNumberOfIterationWithoutImprovement) + + + bool + operator() + classmo_no_fit_impr_sol_continue.html + d8966c73cbe625644df9061377f7221a + (const EOT &_solution) + + + void + init + classmo_no_fit_impr_sol_continue.html + 21641c0a38a4501baae6133cbc591de4 + () + + + unsigned int + maxNumberOfIterationsWithoutImprovement + classmo_no_fit_impr_sol_continue.html + 03612ffc3af9d943c1b1d2cde09d461b + + + + bool + firstFitnessSaved + classmo_no_fit_impr_sol_continue.html + ca3591e47a075b59e0826f31234c71ef + + + + Fitness + fitness + classmo_no_fit_impr_sol_continue.html + 3d3d2b43a4dd73e38689cc0018d44ee7 + + + + unsigned int + counter + classmo_no_fit_impr_sol_continue.html + 46fc008a8f7cd06dcaaeb4016b433adb + + + + + moRandImprSelect + classmo_rand_impr_select.html + M + moMoveSelect + + M::EOType::Fitness + Fitness + classmo_rand_impr_select.html + 3bff2fdb963297430543c82ffb567a5c + + + + void + init + classmo_rand_impr_select.html + 7af99966b31aa387ecef74fd307a42e8 + (const Fitness &_fitness) + + + bool + update + classmo_rand_impr_select.html + b20cfd0164266aa75960cba3c1673f69 + (const M &_move, const Fitness &_fitness) + + + void + operator() + classmo_rand_impr_select.html + 1bc88f10830960c1d88e22e444c4e670 + (M &_move, Fitness &_fitness) + + + Fitness + initial_fitness + classmo_rand_impr_select.html + d566fa23689861b1d04257e53c71ae20 + + + + std::vector< Fitness > + better_fitnesses + classmo_rand_impr_select.html + 220d6e3db838b11938e59bc7b29a0db6 + + + + std::vector< M > + better_moves + classmo_rand_impr_select.html + 8a2e7bd7d7a74d7f7402ef25737b09e1 + + + + + moRandMove + classmo_rand_move.html + M + eoUF< M &, void > + + + moSA + classmo_s_a.html + M + moAlgo< M::EOType > + + + moSA + classmo_s_a.html + 12e7da3a56b82daa29a30d1254da5823 + (moRandMove< M > &_random_move_generator, moMoveIncrEval< M > &_incremental_evaluation, moSolContinue< EOT > &_continue, double _initial_temperature, moCoolingSchedule &_cooling_schedule, eoEvalFunc< EOT > &_full_evaluation) + + + bool + operator() + classmo_s_a.html + bea8176b0c05a96696b2ab29d3f3c544 + (EOT &_solution) + + + M::EOType + EOT + classmo_s_a.html + d5d64a8797bdedc7b3af7893aded0bd5 + + + + EOT::Fitness + Fitness + classmo_s_a.html + 97f1a40d5ab5a0b3f878d0347b34804b + + + + moRandMove< M > & + random_move_generator + classmo_s_a.html + 92656523f556669862fcffdccea178dd + + + + moMoveIncrEval< M > & + incremental_evaluation + classmo_s_a.html + fdb49f837dc602624554279418c94bdb + + + + moSolContinue< EOT > & + continu + classmo_s_a.html + 776586a839c2bbd6d12a731c12a1b748 + + + + double + initial_temperature + classmo_s_a.html + e07bf4ca64248e94ab85e8a1ba32aa8c + + + + moCoolingSchedule & + cooling_schedule + classmo_s_a.html + f514ae01cdfc67bf0b87d5389b3792e5 + + + + eoEvalFunc< EOT > & + full_evaluation + classmo_s_a.html + ace30095ffc4924d84e14a0e59f7746f + + + + + moSimpleMoveTabuList + classmo_simple_move_tabu_list.html + M + moTabuList + + M::EOType + EOT + classmo_simple_move_tabu_list.html + 91286ff3ba6b1e9e1db9e4fdade2edb7 + + + + std::list< M >::iterator + moveIterator + classmo_simple_move_tabu_list.html + 4ca9387c0a20bb9f4142682cbfee26bf + + + + + moSimpleMoveTabuList + classmo_simple_move_tabu_list.html + c27e7fabe1370ea65f56981c5cbc1769 + (unsigned int _memory_maximum_size) + + + bool + operator() + classmo_simple_move_tabu_list.html + 8d38f296f3d7721025820f16f25fcf7e + (const M &_move, const EOT &_solution) + + + void + add + classmo_simple_move_tabu_list.html + e6c0835fbfab2bdc63097cf2fd5328aa + (const M &_move, const EOT &_solution) + + + void + update + classmo_simple_move_tabu_list.html + 96cffc8118456ed762b07b9fc0e0679f + () + + + void + init + classmo_simple_move_tabu_list.html + b91ae9971be30769757d1ad92c6009dc + () + + + void + removeMove + classmo_simple_move_tabu_list.html + 922ac2e3c45cbb94698517265be95de5 + (const M &_move) + + + unsigned int + memory_maximum_size + classmo_simple_move_tabu_list.html + fea7fe7c62a6da9b8f087a2732f44251 + + + + unsigned int + memory_size + classmo_simple_move_tabu_list.html + defd20fe6d0d51fdaedbc5b95018aea7 + + + + std::list< M > + tabuList + classmo_simple_move_tabu_list.html + d91bc838361524720616b44eda9b2c3a + + + + + moSimpleSolutionTabuList + classmo_simple_solution_tabu_list.html + M + moTabuList + + M::EOType + EOT + classmo_simple_solution_tabu_list.html + 881060871a6b49e5e8554c5df85176d9 + + + + std::list< EOT >::iterator + solutionIterator + classmo_simple_solution_tabu_list.html + 3438db9ed9e1a94a24c418d8cbadec54 + + + + + moSimpleSolutionTabuList + classmo_simple_solution_tabu_list.html + 8499bf947de47519d155e9e45f815d41 + (unsigned int _memory_maximum_size) + + + bool + operator() + classmo_simple_solution_tabu_list.html + 9052858ae3e6765cbe4c344bdae6c692 + (const M &_move, const EOT &_solution) + + + void + add + classmo_simple_solution_tabu_list.html + 58ae13e7642c429ea51ff679a932aceb + (const M &_move, const EOT &_solution) + + + void + update + classmo_simple_solution_tabu_list.html + 91b8b01dba7ffea8b63765d931e56f56 + () + + + void + init + classmo_simple_solution_tabu_list.html + d5645c39fec71a6110a2cbccbb08b816 + () + + + void + removeSolution + classmo_simple_solution_tabu_list.html + e4a57001a201e1fb7446902381a7ac7d + (const EOT &_solution) + + + unsigned int + memory_maximum_size + classmo_simple_solution_tabu_list.html + 06631e7b9a2511e3c11540aa14b9e636 + + + + unsigned int + memory_size + classmo_simple_solution_tabu_list.html + 0d54e6b0af0e6088aafae596392c9490 + + + + std::list< EOT > + tabuList + classmo_simple_solution_tabu_list.html + 75df9cd683528d3722d02bac407b710b + + + + + moSolContinue + classmo_sol_continue.html + EOT + eoUF< const EOT &, bool > + + virtual void + init + classmo_sol_continue.html + 064dc966a210f4ffb9515be3f03ca4c7 + ()=0 + + + + moSteadyFitSolContinue + classmo_steady_fit_sol_continue.html + EOT + moSolContinue + + EOT::Fitness + Fitness + classmo_steady_fit_sol_continue.html + c289721abbbafe50f6e3b8305dd31007 + + + + + moSteadyFitSolContinue + classmo_steady_fit_sol_continue.html + c5e0e998b73e3a48ca3e87f4f816569b + (unsigned int _maxNumberOfIterations, unsigned int _maxNumberOfIterationWithoutImprovement) + + + bool + operator() + classmo_steady_fit_sol_continue.html + f7432bccb768d50a2fef248c2b174904 + (const EOT &_solution) + + + void + init + classmo_steady_fit_sol_continue.html + 87563493addc8e4b58982c55a67179b9 + () + + + unsigned int + maxNumberOfIterations + classmo_steady_fit_sol_continue.html + 36b43c2a252887ad027165ac32393fe8 + + + + unsigned int + maxNumberOfIterationsWithoutImprovement + classmo_steady_fit_sol_continue.html + cde593c09f497a5fa66ff62732544f40 + + + + bool + maxNumberOfIterationsReached + classmo_steady_fit_sol_continue.html + 7d88c0eb91b2a12121ba1c3ae9139887 + + + + bool + firstFitnessSaved + classmo_steady_fit_sol_continue.html + 025bf2789e470fdde989eee9121035c3 + + + + Fitness + fitness + classmo_steady_fit_sol_continue.html + a5c62e7049b36f6e71e92b559568c09e + + + + unsigned int + counter + classmo_steady_fit_sol_continue.html + 245c9099a2c40dfc4f34b3ff216d13ce + + + + + moTabuList + classmo_tabu_list.html + M + eoBF + + M::EOType + EOT + classmo_tabu_list.html + e219715cc3fdd5626764bc50ce6357df + + + + virtual void + add + classmo_tabu_list.html + 55204939b6d67b6d37b4af725d70cf6d + (const M &_move, const EOT &_solution)=0 + + + virtual void + update + classmo_tabu_list.html + a2e5d1132f064093c8ed57046405f5ca + ()=0 + + + virtual void + init + classmo_tabu_list.html + 0a06c459d56e8e2b408a8f3c6aec4e57 + ()=0 + + + + moTS + classmo_t_s.html + M + moAlgo< M::EOType > + + + moTS + classmo_t_s.html + 336408ddf8b7a29ffa8e01e9c18d8e10 + (moMoveInit< M > &_move_initializer, moNextMove< M > &_next_move_generator, moMoveIncrEval< M > &_incremental_evaluation, moTabuList< M > &_tabu_list, moAspirCrit< M > &_aspiration_criterion, moSolContinue< EOT > &_continue, eoEvalFunc< EOT > &_full_evaluation) + + + + moTS + classmo_t_s.html + 7e435fac1b8d5a410b7374d114e005e2 + (moMoveExpl< M > &_move_explorer, moSolContinue< EOT > &_continue, eoEvalFunc< EOT > &_full_evaluation) + + + bool + operator() + classmo_t_s.html + 2a011779723e24a5132a37593775bf56 + (EOT &_solution) + + + M::EOType + EOT + classmo_t_s.html + 90d19d468c12ab5bd796948ce1ce79b1 + + + + EOT::Fitness + Fitness + classmo_t_s.html + aa0eefbb17111422e495d1255f876fca + + + + moMoveExpl< M > & + move_explorer + classmo_t_s.html + 9fd948a2c586f1991f5a1eee927af8a6 + + + + moSolContinue< EOT > & + continu + classmo_t_s.html + 962a37393faf5239e657388d375cd9b3 + + + + eoEvalFunc< EOT > & + full_evaluation + classmo_t_s.html + f44bb408007e2bff99f7a201842e8e48 + + + + + moTSMoveLoopExpl + classmo_t_s_move_loop_expl.html + M + moMoveLoopExpl + + + moTSMoveLoopExpl + classmo_t_s_move_loop_expl.html + be5cf0853777718c3bbcbef456b50bc7 + (moMoveInit< M > &_move_initializer, moNextMove< M > &_next_move_generator, moMoveIncrEval< M > &_incremental_evaluation, moTabuList< M > &_tabu_list, moAspirCrit< M > &_aspiration_criterion) + + + void + operator() + classmo_t_s_move_loop_expl.html + 853743f2e21def3ea129556f47fafa55 + (const EOT &_old_solution, EOT &_new_solution) + + + M::EOType + EOT + classmo_t_s_move_loop_expl.html + 47f42225e2ed096374b818bdb848a527 + + + + M::EOType::Fitness + Fitness + classmo_t_s_move_loop_expl.html + a1ba36c937b195ca2f7d1a24adaa7018 + + + + moMoveInit< M > & + move_initializer + classmo_t_s_move_loop_expl.html + cd680d22382b9941d2c34133a641d443 + + + + moNextMove< M > & + next_move_generator + classmo_t_s_move_loop_expl.html + a2bbb593af2beefb05a307277c22b3d5 + + + + moMoveIncrEval< M > & + incremental_evaluation + classmo_t_s_move_loop_expl.html + 491fa46e1cb7935cb515b27b85bf8765 + + + + moBestImprSelect< M > + move_selection + classmo_t_s_move_loop_expl.html + 1caa6939fbe65ec4255e9e6dc3ce333b + + + + moTabuList< M > & + tabu_list + classmo_t_s_move_loop_expl.html + 0e5988a940ba218e87c53b7e56d79790 + + + + moAspirCrit< M > & + aspiration_criterion + classmo_t_s_move_loop_expl.html + bdfc8efb22599c150b3c3d44cd416b09 + + + + diff --git a/trunk/paradiseo-old-mo/mo-conf.cmake b/trunk/paradiseo-old-mo/mo-conf.cmake new file mode 100755 index 000000000..2a7c9ecc4 --- /dev/null +++ b/trunk/paradiseo-old-mo/mo-conf.cmake @@ -0,0 +1,6 @@ +###################################################################################### +###################################################################################### +### In this file, you can specify many CMake variables used to build paradisEO-MO. +###################################################################################### +###################################################################################### + diff --git a/trunk/paradiseo-old-mo/src/CMakeLists.txt b/trunk/paradiseo-old-mo/src/CMakeLists.txt new file mode 100644 index 000000000..4ce15020e --- /dev/null +++ b/trunk/paradiseo-old-mo/src/CMakeLists.txt @@ -0,0 +1,4 @@ + +############################################################### +# This is a dummy file +############################################################### diff --git a/trunk/paradiseo-old-mo/src/index.h b/trunk/paradiseo-old-mo/src/index.h new file mode 100644 index 000000000..c18fd6b98 --- /dev/null +++ b/trunk/paradiseo-old-mo/src/index.h @@ -0,0 +1,68 @@ +/** @mainpage Welcome to PARADISEO-Moving Objects + + @section Introduction + + MO is an extension of the ANSI-C++ compliant evolutionary computation library EO. +
+ It contains classes for almost any kind of one solution based heuristics. + + @section authors AUTHORS + + + + + + + + +
Sebastien CAHON
+ Jean-Charles BOISSON +
+ + @section LICENSE + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr + + + @section Paradiseo Home Page + + http://paradiseo.gforge.inria.fr + + @section Installation + + The installation procedure of the package is detailed in the + README file in the top-directory of the source-tree. + +*/ + + +// coding: iso-8859-1 +// mode: C++ +// c-file-style: "Stroustrup" +// fill-column: 80 +// End: diff --git a/trunk/paradiseo-old-mo/src/mo b/trunk/paradiseo-old-mo/src/mo new file mode 100755 index 000000000..d0319b60a --- /dev/null +++ b/trunk/paradiseo-old-mo/src/mo @@ -0,0 +1,41 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __mo +#define __mo + +#include "mo.h" + +#endif diff --git a/trunk/paradiseo-old-mo/src/mo.h b/trunk/paradiseo-old-mo/src/mo.h new file mode 100755 index 000000000..efdab5ded --- /dev/null +++ b/trunk/paradiseo-old-mo/src/mo.h @@ -0,0 +1,79 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 + (C) OPAC Team, LIFL, 2002-2007 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _mo_h +#define _mo_h + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#endif diff --git a/trunk/paradiseo-old-mo/src/moAlgo.h b/trunk/paradiseo-old-mo/src/moAlgo.h new file mode 100755 index 000000000..a5152bb7f --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moAlgo.h @@ -0,0 +1,49 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr + +*/ + +#ifndef _moAlgo_h +#define _moAlgo_h + +#include + +//! Description of an algorithm of the paradiseo-mo library +/*! + moHC, moTS and moSA are 3 examples of algorithm of the paradiseo-mo library. +*/ +template < class EOT > class moAlgo:public eoMonOp < EOT > +{}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moAspirCrit.h b/trunk/paradiseo-old-mo/src/moAspirCrit.h new file mode 100755 index 000000000..efb6f74c2 --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moAspirCrit.h @@ -0,0 +1,58 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moAspirCrit_h +#define _moAspirCrit_h + +#include + +//! Description of the conditions in which a tabu move could be accepted +/*! + It is only a description... An object that herits from this class is needed to be used in a moTS. + See moNoAspriCrit for example. +*/ +template < class M > +class moAspirCrit: public eoBF < const M &, const typename M::EOType::Fitness &, bool > +{ + public: + + //! Procedure which initialises all that needs an aspiration criterion. + /*! + It can be possible that this procedure does nothing... + */ + virtual void init () = 0; +}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moBestImprSelect.h b/trunk/paradiseo-old-mo/src/moBestImprSelect.h new file mode 100755 index 000000000..c3aa6c2b5 --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moBestImprSelect.h @@ -0,0 +1,127 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moBestImprSelect_h +#define _moBestImprSelect_h + +#include + +//! One of the possible moMoveSelect. +/*! + All neighbors are considered, and the movement + which enables the best improvement is selected. +*/ +template < class M > +class moBestImprSelect:public moMoveSelect < M > +{ + public: + + //! Alias for the fitness. + typedef typename M::EOType::Fitness Fitness; + + //! Procedure which initialise the exploration + /*! + \param _fitness The current fitness. + */ + void init (const Fitness & _fitness) + { + //Code only used to avoid warning because _fitness is not used in this procedure. + Fitness fitness; + fitness=(Fitness)_fitness; + + //std::cout.precision(10); + + //std::cout << "old fitness = " << _fitness << std::endl; + + first_time = true; + } + + + //!Function that indicates if the current move has not improved the fitness. + /*! + If the given fitness enables an improvment, + the move (moMove) and the fitness linked to this move are saved. + + \param _move a move. + \param _fitness a fitness linked to the move. + \return TRUE if the move does not improve the fitness. + */ + bool update (const M & _move, const Fitness & _fitness) + { + if ( first_time || (_fitness > best_fitness) ) + { + best_fitness = _fitness; + best_move = _move; + + first_time = false; + } + + //std::cout << "best fitness = " << best_fitness << std::endl; + + return true; + } + + //! Procedure which saved the best move and fitness. + /*! + \param _move the current move (result of the procedure). + \param _fitness the current fitness (result of the procedure). + */ + void operator () (M & _move, Fitness & _fitness) + { + if(first_time) + { + throw std::runtime_error("[moBestImprSelect.h]: no move or/and no fitness already saved, update has to be called first."); + } + + _move = best_move; + _fitness = best_fitness; + + + //std::cout << "Final fitness = " << best_fitness << std::endl; + } + + private: + + //! Allowing to know if at least one move has been generated. + bool first_time; + + //! The best move. + M best_move; + + //! The best fitness. + Fitness best_fitness; +}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moComparator.h b/trunk/paradiseo-old-mo/src/moComparator.h new file mode 100644 index 000000000..8c0f9ff60 --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moComparator.h @@ -0,0 +1,48 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moComparator_h +#define _moComparator_h + + +//! Template for classes which need to compare two EOT and indicate if the first is "better" than the second. +/*! + The objects that extend this template describe how an EOT is "better" than an other. +*/ +template +class moComparator: public eoBF +{}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moCoolingSchedule.h b/trunk/paradiseo-old-mo/src/moCoolingSchedule.h new file mode 100644 index 000000000..f2cd44164 --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moCoolingSchedule.h @@ -0,0 +1,49 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moCoolingSchedule_h +#define _moCoolingSchedule_h + +#include + +//! This class gives the description of a cooling schedule. +/*! + It is only a description... An object that herits from this class is needed to be used in a moSA. + See moExponentialCoolingSchedule or moLinearCoolingSchedule for example. +*/ +class moCoolingSchedule : public eoUF < double &, bool > +{}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moExpl.h b/trunk/paradiseo-old-mo/src/moExpl.h new file mode 100644 index 000000000..803f0ead5 --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moExpl.h @@ -0,0 +1,113 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Salma Mesmoudi (salma.mesmoudi@inria.fr), Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr + */ +#ifndef _moExpl_h +#define _moExpl_h + +#include + +//! Description of an explorer +/*! + This class allows to use any mutation object as a neighborhood. +*/ +template < class EOT > +class moExpl : public eoBF < const EOT &, EOT &, bool > +{ + public: + + //! Generic constructor + /*! + Generic constructor using a eoMonOp + + \param _explorer Algorithme or mutation. + + */ + moExpl(eoMonOp & _explorer): index(0) + { + explorers.clear(); + addExplorer(_explorer); + } + + //! Procedure which launches the moExpl. + /*! + The exploration starts from an old solution and provides a new solution. + + \param _old_solution The current solution. + \param _new_solution The new solution (result of the procedure). + */ + + bool operator ()(const EOT & _old_solution, EOT & _new_solution) + { + _new_solution=(EOT)_old_solution; + return (*explorers[index])(_new_solution); + } + + //! Add an algorithm or mutation to neighborhoods vector + void addExplorer(eoMonOp & _new_explorer) + { + explorers.push_back(&_new_explorer); + } + + //! Procedure which modified the current explorer to use. + /*! + \param _index Index of the explorer to use. + */ + void setCurrentExplorer(unsigned int _index) + { + if( _index >= explorers.size() ) + { + std::cout << "[" << _index << "]" << std::endl; + throw std::runtime_error("[moExpl.h]: bad index "+_index); + } + index=_index; + } + + //! Function which returns the number of explorers already saved. + /*! + \return The number of explorers contained in the moExpl. + */ + unsigned int getExplorerNumber() + { + return explorers.size(); + } + + private : + + unsigned int index; + + //!Neighborhoods vector + std::vector< eoMonOp* > explorers; +}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moFirstImprSelect.h b/trunk/paradiseo-old-mo/src/moFirstImprSelect.h new file mode 100755 index 000000000..94ca93c16 --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moFirstImprSelect.h @@ -0,0 +1,120 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moFirstImprSelect_h +#define _moFirstImprSelect_h + +#include + +//! One possible moMoveSelect. +/*! + The neighborhood is explored until + a move enables an improvment of the + current solution. +*/ +template < class M > +class moFirstImprSelect:public moMoveSelect < M > +{ + public: + + //! Alias for the fitness. + typedef typename M::EOType::Fitness Fitness; + + //! Procedure which initialise the exploration. + /*! + It save the current fitness as the initial value for the fitness. + \param _fitness The current fitness. + */ + virtual void init (const Fitness & _fitness) + { + valid = false; + initial_fitness = _fitness; + } + + //!Function that indicates if the current move has not improved the fitness. + /*! + If the given fitness enables an improvment, + the move (moMove) should be applied to the current solution. + + \param _move a move. + \param _fitness a fitness linked to the move. + \return true if the move does not improve the fitness. + */ + bool update (const M & _move, const Fitness & _fitness) + { + + if (_fitness > initial_fitness) + { + + best_fitness = _fitness; + best_move = _move; + valid = true; + + return false; + } + + return true; + } + + //! Procedure which saved the best move and fitness. + /*! + \param _move the current move (result of the procedure). + \param _fitness the current fitness (result of the procedure). + */ + void operator () (M & _move, Fitness & _fitness) + { + if (valid) + { + _move = best_move; + _fitness = best_fitness; + } + } + + private: + + //! Allow to know if at least one move has improved the solution. + bool valid; + + //! Best stored movement. + M best_move; + + //! Initial fitness. + Fitness initial_fitness; + + //! Best stored fitness. + Fitness best_fitness; +}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moFitComparator.h b/trunk/paradiseo-old-mo/src/moFitComparator.h new file mode 100644 index 000000000..6dd75b5ce --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moFitComparator.h @@ -0,0 +1,62 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moFitComparator_h +#define _moFitComparator_h + +#include + +//! Comparison according to the fitness. +/*! + An EOT is better than an other if its fitness is better. +*/ +template +class moFitComparator: public moComparator +{ + public: + + //! Function which makes the comparison and gives the result. + /*! + \param _solution1 The first solution. + \param _solution2 The second solution. + \return true if the fitness of the first solution is better than the second solution, false else. + */ + bool operator()(const EOT & _solution1, const EOT & _solution2) + { + return _solution1.fitness() > _solution2.fitness(); + } +}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moFitSolContinue.h b/trunk/paradiseo-old-mo/src/moFitSolContinue.h new file mode 100644 index 000000000..af3d375fc --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moFitSolContinue.h @@ -0,0 +1,90 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moFitSolContinue_h +#define _moFitSolContinue_h + +#include + +//! One possible stop criterion for a solution-based heuristic. +/*! + The stop criterion corresponds to a fitness threshold gained. +*/ +template < class EOT > +class moFitSolContinue:public moSolContinue < EOT > +{ + public: + + //! Alias for the fitness. + typedef typename EOT::Fitness Fitness; + + //! Basic constructor. + /*! + \param _fitness The fitness to reach. + */ + moFitSolContinue (Fitness _fitness): fitness(_fitness) + {} + + //! Function that activates the stopping criterion. + /*! + Indicates if the fitness threshold has not yet been reached. + + \param _solution the current solution. + \return true or false according to the value of the fitness. + */ + bool operator () (const EOT & _solution) + { + if ( _solution.invalid() ) + { + throw std::runtime_error("[moFitSolContinue.h]: The current solution has not been evaluated."); + } + + return fitness > _solution.fitness(); + } + + //! Procedure which allows to initialise all the stuff needed. + /*! + It can be also used to reinitialize all the needed things. + */ + void init () + {} + + private: + + //! Fitness target. + Fitness fitness; +}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moGenSolContinue.h b/trunk/paradiseo-old-mo/src/moGenSolContinue.h new file mode 100755 index 000000000..f838e5447 --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moGenSolContinue.h @@ -0,0 +1,92 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moGenSolContinue_h +#define _moGenSolContinue_h + +#include "moSolContinue.h" + +//! One possible stop criterion for a solution-based heuristic. +/*! + The stop criterion corresponds to a maximum number of iteration. +*/ +template < class EOT > +class moGenSolContinue:public moSolContinue < EOT > +{ + public: + + //! Simple constructor. + /*! + \param _generationMaximumNumber The maximum number of generations. + */ + moGenSolContinue (unsigned int _generationMaximumNumber): generationMaximumNumber(_generationMaximumNumber), generationNumber(0) + {} + + //! Function that activates the stop criterion. + /*! + Increments the counter and returns TRUE if the + current number of iteration is lower than the given + maximum number of iterations. + + \param _solution The current solution. + \return true or false according to the current generation number. + */ + bool operator () (const EOT & _solution) + { + //code only used for avoiding warning because _sol is not used in this function. + const EOT solution(_solution); + + return (++generationNumber < generationMaximumNumber); + } + + //! Procedure which allows to initialise the generation counter. + /*! + It can also be used to reset the iteration counter. + */ + void init () + { + generationNumber = 0; + } + + private: + + //! Iteration maximum number. + unsigned int generationMaximumNumber; + + //! Iteration current number. + unsigned int generationNumber; +}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moGeometricCoolingSchedule.h b/trunk/paradiseo-old-mo/src/moGeometricCoolingSchedule.h new file mode 100644 index 000000000..c0cc6fc5a --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moGeometricCoolingSchedule.h @@ -0,0 +1,79 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moGeometricCoolingSchedule_h +#define _moGeometricCoolingSchedule_h + +#include + +//! One of the possible moCoolingSchedule +/*! + An other very simple cooling schedule, the temperature decrease according to a ratio while + the temperature is greater than a given threshold. +*/ +class moGeometricCoolingSchedule: public moCoolingSchedule +{ + public: + + //! Simple constructor + /*! + \param _threshold the threshold. + \param _ratio the ratio used to descrease the temperature. + */ + moGeometricCoolingSchedule (double _threshold, double _ratio):threshold (_threshold), ratio (_ratio) + {} + + //! Function which proceeds to the cooling. + /*! + It decreases the temperature and indicates if it is greater than the threshold. + + \param _temperature the current temperature. + \return if the new temperature (current temperature * ratio) is greater than the threshold. + */ + bool operator() (double & _temperature) + { + return (_temperature *= ratio) > threshold; + } + + private: + + //! The temperature threhold. + double threshold; + + //! The decreasing factor of the temperature. + double ratio; +}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moHC.h b/trunk/paradiseo-old-mo/src/moHC.h new file mode 100755 index 000000000..d96c8c280 --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moHC.h @@ -0,0 +1,136 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __moHC_h +#define __moHC_h + +#include + +#include +#include + +//! Hill Climbing (HC) +/*! + Class which describes the algorithm for a hill climbing. +*/ +template < class M > +class moHC:public moAlgo < typename M::EOType > +{ + //! Alias for the type. + typedef typename M::EOType EOT; + + //! Alias for the fitness. + typedef typename EOT::Fitness Fitness; + + public: + + //! Full constructor. + /*! + All the boxes are given in order the HC to use a moHCMoveLoopExpl. + + \param _move_initializer a move initialiser. + \param _next_move_generator a neighborhood explorer. + \param _incremental_evaluation a (generally) efficient evaluation function. + \param _move_selection a move selector. + \param _full_evaluation a full evaluation function. + */ + moHC (moMoveInit < M > & _move_initializer, moNextMove < M > & _next_move_generator, + moMoveIncrEval < M > & _incremental_evaluation, moMoveSelect < M > & _move_selection, eoEvalFunc < EOT > & _full_evaluation) : + move_explorer(new moHCMoveLoopExpl(_move_initializer, _next_move_generator, _incremental_evaluation, _move_selection)), + full_evaluation (_full_evaluation), move_explorer_memory_allocation(true) + {} + + //! Light constructor. + /*! + This constructor allow to use another moMoveExpl (generally not a moHCMoveLoopExpl). + + \param _move_explorer a complete explorer. + \param _full_evaluation a full evaluation function. + */ + moHC (moMoveExpl < M > & _move_explorer, eoEvalFunc < EOT > & _full_evaluation): + move_explorer (&_move_explorer), full_evaluation (_full_evaluation), move_explorer_memory_allocation(false) + {} + + //! Destructor + ~moHC() + { + if(move_explorer_memory_allocation) + { + delete(move_explorer); + } + } + + //! Function which launches the HC + /*! + The HC has to improve a current solution. + As the moSA and the mo TS, it can be used for HYBRIDATION in an evolutionnary algorithm. + + \param _solution a current solution to improve. + \return true. + */ + bool operator ()(EOT & _solution) + { + EOT new_solution; + + if ( _solution.invalid() ) + { + full_evaluation(_solution); + } + + new_solution=_solution; + + do + { + _solution=new_solution; + (*move_explorer) (_solution, new_solution); + } + while ( new_solution.fitness() > _solution.fitness() ); + + return true; + } + + private: + + //! Complete exploration of the neighborhood. + moMoveExpl < M > * move_explorer; + + //! A full evaluation function. + eoEvalFunc < EOT > & full_evaluation; + + //! Indicate if the memory has been allocated for the move_explorer. + bool move_explorer_memory_allocation; +}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moHCMoveLoopExpl.h b/trunk/paradiseo-old-mo/src/moHCMoveLoopExpl.h new file mode 100755 index 000000000..44f806ecb --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moHCMoveLoopExpl.h @@ -0,0 +1,138 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __moHCMoveLoopExpl_h +#define __moHCMoveLoopExpl_h + +#include +#include +#include +#include +#include + +//! Iterative explorer used by a moHC. +template < class M > +class moHCMoveLoopExpl:public moMoveLoopExpl < M > +{ + //! Alias for the type. + typedef typename M::EOType EOT; + + //! Alias for the fitness. + typedef typename M::EOType::Fitness Fitness; + + public: + + //! Constructor. + /*! + All the boxes have to be specified. + + \param _move_initializer The move initialiser. + \param _next_move_generator The neighbourhood explorer. + \param _incremental_evaluation (generally) Efficient evaluation function. + \param _move_selection The move selector. + */ + moHCMoveLoopExpl (moMoveInit < M > & _move_initializer, moNextMove < M > & _next_move_generator, + moMoveIncrEval < M > & _incremental_evaluation, moMoveSelect < M > & _move_selection) : + move_initializer (_move_initializer), next_move_generator (_next_move_generator), + incremental_evaluation (_incremental_evaluation), move_selection (_move_selection) + {} + + //! Procedure which launches the explorer. + /*! + The exploration starts from an old solution and provides a new solution. + + \param _old_solution The current solution. + \param _new_solution The new solution (result of the procedure). + */ + void operator () (const EOT & _old_solution, EOT & _new_solution) + { + M move, best_move; + Fitness best_fitness; + bool has_next_move, selection_update_is_ok; + + if( _old_solution.invalid() ) + { + throw std::runtime_error("[moHCMoveLoopExpl.h]: The current solution has not been evaluated."); + } + + /* + The two following lines are added to avoid compilation warning. + <=> current best move fitness is the current fitness. + <=> move and best move are empty for the moment. + */ + best_fitness=_old_solution.fitness(); + move=best_move; + + //At the begining, the new sol is equivalent to the old one. + _new_solution=(EOT)_old_solution; + + // Restarting the exploration of the neighbourhood + move_initializer(move, _old_solution); + + move_selection.init(_old_solution.fitness ()); + + do + { + selection_update_is_ok = move_selection.update (move, incremental_evaluation(move, _old_solution) ); + has_next_move = next_move_generator (move, _old_solution); + } + while ( selection_update_is_ok && has_next_move); + + //The selecter gives the value of the best move and the corresponding best fitness. + move_selection (best_move, best_fitness); + + //The best move is applied on the new solution. + best_move(_new_solution); + + //The fitness is set (avoid an additional fitness compuation). + _new_solution.fitness (best_fitness); + } + + private: + + //! Move initialiser. + moMoveInit < M > & move_initializer; + + //! Neighborhood explorer. + moNextMove < M > & next_move_generator; + + //! (generally) Efficient evaluation. + moMoveIncrEval < M > & incremental_evaluation; + + //! Move selector. + moMoveSelect < M > & move_selection; +}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moILS.h b/trunk/paradiseo-old-mo/src/moILS.h new file mode 100644 index 000000000..48eac8565 --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moILS.h @@ -0,0 +1,228 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moILS_h +#define _moILS_h + +#include + +#include +#include +#include + +//! Iterated Local Search (ILS) +/*! + Class which describes the algorithm for a iterated local search. +*/ +template < class M > +class moILS:public moAlgo < typename M::EOType > +{ + //! Alias for the type. + typedef typename M::EOType EOT; + + //! Alias for the fitness. + typedef typename EOT::Fitness Fitness; + + public: + + //! Generic constructor + /*! + Generic constructor using a moAlgo + + \param _algorithm The solution based heuristic to use. + \param _continue The stopping criterion. + \param _acceptance_criterion The acceptance criterion. + \param _perturbation The pertubation generator. + \param _full_evaluation The evaluation function. + */ + moILS (moAlgo & _algorithm, moSolContinue & _continue, moComparator & _acceptance_criterion, + eoMonOp & _perturbation, eoEvalFunc & _full_evaluation): + algorithm(& _algorithm), continu(_continue), acceptance_criterion(_acceptance_criterion), + perturbation(_perturbation), full_evaluation(_full_evaluation), algorithm_memory_allocation(false) + {} + + //! Constructor for using a moHC for the moAlgo + /*! + \param _move_initializer The move initialisation (for the moHC). + \param _next_move_generator The move generator (for the moHC). + \param _incremental_evaluation The partial evaluation function (for the moHC). + \param _move_selection The move selection strategy (for the moHC). + \param _continue The stopping criterion. + \param _acceptance_criterion The acceptance criterion. + \param _perturbation The pertubation generator. + \param _full_evaluation The evaluation function. + */ + moILS (moMoveInit < M > & _move_initializer, moNextMove < M > & _next_move_generator, + moMoveIncrEval < M > & _incremental_evaluation, moMoveSelect < M > & _move_selection, + moSolContinue & _continue, moComparator & _acceptance_criterion, + eoMonOp & _perturbation, eoEvalFunc & _full_evaluation): + algorithm(new moHC(_move_initializer, _next_move_generator, _incremental_evaluation, _move_selection, _full_evaluation) ), + continu(_continue), acceptance_criterion(_acceptance_criterion), perturbation(_perturbation), full_evaluation(_full_evaluation), + algorithm_memory_allocation(true) + {} + + //! Constructor for using a moTS for the moAlgo + /*! + \param _move_initializer The move initialisation (for the moTS). + \param _next_move_generator The move generator (for the moTS). + \param _incremental_evaluation The partial evaluation function (for the moTS). + \param _tabu_list The tabu list (for the moTS !!!!). + \param _aspiration_criterion The aspiration criterion (for the moTS). + \param _moTS_continue The stopping criterion (for the moTS). + \param _continue The stopping criterion. + \param _acceptance_criterion The acceptance criterion. + \param _perturbation The pertubation generator. + \param _full_evaluation The evaluation function. + */ + moILS (moMoveInit & _move_initializer, moNextMove & _next_move_generator, + moMoveIncrEval & _incremental_evaluation, moTabuList & _tabu_list, + moAspirCrit & _aspiration_criterion, moSolContinue & _moTS_continue, + moSolContinue & _continue, moComparator & _acceptance_criterion, eoMonOp & _perturbation, + eoEvalFunc & _full_evaluation): + algorithm(new moTS(_move_initializer, _next_move_generator, _incremental_evaluation, _tabu_list, _aspiration_criterion, + _moTS_continue, _full_evaluation) ), + continu(_continue), acceptance_criterion(_acceptance_criterion), perturbation(_perturbation), full_evaluation(_full_evaluation), + algorithm_memory_allocation(true) + {} + + //! Constructor for using a moSA for the moAlgo + /*! + \param _random_move_generator The random move generator (for the moSA). + \param _incremental_evaluation The partial evaluation function (for the moSA). + \param _moSA_continue The stopping criterion (for the moSA). + \param _initial_temperature The initial temperature (for the moSA). + \param _cooling_schedule The cooling schedule (for the moSA). + \param _continue The stopping criterion. + \param _acceptance_criterion The acceptance criterion. + \param _perturbation The pertubation generator. + \param _full_evaluation The evaluation function. + */ + moILS (moRandMove & _random_move_generator, moMoveIncrEval & _incremental_evaluation, moSolContinue & _moSA_continue, + double _initial_temperature, moCoolingSchedule & _cooling_schedule, moSolContinue & _continue, + moComparator & _acceptance_criterion, eoMonOp & _perturbation, eoEvalFunc & _full_evaluation): + algorithm(new moSA(_random_move_generator, _incremental_evaluation, _moSA_continue, _initial_temperature, + _cooling_schedule, _full_evaluation) ), + continu(_continue), acceptance_criterion(_acceptance_criterion), perturbation(_perturbation), full_evaluation(_full_evaluation), + algorithm_memory_allocation(true) + {} + + //! Destructor + ~moILS() + { + if(algorithm_memory_allocation) + { + delete(algorithm); + } + } + + //! Function which launches the ILS + /*! + The ILS has to improve a current solution. + As the moSA, the moTS and the moHC, it can be used for HYBRIDATION in an evolutionnary algorithm. + + \param _solution a current solution to improve. + \return true. + */ + bool operator()(EOT & _solution) + { + EOT _solution_saved; + + if ( _solution.invalid() ) + { + full_evaluation(_solution); + } + + _solution_saved=_solution; + + continu.init (); + + // some code has been duplicated in order to avoid one perturbation and one evaluation without adding a test in the loop. + // better than a do {} while; with a test in the loop. + + (*algorithm)(_solution); + + if ( acceptance_criterion(_solution, _solution_saved) ) + { + _solution_saved=_solution; + + } + else + { + _solution=_solution_saved; + } + + while ( continu (_solution) ) + { + perturbation(_solution); + //_solution.invalidate(); + full_evaluation(_solution); + + (*algorithm)(_solution); + + if ( acceptance_criterion(_solution, _solution_saved) ) + { + _solution_saved=_solution; + } + else + { + _solution=_solution_saved; + } + } + + return true; + } + + private: + + //! The solution based heuristic. + moAlgo * algorithm; + + //! The stopping criterion. + moSolContinue & continu; + + //! The acceptance criterion. + moComparator & acceptance_criterion; + + //! The perturbation generator + eoMonOp & perturbation; + + //! The full evaluation function + eoEvalFunc & full_evaluation; + + //! Indicate if the memory has been allocated for the algorithm. + bool algorithm_memory_allocation; +}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moImprBestFitAspirCrit.h b/trunk/paradiseo-old-mo/src/moImprBestFitAspirCrit.h new file mode 100755 index 000000000..af798a387 --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moImprBestFitAspirCrit.h @@ -0,0 +1,103 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moImprBestFitAspirCrit_h +#define _moImprBestFitAspirCrit_h + +#include + +//! One of the possible moAspirCrit +/*! + This criterion is satisfied when a given fitness + is the best ever considered. +*/ +template < class M > +class moImprBestFitAspirCrit:public moAspirCrit < M > +{ + + public: + + //! Alias for the fitness + typedef typename M::EOType::Fitness Fitness; + + //! Contructor + moImprBestFitAspirCrit (): first_time(true) + {} + + //! Initialisation procedure + void init () + { + first_time = true; + } + + //! Function that indicates if the current fitness is better that the already saved fitness + /*! + The first time, the function only saved the current move and fitness. + + \param _move A move. + \param _fitness A fitness linked to the move. + \return true The first time and if _fitness > best_fitness, else false. + */ + bool operator () (const M & _move, const Fitness & _fitness) + { + //code only used for avoiding warning because _move is not used in this function. + const M move(_move); + + if (first_time) + { + best_fitness = _fitness; + first_time = false; + + return true; + } + + if (_fitness > best_fitness) + { + best_fitness = _fitness; + return true; + } + return false; + } + + private: + + //! Best fitness found until now + Fitness best_fitness; + + //! Indicates that a fitness has been already saved or not + bool first_time; +}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moItRandNextMove.h b/trunk/paradiseo-old-mo/src/moItRandNextMove.h new file mode 100755 index 000000000..0bb3ef155 --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moItRandNextMove.h @@ -0,0 +1,102 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moItRandNextMove_h +#define _moItRandNextMove_h + +#include +#include + +//! One of the possible moNextMove. +/*! + This class is a move (moMove) generator with a bound for the maximum number of iterations. +*/ +template < class M > +class moItRandNextMove:public moNextMove < M > +{ + //! Alias for the type. + typedef typename M::EOType EOT; + + public: + + //! The constructor. + /*! + Parameters only for initialising the attributes. + + \param _random_move_generator The random move generator. + \param _iteration_maximum_number The iteration maximum number. + */ + moItRandNextMove (moRandMove < M > & _random_move_generator, unsigned int _iteration_maximum_number): + random_move_generator(_random_move_generator), iteration_maximum_number(_iteration_maximum_number), iteration_number(0) + {} + + //! Generation of a new move + /*! + If the maximum number is not already reached, the current move is forgotten and remplaced by another one. + + \param _move the current move. + \param _solution the current solution. + \return false if the maximum number of iteration is reached, else true. + */ + bool operator () (M & _move, const EOT & _solution) + { + //code only used to avoid warning because _solution is not used in this function. + const EOT solution(_solution); + + if (iteration_number > iteration_maximum_number) + { + iteration_number = 0; + return false; + } + + random_move_generator (_move); + iteration_number++; + + return true; + } + + private: + + //! A move generator (generally randomly). + moRandMove < M > & random_move_generator; + + //! Iteration maximum number. + unsigned int iteration_maximum_number; + + //! Iteration current number. + unsigned int iteration_number; +}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moLSCheckPoint.h b/trunk/paradiseo-old-mo/src/moLSCheckPoint.h new file mode 100755 index 000000000..1b5c64943 --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moLSCheckPoint.h @@ -0,0 +1,83 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moLSCheckPoint_h +#define _moLSCheckPoint_h + +#include + +//! Class which allows a checkpointing system. +/*! + Thanks to this class, at each iteration, additionnal function can be used (and not only one). +*/ +template < class M > +class moLSCheckPoint:public eoBF < const M &, const typename M::EOType &, void > +{ + public: + + //! Function which launches the checkpointing + /*! + Each saved function is used on the current move and the current solution. + + \param _move a move. + \param _solution a solution. + */ + void operator () (const M & _move, const typename M::EOType & _solution) + { + unsigned int i; + + for (i = 0; i < functions.size (); i++) + { + functions[i]->operator ()(_move, _solution); + } + } + + //! Procedure which add a new function to the function vector + /*! + The new function is added at the end of the vector. + \param _function a new function to add. + */ + void add (eoBF < const M &, const typename M::EOType &, void >& _function) + { + functions.push_back(& _function); + } + + private: + + //! Vector of functions. + std::vector < eoBF < const M &, const typename M::EOType &, void >*> functions; +}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moLinearCoolingSchedule.h b/trunk/paradiseo-old-mo/src/moLinearCoolingSchedule.h new file mode 100644 index 000000000..205593ce4 --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moLinearCoolingSchedule.h @@ -0,0 +1,79 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moLinearCoolingSchedule_h +#define _moLinearCoolingSchedule_h + +#include + +//! One of the possible moCoolingSchedule +/*! + An another very simple cooling schedule, the temperature decrease according to a quantity while + the temperature is greater than a threshold. +*/ +class moLinearCoolingSchedule: public moCoolingSchedule +{ + + public: + //! Simple constructor + /*! + \param _threshold the threshold. + \param _quantity the quantity used to descrease the temperature. + */ + moLinearCoolingSchedule (double _threshold, double _quantity):threshold (_threshold), quantity (_quantity) + {} + + //! Function which proceeds to the cooling. + /*! + It decreases the temperature and indicates if it is greater than the threshold. + + \param _current_temperature The current temperature. + \return true if the new temperature (current temperature - quantity) is greater than the threshold, false otherwise. + */ + bool operator() (double & _current_temperature) + { + return (_current_temperature -= quantity) > threshold; + } + + private: + + //! The temperature threhold. + double threshold; + + //! The quantity that allows the temperature to decrease. + double quantity; +}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moMove.h b/trunk/paradiseo-old-mo/src/moMove.h new file mode 100755 index 000000000..d24832db3 --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moMove.h @@ -0,0 +1,57 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr + +*/ + +#ifndef _moMove_h +#define _moMove_h + +#include + +//! Definition of a move. + +/*! + A move transforms a solution to another close solution. + It describes how a solution can be modified to another one. +*/ +template < class EOT > +class moMove:public eoUF < EOT &, void > +{ + public: + + //! Alias for the type + typedef EOT EOType; +}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moMoveExpl.h b/trunk/paradiseo-old-mo/src/moMoveExpl.h new file mode 100755 index 000000000..3fb266f7a --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moMoveExpl.h @@ -0,0 +1,49 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moMoveExpl_h +#define _moMoveExpl_h + +#include + +//! Description of a move (moMove) explorer +/*! + Only a description...See moMoveLoopExpl. +*/ +template < class M > +class moMoveExpl : public eoBF < const typename M::EOType &, typename M::EOType &, void > +{}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moMoveIncrEval.h b/trunk/paradiseo-old-mo/src/moMoveIncrEval.h new file mode 100755 index 000000000..af1032dcd --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moMoveIncrEval.h @@ -0,0 +1,52 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moMoveIncrEval_h +#define _moMoveIncrEval_h + +#include + +//! (generally) Efficient evaluation function based a move and a solution. + +/*! + From a move and a solution, it computes + a new fitness that could be associated to + the solution if this one is updated. +*/ +template < class M, class Objective = typename M::EOType::Fitness> +class moMoveIncrEval:public eoBF < const M &, const typename M::EOType &, Objective > +{}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moMoveInit.h b/trunk/paradiseo-old-mo/src/moMoveInit.h new file mode 100755 index 000000000..bd521d90a --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moMoveInit.h @@ -0,0 +1,50 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moMoveInit_h +#define _moMoveInit_h + +#include + +//! Move (moMove) initializer +/*! + Class which allows to initiase a move. + Only a description... An object that herits from this class needs to be designed to be used. +*/ +template < class M > +class moMoveInit:public eoBF < M &, const typename M::EOType &, void > +{}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moMoveLoopExpl.h b/trunk/paradiseo-old-mo/src/moMoveLoopExpl.h new file mode 100755 index 000000000..9068f1c81 --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moMoveLoopExpl.h @@ -0,0 +1,50 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr + +*/ + +#ifndef _moMoveLoopExpl_h +#define _moMoveLoopExpl_h + +#include + +//! Class which describes an iterative explorer +/*! + Only a description... moHCMoveLoopExpl and moTSMoveLoopExpl are exemples of class that are a moMoveLoopExpl. +*/ +template < class M > +class moMoveLoopExpl:public moMoveExpl < M > +{}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moMoveSelect.h b/trunk/paradiseo-old-mo/src/moMoveSelect.h new file mode 100755 index 000000000..0b7b863a5 --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moMoveSelect.h @@ -0,0 +1,76 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr + +*/ + +#ifndef _moMoveSelect_h +#define _moMoveSelect_h + +#include +#include + +//! Class that describes a move selector (moMove). +/*! + It iteratively considers some moves (moMove) and their + associated fitnesses. The best move is so regularly updated. + At any time, it could be accessed. +*/ +template < class M > +class moMoveSelect:public eoBF < M &, typename M::EOType::Fitness &, void > +{ + public: + //! Alias for the fitness + typedef typename M::EOType::Fitness Fitness; + + //! Procedure which initialises all that the move selector needs including the initial fitness. + /*! + In order to know the fitness of the solution, + for which the neighborhood will + be soon explored + + \param _fitness the current fitness. + */ + virtual void init (const Fitness & _fitness) = 0; + + //! Function which updates the best solutions. + /*! + \param _move a new move. + \param _fitness a fitness linked to the new move. + \return a boolean that expresses the need to resume the exploration. + */ + virtual bool update (const M & _move, const Fitness & _fitness) = 0; + +}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moNextMove.h b/trunk/paradiseo-old-mo/src/moNextMove.h new file mode 100755 index 000000000..5a067039c --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moNextMove.h @@ -0,0 +1,50 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moNextMove_h +#define _moNextMove_h + +#include + +//! Class which allows to generate a new move (moMove). +/*! + Useful for the explorer (for moTS or moHC). + Does nothing... An object that herits from this class needs to be designed for being used. +*/ +template < class M > +class moNextMove:public eoBF < M &, const typename M::EOType &, bool > +{}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moNoAspirCrit.h b/trunk/paradiseo-old-mo/src/moNoAspirCrit.h new file mode 100755 index 000000000..cbff69ec7 --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moNoAspirCrit.h @@ -0,0 +1,77 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr + +*/ + +#ifndef _moNoAspirCrit_h +#define _moNoAspirCrit_h + +#include + +//! One of the possible aspiration criterion (moAspirCrit) +/*! + The simplest : never satisfied. +*/ +template < class M > +class moNoAspirCrit:public moAspirCrit < M > +{ + public: + + //! Function which describes the aspiration criterion behaviour + /*! + Does nothing. + + \param _move a move. + \param _fitness a fitness. + \return false. + */ + bool operator () (const M & _move, const typename M::EOType::Fitness & _fitness) + { + //Code only used to avoid warning because _move and _fitness are not used in this procedure. + const M move(_move); + typename M::EOType::Fitness fitness; + fitness=(typename M::EOType::Fitness)_fitness; + + return false; + } + + //! Procedure which initialises all that needs a moNoAspirCrit. + /*! + Nothing... + */ + void init () + {} +}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moNoFitImprSolContinue.h b/trunk/paradiseo-old-mo/src/moNoFitImprSolContinue.h new file mode 100644 index 000000000..1ff44a788 --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moNoFitImprSolContinue.h @@ -0,0 +1,123 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moNoFitImprSolContinue_h +#define _moNoFitImprSolContinue_h + +#include + +//! One possible stop criterion for a solution-based heuristic. +/*! + The stop criterion corresponds to a maximum number of iterations without improvement. +*/ +template < class EOT > +class moNoFitImprSolContinue:public moSolContinue < EOT > +{ + public: + + //! Alias for the fitness. + typedef typename EOT::Fitness Fitness; + + //! Basic constructor. + /*! + \param _maxNumberOfIterationWithoutImprovement The number of iterations without fitness improvement to reach for stop. + */ + moNoFitImprSolContinue (unsigned int _maxNumberOfIterationWithoutImprovement) + : maxNumberOfIterationsWithoutImprovement(_maxNumberOfIterationWithoutImprovement), firstFitnessSaved(true), counter(0) + {} + + //! Function that activates the stopping criterion. + /*! + Indicates if the fitness has not been improved since a given number of iterations (after a minimum of iterations). + \param _solution the current solution. + \return true or false. + */ + bool operator () (const EOT & _solution) + { + if (_solution.invalid()) + { + throw std::runtime_error("[moNoFitImprSolContinue.h]: The current solution has not been evaluated."); + } + + if (firstFitnessSaved) + { + fitness=_solution.fitness(); + counter=0; + firstFitnessSaved=false; + return true; + } + + counter++; + + if ( _solution.fitness() > fitness) + { + fitness=_solution.fitness(); + counter=0; + } + + if (counter==maxNumberOfIterationsWithoutImprovement) + { + std::cout << "[moNoFitImrpSolContinue.h]: Done [" << counter << "] iterations without improvement." << std::endl; + } + + return counter!=maxNumberOfIterationsWithoutImprovement; + } + + //! Procedure which allows to initialise all the stuff needed. + /*! + It can be also used to reinitialize all the needed things. + */ + void init () + { + firstFitnessSaved=true; + counter=0; + } + + private: + + //! Maximum number of iterations without improvement allowed. + unsigned int maxNumberOfIterationsWithoutImprovement; + + //! Flag that this is the first time that the fitness is used. + bool firstFitnessSaved; + + //! Current Fitness. + Fitness fitness; + + //! The iteration couter. + unsigned int counter; +}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moRandImprSelect.h b/trunk/paradiseo-old-mo/src/moRandImprSelect.h new file mode 100755 index 000000000..447b7b455 --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moRandImprSelect.h @@ -0,0 +1,136 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moRandImprSelect_h +#define _moRandImprSelect_h + +#include +#include +#include + +//! One of the possible moMove selector (moMoveSelect) +/*! + All the neighbors are considered. + One of them that enables an improvment of the objective function is choosen. +*/ +template < class M > +class moRandImprSelect: public moMoveSelect < M > +{ + public: + + //! Alias for the fitness + typedef typename M::EOType::Fitness Fitness; + + //!Procedure which all that needs a moRandImprSelect + /*! + Give a value to the initialise fitness. + Clean the move and fitness vectors. + + \param _fitness the current best fitness + */ + void init (const Fitness & _fitness) + { + initial_fitness = _fitness; + better_fitnesses.clear(); + better_moves.clear(); + firstTime=true; + } + + //! Function that updates the fitness and move vectors + /*! + if a move give a better fitness than the initial fitness, + it is saved and the fitness too. + + \param _move a new move. + \param _fitness a new fitness associated to the new move. + \return true. + */ + bool update (const M & _move, const Fitness & _fitness) + { + firstTime=false; + + if (_fitness > initial_fitness) + { + better_fitnesses.push_back(_fitness); + better_moves.push_back(_move); + } + + return true; + } + + //! The move selection + /*! + One the saved move is randomly chosen. + + \param _move the reference of the move that can be initialised by the function. + \param _fitness the reference of the fitness that can be initialised by the function. + */ + void operator () (M & _move, Fitness & _fitness) + { + unsigned int index; + + index=0; + + if( (better_fitnesses.size()==0) || (better_moves.size()==0) ) + { + if(firstTime) + { + throw std::runtime_error("[moRandImprSelect.h]: no move or/and no fitness already saved, update has to be called first."); + } + return; + } + + index = rng.random (better_fitnesses.size ()); + + _move = better_moves[index]; + _fitness = better_fitnesses[index]; + } + + private: + + //! Fitness of the current solution. + Fitness initial_fitness; + + //! Candidate fitnesse vector. + std::vector < Fitness > better_fitnesses; + + //! Candidate move vector. + std::vector < M > better_moves; + + //! Indicate if update has been called or not. + bool firstTime; +}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moRandMove.h b/trunk/paradiseo-old-mo/src/moRandMove.h new file mode 100755 index 000000000..0ed46072a --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moRandMove.h @@ -0,0 +1,49 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moRandMove_h +#define _moRandMove_h + +#include + +//! Random move generator +/*! + Only a description... An object that herits from this class needs to be designed in order to use a moSA. +*/ +template < class M > +class moRandMove:public eoUF < M &, void > +{}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moSA.h b/trunk/paradiseo-old-mo/src/moSA.h new file mode 100755 index 000000000..8506f799e --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moSA.h @@ -0,0 +1,163 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moSA_h +#define _moSA_h + +#include +#include +#include +#include +#include +#include + +//! Simulated Annealing (SA) +/*! + Class that describes a Simulated Annealing algorithm. +*/ +template < class M > +class moSA:public moAlgo < typename M::EOType > +{ + //! Alias for the type + typedef typename M::EOType EOT; + + //! Alias for the fitness + typedef typename EOT::Fitness Fitness; + + public: + + //! SA constructor + /*! + All the boxes used by a SA need to be given. + + \param _random_move_generator The move generator (generally randomly). + \param _incremental_evaluation The (generally) efficient evaluation function + \param _continue The stopping criterion. + \param _initial_temperature The initial temperature. + \param _cooling_schedule The cooling schedule, describes how the temperature is modified. + \param _full_evaluation The full evaluation function. + */ + moSA (moRandMove < M > & _random_move_generator, moMoveIncrEval < M > & _incremental_evaluation, + moSolContinue < EOT > & _continue, double _initial_temperature, moCoolingSchedule & _cooling_schedule, + eoEvalFunc < EOT > & _full_evaluation): + random_move_generator(_random_move_generator), incremental_evaluation(_incremental_evaluation), + continu(_continue), initial_temperature(_initial_temperature), + cooling_schedule(_cooling_schedule), full_evaluation(_full_evaluation) + {} + + //! function that launches the SA algorithm. + /*! + As a moTS or a moHC, the SA can be used for HYBRIDATION in an evolutionary algorithm. + + \param _solution A solution to improve. + \return TRUE. + */ + bool operator ()(EOT & _solution) + { + Fitness incremental_fitness, delta_fit; + EOT best_solution; + double temperature; + M move; + + if (_solution.invalid()) + { + full_evaluation (_solution); + } + + temperature = initial_temperature; + + best_solution = _solution; + + do + { + continu.init (); + + do + { + random_move_generator(move); + + incremental_fitness = incremental_evaluation (move, _solution); + + delta_fit = incremental_fitness - _solution.fitness (); + + if( (_solution.fitness() > incremental_fitness ) && (exp (delta_fit / temperature) > 1.0) ) + { + delta_fit = -delta_fit; + } + + if ( (incremental_fitness > _solution.fitness()) || (rng.uniform () < exp (delta_fit / temperature)) ) + { + move(_solution); + _solution.fitness(incremental_fitness); + + // Updating the best solution found until now ? + if ( _solution.fitness() > best_solution.fitness() ) + { + best_solution = _solution; + } + } + + } + while ( continu (_solution) ); + } + while ( cooling_schedule (temperature) ); + + _solution = best_solution; + + return true; + } + + private: + + //! A move generator (generally randomly) + moRandMove < M > & random_move_generator; + + //! A (generally) efficient evaluation function. + moMoveIncrEval < M > & incremental_evaluation; + + //! Stopping criterion before temperature update + moSolContinue < EOT > & continu; + + //! Initial temperature + double initial_temperature; + + //! The cooling schedule + moCoolingSchedule & cooling_schedule; + + //! A full evaluation function. + eoEvalFunc < EOT > & full_evaluation; +}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moSimpleMoveTabuList.h b/trunk/paradiseo-old-mo/src/moSimpleMoveTabuList.h new file mode 100755 index 000000000..e7f51c032 --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moSimpleMoveTabuList.h @@ -0,0 +1,154 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moSimpleMoveTabuList_h +#define _moSimpleMoveTabuList_h + +#include +#include + +#include + +//! Class describing a move tabu list with a limited memory. +template +class moSimpleMoveTabuList: public moTabuList < M > +{ + public: + + //! Alias for the type + typedef typename M::EOType EOT; + + //! Alias for an iterator of a move list. + typedef typename std::list::iterator moveIterator; + + //! Constructor + /* + \param _size The maximum size of the move tabu list. + */ + moSimpleMoveTabuList(unsigned int _memory_maximum_size): memory_maximum_size(_memory_maximum_size), memory_size(0) + {} + + //! Function that indicates if, in a given state, the _move is tabu or not. + /*! + \param _move A given moMove. + \param _solution A solution. + \return true or false. + */ + bool operator () (const M & _move, const EOT & _solution) + { + moveIterator it; + //code only used to avoid warning because _solution is not used in this function. + EOT solution=(EOT)_solution; + + it=tabuList.begin(); + // The code is !(*it)==_move instead of (*it)!=_move because people designing their specific move representation + // will write the "==" operator (I hope) but not necessary the "!=" operator. + while ( it!=tabuList.end() && !((*it)==_move) ) + { + it++; + } + + return it!=tabuList.end(); + } + + void add(const M & _move, const EOT & _solution) + { + //code only used to avoid warning because _solution is not used in this function. + const EOT solution(_solution); + + if (memory_size!=0) + { + // Useful in the case of a move has been kept thanks to the moAspirCrit. + // In this case, the move can already be in the tabuList. + removeMove(_move); + } + + tabuList.push_back(_move); + + if (memory_size == memory_maximum_size) + { + tabuList.erase(tabuList.begin()); + } + else + { + memory_size++; + } + } + + void update () + { + //nothing to do + } + + void init () + { + //nothing to do + } + + private: + + //! Procedure that removes a given move from the tabu list (if it is into, else do nothing). + /*! + \param _move A given moMove. + */ + void removeMove(const M & _move) + { + moveIterator it; + + it=tabuList.begin(); + // The code is !(*it)==_move instead of (*it)!=_move because people designing their specific move representation + // will write the "==" operator (I hope) but not necessary the "!=" operator. + while ( it!=tabuList.end() && (!((*it)==_move) )) + { + it++; + } + + if (it!=tabuList.end()) + { + tabuList.erase(it); + } + } + + //! The maximum size of the tabu list. + unsigned int memory_maximum_size; + + //! The current size of the tabu list. + unsigned int memory_size; + + //! The move tabu list. + std::list tabuList; +}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moSimpleSolutionTabuList.h b/trunk/paradiseo-old-mo/src/moSimpleSolutionTabuList.h new file mode 100755 index 000000000..f00a1523e --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moSimpleSolutionTabuList.h @@ -0,0 +1,160 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moSimpleSolutionTabuList_h +#define _moSimpleSolutionTabuList_h + +#include +#include + +#include + +//! Class describing a solution tabu list with limited length. +template +class moSimpleSolutionTabuList: public moTabuList < M > +{ + public: + + //! Alias for the type + typedef typename M::EOType EOT; + + //! Alias for an iterator of a solution list. + typedef typename std::list::iterator solutionIterator; + + //! Constructor + /*! + \param _memory_maximum_size The maximum size of the solution tabu list. + */ + moSimpleSolutionTabuList(unsigned int _memory_maximum_size): memory_maximum_size(_memory_maximum_size), memory_size(0) + {} + + //! Function that indicates if, in a given state, the _move is tabu or not. + /*! + \param _move A given moMove. + \param _solution A solution. + \return true or false. + */ + bool operator () (const M & _move, const EOT & _solution) + { + M move((M)_move); + EOT solution((EOT)_solution); + + solutionIterator it; + + move(solution); + + it=tabuList.begin(); + // The code is !(*it)==_solution instead of (*it)!=_solution because people designing their specific solution representation + // will write the "==" operator (I hope) but not necessary the "!=" operator. + while (it!=tabuList.end()&&(!((*it)==solution))) + { + it++; + } + + return it!=tabuList.end(); + } + + void add (const M & _move, const EOT & _solution) + { + M move=(M)_move; + EOT solution=(EOT) _solution; + + move(solution); + + if (memory_size!=0) + { + // Useful in the case of a solution has been kept thanks to the moAspirCrit. + // In this case, the solution can already be in the tabuList. + removeSolution(_solution); + } + + tabuList.push_back(_solution); + + if (memory_size == memory_maximum_size) + { + tabuList.erase(tabuList.begin()); + } + else + { + memory_size++; + } + } + + void update () + { + //nothing to do + } + + void init () + { + //nothing to do + } + + private: + + //! Procedure that removes a given solution from the tabu list (if it is into, else does nothing). + /*! + \param _solution A given solution. + */ + void removeSolution(const EOT & _solution) + { + solutionIterator it; + + it=tabuList.begin(); + // The code is !(*it)==_solution instead of (*it)!=_solution because people designing their specific solution representation + // will write the "==" operator (I hope) but not necessary the "!=" operator. + while ( it!=tabuList.end() && !((*it)==_solution) ) + { + it++; + } + + if (it!=tabuList.end()) + { + tabuList.erase(it); + memory_size--; + } + } + + //! The maximum size of the tabu list. + unsigned int memory_maximum_size; + + //! The current size of the tabu list. + unsigned int memory_size; + + //! The solution tabu list. + std::list tabuList; +}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moSolContinue.h b/trunk/paradiseo-old-mo/src/moSolContinue.h new file mode 100755 index 000000000..eb4c72cc0 --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moSolContinue.h @@ -0,0 +1,58 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moSolContinue_h +#define _moSolContinue_h + +#include +#include + +//! Class that describes a stop criterion for a solution-based heuristic + +/*! + It allows to add an initialisation procedure to an object that is a unary function (eoUF). +*/ +template < class EOT > +class moSolContinue:public eoUF < const EOT &, bool > +{ + public: + //! Procedure which initialises all that the stop criterion needs + /*! + Generally, it allocates some data structures or initialises some counters. + */ + virtual void init () = 0; +}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moSteadyFitSolContinue.h b/trunk/paradiseo-old-mo/src/moSteadyFitSolContinue.h new file mode 100644 index 000000000..ff79bdb17 --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moSteadyFitSolContinue.h @@ -0,0 +1,142 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moSteadyFitSolContinue_h +#define _moSteadyFitSolContinue_h + +#include + +//! One possible stopping criterion for a solution-based heuristic. +/*! + The stop criterion corresponds to a maximum number of iterations without improvement (after a minimum number of iterations). +*/ +template < class EOT > +class moSteadyFitSolContinue:public moSolContinue < EOT > +{ + public: + + //! Alias for the fitness. + typedef typename EOT::Fitness Fitness; + + //! Basic constructor. + /*! + \param _maxNumberOfIterations The number of iterations to reach before looking for the fitness. + \param _maxNumberOfIterationWithoutImprovement The number of iterations without fitness improvement to reach for stop. + */ + moSteadyFitSolContinue (unsigned int _maxNumberOfIterations, unsigned int _maxNumberOfIterationWithoutImprovement) + : maxNumberOfIterations (_maxNumberOfIterations), maxNumberOfIterationsWithoutImprovement(_maxNumberOfIterationWithoutImprovement), + maxNumberOfIterationsReached(false), firstFitnessSaved(true), counter(0) + {} + + //! Function that activates the stopping criterion. + /*! + Indicates if the fitness has not been improved since a number of iterations (after a minimum of iterations). + + \param _solution the current solution. + \return true or false. + */ + bool operator () (const EOT & _solution) + { + if (!maxNumberOfIterationsReached) + { + maxNumberOfIterationsReached=((++counter)==maxNumberOfIterations); + if (maxNumberOfIterationsReached) + { + std::cout << "[moSteadyFitSolContinue.h]: Done the minimum number of iterations [" << counter << "]." << std::endl; + } + return true; + } + + if (_solution.invalid()) + { + throw std::runtime_error("[moSteadyFitSolContinue.h]: The current solution has not been evaluated."); + } + + if (firstFitnessSaved) + { + fitness=_solution.fitness(); + counter=0; + firstFitnessSaved=false; + return true; + } + + counter++; + + if ( _solution.fitness() > fitness ) + { + fitness=_solution.fitness(); + counter=0; + } + + if (counter==maxNumberOfIterationsWithoutImprovement) + { + std::cout << "[moSteadyFitSolContinue.h]: Done [" << counter << "] iterations without improvement." << std::endl; + } + return counter!=maxNumberOfIterationsWithoutImprovement; + } + + //! Procedure which allows to initialise the stuff needed. + /*! + It can be also used to reinitialize the counter all the needed things. + */ + void init () + { + maxNumberOfIterationsReached=false; + counter=0; + firstFitnessSaved=true; + } + + private: + + //! Maximum number of iterations before considering the fitness. + unsigned int maxNumberOfIterations; + + //! Maximum number of iterations without improvement allowed. + unsigned int maxNumberOfIterationsWithoutImprovement; + + //! Flag that indicates that the maxNumberIteration have been reached. + bool maxNumberOfIterationsReached; + + //! Flag that this is the first time that the fitness is used. + bool firstFitnessSaved; + + //! Current Fitness. + Fitness fitness; + + //! The iteration couter. + unsigned int counter; +}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moTA.h b/trunk/paradiseo-old-mo/src/moTA.h new file mode 100644 index 000000000..e963c88ed --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moTA.h @@ -0,0 +1,160 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2008-2009 + (C) OPAC Team, LIFL, 2002-2008 + + Salma Mesmoudi + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moTA_h +#define _moTA_h + +#include +#include +#include +#include +#include +#include + +//! Threshold Accepting (TA) +/*! + Class that describes a Threshold Accepting algorithm. +*/ +template < class M > +class moTA:public moAlgo < typename M::EOType > +{ + //! Alias for the type + typedef typename M::EOType EOT; + + //! Alias for the fitness + typedef typename EOT::Fitness Fitness; + + + public: + + //! TA constructor + /*! + All the boxes used by a TA need to be given. It is equivalent to a SA object. + + \param _random_move_generator The move generator (generally randomly). + \param _incremental_evaluation The (generally) efficient evaluation function + \param _continue The stopping criterion. + \param _initial_threshold The initial threshold. + \param _cooling_schedule The cooling schedule, describes how the temperature is modified. + \param _full_evaluation The full evaluation function. + */ + moTA (moRandMove < M > & _random_move_generator, moMoveIncrEval < M > & _incremental_evaluation, + moSolContinue < EOT > & _continue, double _initial_threshold, moCoolingSchedule & _cooling_schedule, + eoEvalFunc < EOT > & _full_evaluation): + random_move_generator(_random_move_generator), incremental_evaluation(_incremental_evaluation), + continu(_continue), initial_threshold(_initial_threshold), + cooling_schedule(_cooling_schedule), full_evaluation(_full_evaluation) + {} + + //! function that launches the TA algorithm. + /*! + As a moSA the TA can be used for HYBRIDATION in an evolutionary algorithm. + + \param _solution A solution to improve. + \return TRUE. + */ + bool operator ()(EOT & _solution) + { + Fitness incremental_fitness, delta_fit; + EOT best_solution; + double threshold; + M move; + + if (_solution.invalid()) + { + full_evaluation (_solution); + } + + threshold = initial_threshold; + + best_solution = _solution; + + do + { + continu.init (); + + do + { + random_move_generator(move); + + incremental_fitness = incremental_evaluation (move, _solution); + + delta_fit = incremental_fitness - _solution.fitness (); + + if ( threshold > delta_fit) + + { + move(_solution); + _solution.fitness(incremental_fitness); + + // Updating the best solution found until now ? + if ( _solution.fitness() > best_solution.fitness() ) + { + best_solution = _solution; + } + } + + } + while ( continu (_solution)); + } + while ( cooling_schedule (threshold) ); + + _solution = best_solution; + + return true; + } + + private: + + //! A move generator (generally randomly) + moRandMove < M > & random_move_generator; + + //! A (generally) efficient evaluation function. + moMoveIncrEval < M > & incremental_evaluation; + + //! Stopping criterion before threshold update + moSolContinue < EOT > & continu; + + //! Initial temperature + double initial_threshold; + + //! The cooling schedule + moCoolingSchedule & cooling_schedule; + + //! A full evaluation function. + eoEvalFunc < EOT > & full_evaluation; +}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moTS.h b/trunk/paradiseo-old-mo/src/moTS.h new file mode 100755 index 000000000..1aa5fb451 --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moTS.h @@ -0,0 +1,163 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moTS_h +#define _moTS_h + +#include + +#include +#include +#include + +//! Tabu Search (TS) +/*! + Generic algorithm that describes a tabu search. +*/ +template < class M > +class moTS:public moAlgo < typename M::EOType > +{ + //!Alias for the type + typedef typename M::EOType EOT; + + //!Alias for the fitness + typedef typename EOT::Fitness Fitness; + + public: + + //!Constructor of a moTS specifying all the boxes + /*! + In this constructor, a moTSMoveLoopExpl is instanciated. + + \param _move_initializer The move initializer. + \param _next_move_generator The neighbourhood explorer. + \param _incremental_evaluation The (generally) efficient evaluation. + \param _tabu_list The tabu list. + \param _aspiration_criterion An aspiration criterion. + \param _continue The stopping criterion. + \param _full_evaluation A full evaluation function. + */ + moTS (moMoveInit < M > & _move_initializer, moNextMove < M > & _next_move_generator, + moMoveIncrEval < M > & _incremental_evaluation, moTabuList < M > & _tabu_list, + moAspirCrit < M > & _aspiration_criterion, moSolContinue < EOT > & _continue, + eoEvalFunc < EOT > & _full_evaluation): + move_explorer (new moTSMoveLoopExpl < M >(_move_initializer, _next_move_generator, _incremental_evaluation, + _tabu_list,_aspiration_criterion) ), + continu (_continue), full_evaluation (_full_evaluation), move_explorer_memory_allocation(true) + {} + + //! Constructor with less parameters + /*! + The explorer is given in the parameters. + + \param _move_explorer The explorer (generally different that a moTSMoveLoopExpl). + \param _continue The stopping criterion. + \param _full_evaluation A full evaluation function. + */ + moTS (moMoveExpl < M > & _move_explorer, moSolContinue < EOT > & _continue, eoEvalFunc < EOT > & _full_evaluation): + move_explorer (&_move_explorer), continu (_continue), full_evaluation (_full_evaluation), move_explorer_memory_allocation(false) + {} + + //! Destructor + ~moTS() + { + if(move_explorer_memory_allocation) + { + delete(move_explorer); + } + } + + //! Function which launchs the Tabu Search + /*! + Algorithm of the tabu search. + As a moSA or a moHC, it can be used for HYBRIDATION in an evolutionary algorithm. + For security a lock (pthread_mutex_t) is closed during the algorithm. + + \param _solution a solution to improve. + \return TRUE. + */ + bool operator ()(EOT & _solution) + { + M move; + + EOT best_solution, new_solution; + + if ( _solution.invalid () ) + { + full_evaluation (_solution); + } + + best_solution=_solution; + + // code used for avoiding warning because new_solution is indirectly initialized by move_expl. + new_solution=_solution; + + continu.init (); + + do + { + (*move_explorer) (_solution, new_solution); + + // Updating the best solution found until now ? + if (new_solution.fitness() > best_solution.fitness()) + { + best_solution = new_solution; + } + + _solution = new_solution; + } + while ( continu (_solution) ); + + _solution = best_solution; + + return true; + } + + private: + + //! Neighborhood explorer + moMoveExpl < M > * move_explorer; + + //! Stop criterion + moSolContinue < EOT > & continu; + + //! Full evaluation function + eoEvalFunc < EOT > & full_evaluation; + + //! Indicate if the memory has been allocated for the move_explorer. + bool move_explorer_memory_allocation; +}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moTSMoveLoopExpl.h b/trunk/paradiseo-old-mo/src/moTSMoveLoopExpl.h new file mode 100755 index 000000000..9e78f85fe --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moTSMoveLoopExpl.h @@ -0,0 +1,165 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moTSMoveLoopExpl_h +#define _moTSMoveLoopExpl_h + +#include +#include +#include +#include +#include +#include +#include +#include + +//! Explorer for a Tabu Search algorithm +/*! + It is used by a moTS. +*/ +template < class M > +class moTSMoveLoopExpl:public moMoveLoopExpl < M > +{ + //!Alias for the type + typedef typename M::EOType EOT; + + //!Alias for the fitness + typedef typename M::EOType::Fitness Fitness; + + public: + + //!Constructor + /*! + \param _move_initializer The move initializer. + \param _next_move_generator The neighbourhood explorer. + \param _incremental_evaluation A (generally) efficient evaluation. + \param _tabu_list The tabu list. + \param _aspiration_criterion An aspiration criterion. + */ + moTSMoveLoopExpl (moMoveInit < M > & _move_initializer, moNextMove < M > & _next_move_generator, + moMoveIncrEval < M > & _incremental_evaluation, moTabuList < M > & _tabu_list, + moAspirCrit < M > & _aspiration_criterion): + move_initializer(_move_initializer), next_move_generator(_next_move_generator), incremental_evaluation(_incremental_evaluation), + tabu_list(_tabu_list), aspiration_criterion(_aspiration_criterion) + { + tabu_list.init (); + aspiration_criterion.init (); + } + + //!Procedure which lauches the exploration + /*! + The exploration continues while the chosen move is not in the tabu list + or the aspiration criterion is true. If these 2 conditions are not true, the + exploration stops if the move selector update function returns false. + + \param _old_solution the initial solution + \param _new_solution the new solution + */ + void operator () (const EOT & _old_solution, EOT & _new_solution) + { + M move, best_move; + Fitness fitness, best_move_fitness; + + bool move_is_tabu, aspiration_criterion_is_verified, selection_update_is_ok, has_next_move; + + if( _old_solution.invalid() ) + { + throw std::runtime_error("[moTSMoveLoopExpl.h]: The current solution has not been evaluated."); + } + + //At the begining, the new solution is equivalent to the old one. + _new_solution=(EOT)_old_solution; + + // Restarting the exploration of of the neighborhood ! + move_initializer (move, _old_solution); + + move_selection.init( _old_solution.fitness() ); + + selection_update_is_ok=true; + + do + { + fitness = incremental_evaluation(move, _old_solution); + + move_is_tabu = tabu_list(move, _old_solution); + + aspiration_criterion_is_verified = aspiration_criterion(move, fitness); + + if( !move_is_tabu || aspiration_criterion_is_verified ) + { + selection_update_is_ok = move_selection.update(move, fitness); + } + + has_next_move = next_move_generator(move, _old_solution); + } + while( has_next_move && selection_update_is_ok ); + + move_selection(best_move, best_move_fitness); + + // Apply the best move. + best_move(_new_solution); + + // The fitness is set to avoid an additionnal fitness computation. + _new_solution.fitness(best_move_fitness); + + // Removing moves that are no more tabu. + tabu_list.update (); + + // Updating the tabu list + tabu_list.add(best_move, _new_solution); + } + + private: + + //! Move initialisation + moMoveInit < M > & move_initializer; + + //! Neighborhood explorer + moNextMove < M > & next_move_generator; + + //! Efficient evaluation + moMoveIncrEval < M > & incremental_evaluation; + + //! Move selector + moBestImprSelect < M > move_selection; + + //! Tabu list + moTabuList < M > & tabu_list; + + //! Aspiration criterion + moAspirCrit < M > & aspiration_criterion; +}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moTabuList.h b/trunk/paradiseo-old-mo/src/moTabuList.h new file mode 100755 index 000000000..8a254edad --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moTabuList.h @@ -0,0 +1,75 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moTabuList_h +#define _moTabuList_h + +#include + +//! Class describing a tabu list that a moTS uses. +/*! + It is only a description, does nothing... A new object that herits from this class has to be defined in order + to be used in a moTS. +*/ +template < class M > class moTabuList: public eoBF < const M &, const typename M::EOType &, bool > +{ + public: + + //! Alias for the type + typedef typename M::EOType EOT; + + //! Procedure to add a move in the tabu list + /*! + The two parameters have not to be modified so they are constant parameters. + + \param _move a new tabu move. + \param _solution the origianl solution associated to this move. + */ + virtual void add(const M & _move, const EOT & _solution) = 0; + + //! Procedure that updates the tabu list content. + /*! + Generally, a counter associated to each saved move is decreased by one. + */ + virtual void update () = 0; + + //! Procedure which initialises the tabu list. + /*! + Can be useful if the data structure needs to be allocated before being used. + */ + virtual void init () = 0; +}; + +#endif diff --git a/trunk/paradiseo-old-mo/src/moVNS.h b/trunk/paradiseo-old-mo/src/moVNS.h new file mode 100644 index 000000000..f25a45f7d --- /dev/null +++ b/trunk/paradiseo-old-mo/src/moVNS.h @@ -0,0 +1,131 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Salma Mesmoudi (salma.mesmoudi@inria.fr), Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr + */ + +#ifndef _moVNS_h +#define _moVNS_h + +#include + +//! Variable Neighbors Search (VNS) +/*! + Class which describes the algorithm for a Variable Neighbors Search. +*/ + +template < class EOT> +class moVNS : public moAlgo < EOT> +{ + //! Alias for the fitness. + typedef typename EOT::Fitness Fitness; + + public: + + //! Generic constructor + /*! + Generic constructor using a moExpl + + \param _explorer Vector of Neighborhoods. + \param _full_evaluation The evaluation function. + */ + moVNS(moExpl< EOT> & _explorer, eoEvalFunc < EOT> & _full_evaluation): explorer(_explorer), full_evaluation(_full_evaluation) {} + + + //! Function which launches the VNS + /*! + The VNS has to improve a current solution. + + \param _solution a current solution to improve. + \return true. + */ + bool operator()(EOT & _solution) + { + bool change; + unsigned int i; + + EOT solution_prime, solution_second; + EOT solution_initial=_solution; + + change=false; + i=0; + explorer.setCurrentExplorer(i); + + while( i solution_initial.fitness() ) + { + solution_initial=solution_second; + change=true; + if(i!= 0) + { + i=0; + explorer.setCurrentExplorer(i); + } + } + else + { + i++; + if( i & explorer; + + //!The full evaluation function + eoEvalFunc & full_evaluation; +}; + +#endif diff --git a/trunk/paradiseo-old-mo/test/CMakeLists.txt b/trunk/paradiseo-old-mo/test/CMakeLists.txt new file mode 100644 index 000000000..4a98f0f7a --- /dev/null +++ b/trunk/paradiseo-old-mo/test/CMakeLists.txt @@ -0,0 +1,93 @@ +############################################################################### +## +## CMakeLists file for ParadisEO-MO/test +## +############################################################################### + + +###################################################################################### +### 1) Include the sources +###################################################################################### + +INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src) +INCLUDE_DIRECTORIES(${ParadisEO-MO_SOURCE_DIR}/src) +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) + +###################################################################################### + + +###################################################################################### +### 2) Specify where CMake can find the libraries +###################################################################################### + +LINK_DIRECTORIES(${EO_BIN_DIR}/lib ${ParadisEO-MO_BINARY_DIR}/lib) + +###################################################################################### + + + +###################################################################################### +### 3) Define your targets and link the librairies +###################################################################################### + +SET (TEST_LIST t-moBestImprSelect + t-moFirstImprSelect + t-moFitComparator + t-moFitSolContinue + t-moGenSolContinue + t-moGeometricCoolingSchedule + t-moHC + t-moHC_2 + t-moHCMoveLoopExpl + t-moILS + t-moILS_HC + t-moILS_TS + t-moILS_SA + t-moImprBestFitAspirCrit + t-moItRandNextMove + t-moLinearCoolingSchedule + t-moLSCheckPoint + t-moNoAspirCrit + t-moNoFitImprSolContinue + t-moRandImprSelect + t-moSA + t-moSimpleMoveTabuList + t-moSimpleSolutionTabuList + t-moSteadyFitSolContinue + t-moTS + t-moTS_2 + t-moTSMoveLoopExpl + t-moTA + t-moVNS + ) + +FOREACH (test ${TEST_LIST}) + SET ("T_${test}_SOURCES" "${test}.cpp") +ENDFOREACH (test) + + +IF(ENABLE_MINIMAL_CMAKE_TESTING) + SET (MIN_TEST_LIST t-moHC) + FOREACH (mintest ${MIN_TEST_LIST}) + SET ("T_${mintest}_SOURCES" "${mintest}.cpp") + ADD_EXECUTABLE(${mintest} ${T_${mintest}_SOURCES}) + ADD_TEST(${mintest} ${mintest}) + ENDFOREACH (mintest) + +ELSEIF(ENABLE_CMAKE_TESTING) + + # Add the tests + FOREACH (test ${TEST_LIST}) + ADD_EXECUTABLE(${test} ${T_${test}_SOURCES}) + ADD_TEST(${test} ${test}) + ENDFOREACH (test) + + # Link the librairies + FOREACH (test ${TEST_LIST}) + TARGET_LINK_LIBRARIES(${test} ga es eoutils eo) + ENDFOREACH (test) + +ENDIF(ENABLE_MINIMAL_CMAKE_TESTING) + +###################################################################################### + diff --git a/trunk/paradiseo-old-mo/test/t-moBestImprSelect.cpp b/trunk/paradiseo-old-mo/test/t-moBestImprSelect.cpp new file mode 100644 index 000000000..63a05902a --- /dev/null +++ b/trunk/paradiseo-old-mo/test/t-moBestImprSelect.cpp @@ -0,0 +1,108 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- +// t-moBestImprSelect.cpp +//----------------------------------------------------------------------------- + +#include // EO +#include // MO + +using std::cout; +using std::endl; + +//----------------------------------------------------------------------------- + +typedef EO solution; + +class testMove : public moMove +{ +public : + void operator () (solution & _solution) + { + _solution=_solution; + } +} ; + +//----------------------------------------------------------------------------- + +int +main() +{ + std::string test_result, test_1, test_2; + int return_value, value_1, value_2; + + unsigned int i, fitness; + + moBestImprSelect selection; + + solution solution; + + testMove move; + + cout << "[ moBestImprSelect ] ==> "; + + i=fitness=0; + + selection.init(0); + + test_1="KO"; + + try + { + selection(move, fitness); + } + catch(std::runtime_error e) + { + test_1="OK"; + } + + value_1=((test_1.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + test_2=((!selection.update(move, i))?"KO":"OK"); + value_2=((test_2.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + selection(move, fitness); + + move(solution); + + test_result=(((test_1.compare("OK")==0)&&(test_2.compare("OK")==0))?"OK":"KO"); + return_value=(((value_1==EXIT_SUCCESS)&&(value_2==EXIT_SUCCESS))?EXIT_SUCCESS:EXIT_FAILURE); + + cout << test_result << endl; + return return_value; +} + +//----------------------------------------------------------------------------- diff --git a/trunk/paradiseo-old-mo/test/t-moFirstImprSelect.cpp b/trunk/paradiseo-old-mo/test/t-moFirstImprSelect.cpp new file mode 100644 index 000000000..ba3b36af4 --- /dev/null +++ b/trunk/paradiseo-old-mo/test/t-moFirstImprSelect.cpp @@ -0,0 +1,96 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- +// t-moFirstImprSelect.cpp +//----------------------------------------------------------------------------- + +#include // EO +#include // MO + +using std::cout; +using std::endl; + +//----------------------------------------------------------------------------- + +typedef EO solution; + +class testMove : public moMove +{ +public : + void operator () (solution & _solution) + { + _solution=_solution; + } +} ; + +//----------------------------------------------------------------------------- + +int +main() +{ + std::string test_result; + int return_value; + unsigned int i, fitness; + + moFirstImprSelect selection; + + solution solution; + + testMove move; + + cout << "[ moFirstImprSelect ] ==> "; + + i=fitness=0; + + selection.init(10); + + while ( selection.update(move, i) && i<15 ) + { + i++; + } + + selection(move, fitness); + + move(solution); + + test_result=((fitness!=11)?"KO":"OK"); + return_value=((test_result.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + cout << test_result << endl; + return return_value; +} + +//----------------------------------------------------------------------------- diff --git a/trunk/paradiseo-old-mo/test/t-moFitComparator.cpp b/trunk/paradiseo-old-mo/test/t-moFitComparator.cpp new file mode 100644 index 000000000..59dc5b696 --- /dev/null +++ b/trunk/paradiseo-old-mo/test/t-moFitComparator.cpp @@ -0,0 +1,74 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- +// t-moFitComparator.cpp +//----------------------------------------------------------------------------- + +#include // EO +#include // MO + +using std::cout; +using std::endl; + +//----------------------------------------------------------------------------- + +typedef EO solution; + +//----------------------------------------------------------------------------- + +int +main() +{ + std::string test_result; + int return_value; + + solution sol1, sol2; + + moFitComparator comparator; + + sol1.fitness(0); + sol2.fitness(1); + + cout << "[ moFitComparator ] ==> "; + + test_result=((comparator(sol1,sol2))?"KO":"OK"); + return_value=((test_result.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + cout << test_result << endl; + return return_value; +} + +//----------------------------------------------------------------------------- diff --git a/trunk/paradiseo-old-mo/test/t-moFitSolContinue.cpp b/trunk/paradiseo-old-mo/test/t-moFitSolContinue.cpp new file mode 100644 index 000000000..6214a73b0 --- /dev/null +++ b/trunk/paradiseo-old-mo/test/t-moFitSolContinue.cpp @@ -0,0 +1,101 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- +// t-moFitSolContinue.cpp +//----------------------------------------------------------------------------- + +#include // EO +#include // MO + +using std::cout; +using std::endl; + +//----------------------------------------------------------------------------- + +typedef EO solution; + +//----------------------------------------------------------------------------- + +int +main() +{ + std::string test_result, test_1, test_2; + int return_value, value_1, value_2; + + unsigned int i; + + moFitSolContinue continu(10); + + solution solution; + + cout << "[ moFitSolContinue ] ==> "; + + continu.init(); + + test_1="KO"; + + try + { + continu(solution); + } + catch(std::runtime_error e) + { + test_1="OK"; + } + + value_1=((test_1.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + + + i=0; + solution.fitness(i); + while( continu(solution) ) + { + i++; + solution.fitness(i); + } + + test_2=((i!=10)?"KO":"OK"); + value_2=((test_2.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + test_result=(((test_1.compare("OK")==0)&&(test_2.compare("OK")==0))?"OK":"KO"); + return_value=(((value_1==EXIT_SUCCESS)&&(value_2==EXIT_SUCCESS))?EXIT_SUCCESS:EXIT_FAILURE); + + cout << test_result << endl; + return return_value; +} + +//----------------------------------------------------------------------------- diff --git a/trunk/paradiseo-old-mo/test/t-moGenSolContinue.cpp b/trunk/paradiseo-old-mo/test/t-moGenSolContinue.cpp new file mode 100644 index 000000000..367f274f3 --- /dev/null +++ b/trunk/paradiseo-old-mo/test/t-moGenSolContinue.cpp @@ -0,0 +1,92 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- +// t-moGenSolContinue.cpp +//----------------------------------------------------------------------------- + +#include // EO +#include // MO + +using std::cout; +using std::endl; + +//----------------------------------------------------------------------------- + +typedef EO solution; + +//----------------------------------------------------------------------------- + +int +main() +{ + std::string test_result, test_1, test_2; + int value_1, value_2, return_value; + + unsigned int i; + solution sol; + + moGenSolContinue continu(10); + + cout << "[ moGenSolContinue ] ==> "; + + i=0; + while( continu(sol) ) + { + i++; + } + + test_1=((i!=9)?"KO":"OK"); + value_1=((test_1.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + continu.init(); + + i=0; + while( continu(sol) ) + { + i++; + } + + test_2=((i!=9)?"KO":"OK"); + value_2=((test_2.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + test_result=(((test_1.compare("OK")==0)&&(test_2.compare("OK")==0))?"OK":"KO"); + return_value=(((value_1==EXIT_SUCCESS)&&(value_2==EXIT_SUCCESS))?EXIT_SUCCESS:EXIT_FAILURE); + + cout << test_result << endl; + return return_value; +} + +//----------------------------------------------------------------------------- diff --git a/trunk/paradiseo-old-mo/test/t-moGeometricCoolingSchedule.cpp b/trunk/paradiseo-old-mo/test/t-moGeometricCoolingSchedule.cpp new file mode 100644 index 000000000..d648945d4 --- /dev/null +++ b/trunk/paradiseo-old-mo/test/t-moGeometricCoolingSchedule.cpp @@ -0,0 +1,79 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- +// t-moExponentialCoolingSchedule.cpp +//----------------------------------------------------------------------------- + +#include // EO +#include // MO + +using std::cout; +using std::endl; + +//----------------------------------------------------------------------------- + + +//----------------------------------------------------------------------------- + +int +main() +{ + int return_value; + std::string test_result; + + unsigned int i; + double temperature; + + moGeometricCoolingSchedule coolingSchedule( 4.0, 0.5 ); + + temperature=10.0; + + cout << "[ moExponentialCoolingSchedule ] ==> "; + + i=0; + while( coolingSchedule(temperature) ) + { + i++; + } + + test_result=((i!=1)?"KO":"OK"); + return_value=((test_result.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + cout << test_result << endl; + return return_value; +} + +//----------------------------------------------------------------------------- diff --git a/trunk/paradiseo-old-mo/test/t-moHC.cpp b/trunk/paradiseo-old-mo/test/t-moHC.cpp new file mode 100644 index 000000000..bbcb90b55 --- /dev/null +++ b/trunk/paradiseo-old-mo/test/t-moHC.cpp @@ -0,0 +1,162 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- +// t-moHC.cpp +//----------------------------------------------------------------------------- + +#include // EO +#include // MO + +using std::cout; +using std::endl; + +//----------------------------------------------------------------------------- + +typedef EO solution; + +class testMove : public moMove +{ +public : + void operator () (solution & _solution) + { + solution sol=_solution; + } +} ; + +class testMoveInit : public moMoveInit +{ +public : + void operator () (testMove & _move, const solution & _solution) + { + testMove move=_move; + const solution sol(_solution); + } +} ; + +class testMoveNext : public moNextMove +{ +public : + bool operator () (testMove & _move, const solution & _solution) + { + testMove move=_move; + const solution sol(_solution); + + return false; + } +} ; + +class testMoveIncrEval : public moMoveIncrEval +{ +public : + unsigned int operator () (const testMove & _move, const solution & _solution) + { + const testMove move(_move); + const solution solution(_solution); + + return 2; + } +} ; + +class testMoveSelect : public moMoveSelect +{ +public : + void operator () (testMove & _move, unsigned int & _fitness) + { + testMove move; + + move=_move; + + _fitness=2; + } + + void init(const unsigned int & _fitness) + { + unsigned int fitness; + fitness=(unsigned int)_fitness; + } + + bool update(const testMove & _move, const unsigned int & _fitness) + { + testMove move; + unsigned int fitness; + + move=(testMove)_move; + fitness=(unsigned int)_fitness; + + return true; + } +} ; + +class solutionEval : public eoEvalFunc +{ +public : + void operator () (solution & _solution) + { + _solution.fitness(2); + } +} ; + + +//----------------------------------------------------------------------------- + +int +main() +{ + std::string test_result; + int return_value; + + solution solution; + + testMoveInit init; + testMoveNext next; + testMoveIncrEval incrEval; + testMoveSelect select; + solutionEval eval; + + moHC hc(init, next, incrEval, select, eval); + + cout << "[ moHC ] ==> "; + + hc(solution); + + test_result=((solution.fitness()!=2)?"KO":"OK"); + return_value=((test_result.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + cout << test_result << endl; + return return_value; +} + +//----------------------------------------------------------------------------- diff --git a/trunk/paradiseo-old-mo/test/t-moHCMoveLoopExpl.cpp b/trunk/paradiseo-old-mo/test/t-moHCMoveLoopExpl.cpp new file mode 100644 index 000000000..73de0ac85 --- /dev/null +++ b/trunk/paradiseo-old-mo/test/t-moHCMoveLoopExpl.cpp @@ -0,0 +1,170 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- +// t-moHCMoveLoopExpl.cpp +//----------------------------------------------------------------------------- + +#include // EO +#include // MO + +using std::cout; +using std::endl; + +//----------------------------------------------------------------------------- + +typedef EO solution; + +class testMove : public moMove +{ +public : + void operator () (solution & _solution) + { + solution sol=_solution; + } +} ; + +class testMoveInit : public moMoveInit +{ +public : + void operator () (testMove & _move, const solution & _solution) + { + testMove move=_move; + const solution sol(_solution); + } +} ; + +class testMoveNext : public moNextMove +{ +public : + bool operator () (testMove & _move, const solution & _solution) + { + testMove move=_move; + const solution sol(_solution); + + return false; + } +} ; + +class testMoveIncrEval : public moMoveIncrEval +{ +public : + unsigned int operator () (const testMove & _move, const solution & _solution) + { + const testMove move(_move); + const solution solution(_solution); + + return 2; + } +} ; + +class testMoveSelect : public moMoveSelect +{ +public : + void operator () (testMove & _move, unsigned int & _fitness) + { + testMove move; + + move=_move; + + _fitness=2; + } + + void init(const unsigned int & _fitness) + { + unsigned int fitness; + fitness=(unsigned int)_fitness; + } + + bool update(const testMove & _move, const unsigned int & _fitness) + { + testMove move; + unsigned int fitness; + + move=(testMove)_move; + fitness=(unsigned int)_fitness; + + return true; + } +} ; + +//----------------------------------------------------------------------------- + +int +main() +{ + std::string test_result, test_1, test_2; + int return_value, value_1, value_2; + + solution solution_1, solution_2; + + testMoveInit init; + testMoveNext next; + testMoveIncrEval incrEval; + testMoveSelect select; + + moHCMoveLoopExpl explorer(init, next, incrEval, select); + + cout << "[ moHCMoveLoopExpl ] ==> "; + + test_1="KO"; + + try + { + explorer(solution_1, solution_2); + } + catch(std::runtime_error e) + { + test_1="OK"; + } + + value_1=((test_1.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + solution_1.fitness(0); + solution_2.fitness(0); + + explorer(solution_1, solution_2); + + test_2=((solution_2.fitness()!=2)?"KO":"OK"); + value_2=((test_2.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + test_result=(((test_1.compare("OK")==0)&&(test_2.compare("OK")==0))?"OK":"KO"); + return_value=(((value_1==EXIT_SUCCESS)&&(value_2==EXIT_SUCCESS))?EXIT_SUCCESS:EXIT_FAILURE); + + cout << test_result << endl; + return return_value; +} + +//----------------------------------------------------------------------------- diff --git a/trunk/paradiseo-old-mo/test/t-moHC_2.cpp b/trunk/paradiseo-old-mo/test/t-moHC_2.cpp new file mode 100644 index 000000000..eecc80e60 --- /dev/null +++ b/trunk/paradiseo-old-mo/test/t-moHC_2.cpp @@ -0,0 +1,106 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- +// t-moHC_2.cpp +//----------------------------------------------------------------------------- + +#include // EO +#include // MO + +using std::cout; +using std::endl; + +//----------------------------------------------------------------------------- + +typedef EO solution; + +class testMove : public moMove +{ +public : + void operator () (solution & _solution) + { + solution sol=_solution; + } +} ; + +class testMoveExplorer : public moMoveExpl +{ +public : + void operator () (const solution & _solution_1, solution & _solution_2) + { + const solution sol(_solution_1); + + _solution_2.fitness(2); + } +}; + +class solutionEval : public eoEvalFunc +{ +public : + void operator () (solution & _solution) + { + _solution.fitness(0); + } +} ; + + +//----------------------------------------------------------------------------- + +int +main() +{ + std::string test_result; + int return_value; + + solution solution; + + solutionEval eval; + testMoveExplorer explorer; + + moHC hc(explorer, eval); + + cout << "[ moHC_2 ] ==> "; + + hc(solution); + + test_result=((solution.fitness()!=2)?"KO":"OK"); + return_value=((test_result.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + cout << test_result << endl; + return return_value; +} + +//----------------------------------------------------------------------------- diff --git a/trunk/paradiseo-old-mo/test/t-moILS.cpp b/trunk/paradiseo-old-mo/test/t-moILS.cpp new file mode 100644 index 000000000..bf8d75a87 --- /dev/null +++ b/trunk/paradiseo-old-mo/test/t-moILS.cpp @@ -0,0 +1,169 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- +// t-moILS.cpp +//----------------------------------------------------------------------------- + +#include // EO +#include // MO + +using std::cout; +using std::endl; + +//----------------------------------------------------------------------------- + +typedef EO solution; + +class testMove : public moMove +{ +public : + void operator () (solution & _solution) + { + solution sol=_solution; + } +} ; + +class solutionAlgo : public moAlgo +{ +public : + bool operator () (solution & _solution) + { + solution solution(_solution); + return true; + } +} ; + +class solutionContinue : public moSolContinue +{ +public : + solutionContinue(): counter(0) + {} + + bool operator () (const solution & _solution) + { + const solution sol(_solution); + + if(counter<2) + { + counter++; + return true; + } + return false; + } + + void init() + {} +private : + unsigned int counter; +} ; + +class solutionComparator : public moComparator +{ +public : + + solutionComparator() : counter(0) + {} + + bool operator () (const solution & _solution1 , const solution & _solution2) + { + const solution sol1(_solution1); + const solution sol2(_solution2); + + if(counter<2) + { + counter++; + return false; + } + + return true; + } +private : + unsigned int counter; +} ; + +class solutionPerturbation : public eoMonOp +{ +public : + bool operator () (solution & _solution) + { + _solution.fitness(2); + + return true; + } +} ; + +class solutionEval : public eoEvalFunc +{ +public : + void operator () (solution & _solution) + { + solution solution(_solution); + _solution.fitness(2); + } +} ; + +//----------------------------------------------------------------------------- + +int +main() +{ + std::string test_result; + int return_value; + + solution solution; + + solutionAlgo algorithm; + solutionContinue continu; + solutionComparator comparator; + solutionPerturbation perturbation; + solutionEval eval; + + moILS ils(algorithm, continu, comparator, perturbation, eval); + + cout << "[ moILS ] ==> "; + + solution.fitness(0); + + ils(solution); + + test_result=((solution.fitness()!=2)?"KO":"OK"); + return_value=((test_result.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + cout << test_result << endl; + return return_value; +} + +//----------------------------------------------------------------------------- diff --git a/trunk/paradiseo-old-mo/test/t-moILS_HC.cpp b/trunk/paradiseo-old-mo/test/t-moILS_HC.cpp new file mode 100644 index 000000000..98bf88cf0 --- /dev/null +++ b/trunk/paradiseo-old-mo/test/t-moILS_HC.cpp @@ -0,0 +1,211 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- +// t-moILS_HC.cpp +//----------------------------------------------------------------------------- + +#include // EO +#include // MO + +using std::cout; +using std::endl; + +//----------------------------------------------------------------------------- + +typedef EO solution; + +class testMove : public moMove +{ +public : + void operator () (solution & _solution) + { + solution sol=_solution; + } +} ; + +class testMoveInit : public moMoveInit +{ +public : + void operator () (testMove & _move, const solution & _solution) + { + testMove move=_move; + const solution sol(_solution); + } +} ; + +class testMoveNext : public moNextMove +{ +public : + bool operator () (testMove & _move, const solution & _solution) + { + testMove move=_move; + const solution sol(_solution); + + return false; + } +} ; + +class testMoveIncrEval : public moMoveIncrEval +{ +public : + unsigned int operator () (const testMove & _move, const solution & _solution) + { + const testMove move(_move); + const solution solution(_solution); + + return 2; + } +} ; + +class testMoveSelect : public moMoveSelect +{ +public : + void operator () (testMove & _move, unsigned int & _fitness) + { + testMove move; + + move=_move; + + _fitness=2; + } + + void init(const unsigned int & _fitness) + { + unsigned int fitness; + fitness=(unsigned int)_fitness; + } + + bool update(const testMove & _move, const unsigned int & _fitness) + { + testMove move; + unsigned int fitness; + + move=(testMove)_move; + fitness=(unsigned int)_fitness; + + return true; + } +} ; + +class solutionEval : public eoEvalFunc +{ +public : + void operator () (solution & _solution) + { + _solution.fitness(0); + } +} ; + +class solutionContinue : public moSolContinue +{ +public : + solutionContinue(): counter(0) + {} + + bool operator () (const solution & _solution) + { + const solution sol(_solution); + + if(counter==0) + { + counter++; + return true; + } + return false; + } + + void init() + {} +private : + unsigned int counter; +} ; + +class solutionComparator : public moComparator +{ +public : + bool operator () (const solution & _solution1 , const solution & _solution2) + { + const solution sol1(_solution1); + const solution sol2(_solution2); + + return true; + } +} ; + +class solutionPerturbation : public eoMonOp +{ +public : + bool operator () (solution & _solution) + { + _solution.fitness(2); + + return true; + } +} ; + +//----------------------------------------------------------------------------- + +int +main() +{ + std::string test_result; + int return_value; + + solution solution; + + testMoveInit init; + testMoveNext next; + testMoveIncrEval incrEval; + testMoveSelect select; + solutionEval eval; + solutionContinue continu; + solutionComparator comparator; + solutionPerturbation perturbation; + + moILS ils(init, next, incrEval, select, continu, comparator, perturbation, eval); + + cout << "[ moILS_HC ] ==> "; + + ils(solution); + + test_result=((solution.fitness()!=2)?"KO":"OK"); + return_value=((test_result.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + cout << test_result << endl; + return return_value; +} + +//----------------------------------------------------------------------------- diff --git a/trunk/paradiseo-old-mo/test/t-moILS_SA.cpp b/trunk/paradiseo-old-mo/test/t-moILS_SA.cpp new file mode 100644 index 000000000..4cbd940c6 --- /dev/null +++ b/trunk/paradiseo-old-mo/test/t-moILS_SA.cpp @@ -0,0 +1,190 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- +// t-moILS_SA.cpp +//----------------------------------------------------------------------------- + +#include // EO +#include // MO + +using std::cout; +using std::endl; + +//----------------------------------------------------------------------------- + +typedef EO solution; + +class testMove : public moMove +{ +public : + void operator () (solution & _solution) + { + solution sol=_solution; + } +} ; + +class testRandMove : public moRandMove +{ +public : + void operator () (testMove & _move) + { + _move=_move; + } +}; + +class testMoveIncrEval : public moMoveIncrEval +{ +public : + int operator () (const testMove & _move, const solution & _solution) + { + const testMove move(_move); + const solution solution(_solution); + + return 2; + } +} ; + +class testCooling : public moCoolingSchedule +{ +public : + bool operator () (double & _temperature) + { + double temperature; + temperature=_temperature; + + return false; + } +}; + +class solutionEval : public eoEvalFunc +{ +public : + void operator () (solution & _solution) + { + const solution solution(_solution); + } +} ; + +class solutionContinue : public moSolContinue +{ +public : + solutionContinue(): counter(0) + {} + + bool operator () (const solution & _solution) + { + const solution sol(_solution); + + if(counter==0) + { + counter++; + return true; + } + return false; + } + + void init() + {} +private : + unsigned int counter; +} ; + +class solutionComparator : public moComparator +{ +public : + + solutionComparator() : counter(0) + {} + + bool operator () (const solution & _solution1 , const solution & _solution2) + { + const solution solution1(_solution1); + const solution solution2(_solution2); + + return true; + } +private : + unsigned int counter; +} ; + +class solutionPerturbation : public eoMonOp +{ +public : + bool operator () (solution & _solution) + { + _solution.fitness(2); + + return true; + } +} ; + +//----------------------------------------------------------------------------- + +int +main() +{ + std::string test_result; + int return_value; + + solution solution; + + testRandMove rand; + testMoveIncrEval incrEval; + solutionContinue continu; + solutionContinue continu_2; + testCooling cooling; + solutionEval eval; + solutionComparator comparator; + solutionPerturbation perturbation; + + moILS ils(rand, incrEval, continu, 10.0, cooling, continu_2, comparator, perturbation, eval); + + cout << "[ moILS_SA ] ==> "; + + solution.fitness(0); + + eval(solution); + + ils(solution); + + test_result=((solution.fitness()!=2)?"KO":"OK"); + return_value=((test_result.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + cout << test_result << endl; + return return_value; +} + +//----------------------------------------------------------------------------- diff --git a/trunk/paradiseo-old-mo/test/t-moILS_TS.cpp b/trunk/paradiseo-old-mo/test/t-moILS_TS.cpp new file mode 100644 index 000000000..dc6c3f296 --- /dev/null +++ b/trunk/paradiseo-old-mo/test/t-moILS_TS.cpp @@ -0,0 +1,223 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- +// t-moILS_TS.cpp +//----------------------------------------------------------------------------- + +#include // EO +#include // MO + +using std::cout; +using std::endl; + +//----------------------------------------------------------------------------- + +typedef EO solution; + +class testMove : public moMove +{ +public : + void operator () (solution & _solution) + { + solution sol=_solution; + } +} ; + +class testMoveInit : public moMoveInit +{ +public : + void operator () (testMove & _move, const solution & _solution) + { + testMove move=_move; + const solution sol(_solution); + } +} ; + +class testMoveNext : public moNextMove +{ +public : + bool operator () (testMove & _move, const solution & _solution) + { + testMove move=_move; + const solution sol(_solution); + + return false; + } +} ; + +class testMoveIncrEval : public moMoveIncrEval +{ +public : + unsigned int operator () (const testMove & _move, const solution & _solution) + { + const testMove move(_move); + const solution solution(_solution); + + return 2; + } +} ; + +class testTabuList : public moTabuList +{ +public: + bool operator() (const testMove & _move, const solution & _solution) + { + const testMove move(_move); + const solution sol(_solution); + + return false; + } + + void add(const testMove & _move, const solution & _solution) + { + const testMove move(_move); + const solution sol(_solution); + } + + void update() + {} + + void init() + {} +}; + +class testAspirCrit : public moAspirCrit +{ +public: + bool operator() (const testMove & _move, const unsigned int & _fitness) + { + unsigned int fitness; + const testMove move(_move); + fitness=_fitness; + + return false; + } + + void init() + {} +}; + +class solutionContinue : public moSolContinue +{ +public : + solutionContinue(): counter(0) + {} + + bool operator () (const solution & _solution) + { + const solution sol(_solution); + + if(counter==0) + { + counter++; + return true; + } + return false; + } + + void init() + {} +private : + unsigned int counter; +} ; + +class solutionComparator : public moComparator +{ +public : + bool operator () (const solution & _solution1 , const solution & _solution2) + { + const solution sol1(_solution1); + const solution sol2(_solution2); + + return true; + } +} ; + +class solutionPerturbation : public eoMonOp +{ +public : + bool operator () (solution & _solution) + { + _solution.fitness(2); + + return true; + } +} ; + +class solutionEval : public eoEvalFunc +{ +public : + void operator () (solution & _solution) + { + _solution.fitness(0); + } +} ; + +//----------------------------------------------------------------------------- + +int +main() +{ + std::string test_result; + int return_value; + + solution solution; + + testMoveInit init; + testMoveNext next; + testMoveIncrEval incrEval; + testTabuList tabuList; + testAspirCrit aspirCrit; + solutionEval eval; + solutionContinue continu; + solutionContinue continu_2; + solutionComparator comparator; + solutionPerturbation perturbation; + + moILS ils(init, next, incrEval, tabuList, aspirCrit, continu, continu_2, comparator, perturbation, eval); + + cout << "[ moILS_TS ] ==> "; + + ils(solution); + + test_result=((solution.fitness()!=2)?"KO":"OK"); + return_value=((test_result.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + cout << test_result << endl; + return return_value; +} + +//----------------------------------------------------------------------------- diff --git a/trunk/paradiseo-old-mo/test/t-moImprBestFitAspirCrit.cpp b/trunk/paradiseo-old-mo/test/t-moImprBestFitAspirCrit.cpp new file mode 100644 index 000000000..121cc681a --- /dev/null +++ b/trunk/paradiseo-old-mo/test/t-moImprBestFitAspirCrit.cpp @@ -0,0 +1,109 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- +// t-moImprBestFitAspirCrit.cpp +//----------------------------------------------------------------------------- + +#include // EO +#include // MO + +using std::cout; +using std::endl; + +//----------------------------------------------------------------------------- + +typedef EO solution; + +class testMove : public moMove +{ +public : + void operator () (solution & _solution) + { + _solution=_solution; + } +} ; + +//----------------------------------------------------------------------------- + +int +main() +{ + std::string test_result, test_1, test_2; + int return_value, value_1, value_2; + + solution solution; + + unsigned int i; + + moImprBestFitAspirCrit aspirCriterion; + + testMove move; + + cout << "[ moImprBestFitAspirCrit ] ==> "; + + aspirCriterion(move, 10); + + i=0; + while ( !aspirCriterion(move,i) && i<15) + { + i++; + } + + test_1=((i!=11)?"KO":"OK"); + value_1=((test_1.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + aspirCriterion.init(); + aspirCriterion(move, i); + + i=0; + while ( !aspirCriterion(move,i) && i<15) + { + i++; + } + + move(solution); + + test_2=((i!=12)?"KO":"OK"); + value_2=((test_2.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + test_result=(((test_1.compare("OK")==0)&&(test_2.compare("OK")==0))?"OK":"KO"); + return_value=(((value_1==EXIT_SUCCESS)&&(value_2==EXIT_SUCCESS))?EXIT_SUCCESS:EXIT_FAILURE); + + cout << test_result << endl; + return return_value; +} + +//----------------------------------------------------------------------------- diff --git a/trunk/paradiseo-old-mo/test/t-moItRandNextMove.cpp b/trunk/paradiseo-old-mo/test/t-moItRandNextMove.cpp new file mode 100644 index 000000000..dbd5acffa --- /dev/null +++ b/trunk/paradiseo-old-mo/test/t-moItRandNextMove.cpp @@ -0,0 +1,114 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- +// t-moItRandNextMove.cpp +//----------------------------------------------------------------------------- + +#include // EO +#include // MO + +using std::cout; +using std::endl; + +//----------------------------------------------------------------------------- + +typedef EO solution; + +class testMove : public moMove +{ +public : + void operator () (solution & _solution) + { + _solution=_solution; + } +} ; + +class testRandMove : public moRandMove +{ +public : + void operator () (testMove & _move) + { + _move=_move; + } +}; + +//----------------------------------------------------------------------------- + +int +main() +{ + std::string test_result, test_1, test_2; + int value_1, value_2, return_value; + + unsigned int i; + + testMove move; + solution solution; + + testRandMove rand; + + moItRandNextMove next(rand, 10); + + cout << "[ moItRandNextMove ] ==> "; + + i=0; + while( next(move, solution) && i<15 ) + { + i++; + } + + test_1=((i!=11)?"KO":"OK"); + value_1=((test_1.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + i=0; + while( next(move, solution) && i<15 ) + { + i++; + } + + move(solution); + + test_2=((i!=11)?"KO":"OK"); + value_2=((test_2.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + test_result=(((test_1.compare("OK")==0)&&(test_2.compare("OK")==0))?"OK":"KO"); + return_value=(((value_1==EXIT_SUCCESS)&&(value_2==EXIT_SUCCESS))?EXIT_SUCCESS:EXIT_FAILURE); + + cout << test_result << endl; + return return_value; +} + +//----------------------------------------------------------------------------- diff --git a/trunk/paradiseo-old-mo/test/t-moLSCheckPoint.cpp b/trunk/paradiseo-old-mo/test/t-moLSCheckPoint.cpp new file mode 100644 index 000000000..190f92e9b --- /dev/null +++ b/trunk/paradiseo-old-mo/test/t-moLSCheckPoint.cpp @@ -0,0 +1,116 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- +// t-moLSCheckPoint.cpp +//----------------------------------------------------------------------------- + +#include // EO +#include // MO + +using std::cout; +using std::endl; + +//----------------------------------------------------------------------------- + +typedef EO solution; + +class testMove : public moMove +{ +public : + void operator () (solution & _solution) + { + _solution=_solution; + } +} ; + +class testBF : public eoBF +{ + void operator () (const testMove & _move, const testMove::EOType & _solution) + { + const testMove move(_move); + const testMove::EOType sol(_solution); + std::ofstream os("test.txt"); + os << "OK" << endl; + } +}; + +//----------------------------------------------------------------------------- + +int +main() +{ + std::string test_result, test_1, test_2; + int value_1, value_2, return_value; + + unsigned int i; + std::string result; + + testBF test; + moLSCheckPoint checkpoint; + + solution solution; + + testMove move; + + std::ifstream is; + + cout << "[ moLSCheckPoint ] ==> "; + + i=0; + + checkpoint.add(test); + checkpoint(move, solution); + + move(solution); + + is.open("test.txt"); + + test_1=((!is.is_open())?"KO":"OK"); + value_1=((test_1.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + is >> result; + + test_2=((result.compare("OK")!=0)?"KO":"OK"); + value_2=((test_2.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + test_result=(((test_1.compare("OK")==0)&&(test_2.compare("OK")==0))?"OK":"KO"); + return_value=(((value_1==EXIT_SUCCESS)&&(value_2==EXIT_SUCCESS))?EXIT_SUCCESS:EXIT_FAILURE); + + cout << test_result << endl; + return return_value; +} + +//----------------------------------------------------------------------------- diff --git a/trunk/paradiseo-old-mo/test/t-moLinearCoolingSchedule.cpp b/trunk/paradiseo-old-mo/test/t-moLinearCoolingSchedule.cpp new file mode 100644 index 000000000..76d264da2 --- /dev/null +++ b/trunk/paradiseo-old-mo/test/t-moLinearCoolingSchedule.cpp @@ -0,0 +1,79 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- +// t-moLinearCoolingSchedule.cpp +//----------------------------------------------------------------------------- + +#include // EO +#include // MO + +using std::cout; +using std::endl; + +//----------------------------------------------------------------------------- + + +//----------------------------------------------------------------------------- + +int +main() +{ + std::string test_result; + int return_value; + + unsigned int i; + double temperature; + + moLinearCoolingSchedule coolingSchedule( 1.0, 0.5 ); + + cout << "[ moLinearCoolingSchedule ] ==> "; + + temperature=2.0; + + i=0; + while( coolingSchedule(temperature) ) + { + i++; + } + + test_result=((i!=1)?"KO":"OK"); + return_value=((test_result.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + cout << test_result << endl; + return return_value; +} + +//----------------------------------------------------------------------------- diff --git a/trunk/paradiseo-old-mo/test/t-moNoAspirCrit.cpp b/trunk/paradiseo-old-mo/test/t-moNoAspirCrit.cpp new file mode 100644 index 000000000..2fe273f43 --- /dev/null +++ b/trunk/paradiseo-old-mo/test/t-moNoAspirCrit.cpp @@ -0,0 +1,85 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- +// t-moNoAspirCrit.cpp +//----------------------------------------------------------------------------- + +#include // EO +#include // MO + +using std::cout; +using std::endl; + +//----------------------------------------------------------------------------- + +typedef EO solution; + +class testMove : public moMove +{ +public : + void operator () (solution & _solution) + { + _solution=_solution; + } +} ; + +//----------------------------------------------------------------------------- + +int +main() +{ + std::string test_result; + int return_value; + + unsigned int i; + moNoAspirCrit aspirCriterion; + testMove move; + solution solution; + + cout << "[ moNoAspirCrit ] ==> "; + + move(solution); + + aspirCriterion.init(); + + test_result=((aspirCriterion(move, i))?"KO":"OK"); + return_value=((test_result.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + cout << test_result << endl; + return return_value; +} + +//----------------------------------------------------------------------------- diff --git a/trunk/paradiseo-old-mo/test/t-moNoFitImprSolContinue.cpp b/trunk/paradiseo-old-mo/test/t-moNoFitImprSolContinue.cpp new file mode 100644 index 000000000..653b39b61 --- /dev/null +++ b/trunk/paradiseo-old-mo/test/t-moNoFitImprSolContinue.cpp @@ -0,0 +1,101 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- +// t-moNoFitImprSolContinue.cpp +//----------------------------------------------------------------------------- + +#include // EO +#include // MO + +using std::cout; +using std::endl; + +//----------------------------------------------------------------------------- + +typedef EO solution; + +//----------------------------------------------------------------------------- + +int +main() +{ + std::string test_result, test_1, test_2; + int return_value, value_1, value_2; + + + unsigned int i; + + moNoFitImprSolContinue continu(10); + + solution solution; + + cout << "[ moNoFitImprSolContinue ] ==> "; + + continu.init(); + + test_1="KO"; + + try + { + continu(solution); + } + catch(std::runtime_error e) + { + test_1="OK"; + } + + value_1=((test_1.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + solution.fitness(0); + + i=0; + while( continu(solution) ) + { + i++; + solution.fitness(2); + } + + test_2=((i!=11)?"KO":"OK"); + value_2=((test_2.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + test_result=(((test_1.compare("OK")==0)&&(test_2.compare("OK")==0))?"OK":"KO"); + return_value=(((value_1==EXIT_SUCCESS)&&(value_2==EXIT_SUCCESS))?EXIT_SUCCESS:EXIT_FAILURE); + + cout << test_result << endl; + return return_value; +} + +//----------------------------------------------------------------------------- diff --git a/trunk/paradiseo-old-mo/test/t-moRandImprSelect.cpp b/trunk/paradiseo-old-mo/test/t-moRandImprSelect.cpp new file mode 100644 index 000000000..e44fe1039 --- /dev/null +++ b/trunk/paradiseo-old-mo/test/t-moRandImprSelect.cpp @@ -0,0 +1,115 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- +// t-moRandImprSelect.cpp +//----------------------------------------------------------------------------- + +#include // EO +#include // MO + +using std::cout; +using std::endl; + +//----------------------------------------------------------------------------- + +typedef EO solution; + +class testMove : public moMove +{ +public : + void operator () (solution & _solution) + { + _solution=_solution; + } +} ; + +//----------------------------------------------------------------------------- + +int +main() +{ + std::string test_result, test_1, test_2, test_3; + int value_1, value_2, value_3, return_value; + + unsigned int i; + + moRandImprSelect selection; + + solution solution; + + testMove move; + + cout << "[ moRandImprSelect ] ==> "; + + selection.init(0); + + test_1="KO"; + + i=0; + + try + { + selection(move, i); + } + catch(std::runtime_error e) + { + test_1="OK"; + } + + value_1=((test_1.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + move(solution); + + test_2=((!selection.update(move, i))?"KO":"OK"); + value_2=((test_2.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + selection(move, i); + + i++; + + test_3=((!selection.update(move, i))?"KO":"OK"); + value_3=((test_3.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + selection(move, i); + + test_result=(((test_1.compare("OK")==0)&&(test_2.compare("OK")==0)&&(test_3.compare("OK")==0))?"OK":"KO"); + return_value=(((value_1==EXIT_SUCCESS)&&(value_2==EXIT_SUCCESS)&&(value_3==EXIT_SUCCESS))?EXIT_SUCCESS:EXIT_FAILURE); + + cout << test_result << endl; + return return_value; +} + +//----------------------------------------------------------------------------- diff --git a/trunk/paradiseo-old-mo/test/t-moSA.cpp b/trunk/paradiseo-old-mo/test/t-moSA.cpp new file mode 100644 index 000000000..6a0d117f0 --- /dev/null +++ b/trunk/paradiseo-old-mo/test/t-moSA.cpp @@ -0,0 +1,168 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- +// t-moSA.cpp +//----------------------------------------------------------------------------- + +#include // EO +#include // MO + +using std::cout; +using std::endl; + +//----------------------------------------------------------------------------- + +typedef EO solution; + +class testMove : public moMove +{ +public : + void operator () (solution & _solution) + { + solution sol=_solution; + } +} ; + +class testRandMove : public moRandMove +{ +public : + void operator () (testMove & _move) + { + _move=_move; + } +}; + +class testMoveIncrEval : public moMoveIncrEval +{ +public : + + testMoveIncrEval() : counter(0) + {} + + int operator () (const testMove & _move, const solution & _solution) + { + const testMove move(_move); + const solution solution(_solution); + + if(counter==0) + { + counter++; + return 2; + } + return 0; + } +private : + unsigned int counter; +} ; + +class solutionContinue : public moSolContinue +{ +public : + + solutionContinue() : counter(0) + {} + + bool operator () (const solution & _solution) + { + const solution sol(_solution); + + if(counter==0) + { + counter++; + return true; + } + + return false; + } + + void init() + {} +private : + unsigned int counter; +} ; + +class testCooling : public moCoolingSchedule +{ +public : + bool operator () (double & _temperature) + { + double temperature; + temperature=_temperature; + + return false; + } +}; + +class solutionEval : public eoEvalFunc +{ +public : + void operator () (solution & _solution) + { + _solution.fitness(0); + } +} ; + + +//----------------------------------------------------------------------------- + +int +main() +{ + std::string test_result; + int return_value; + + solution solution; + + testRandMove rand; + testMoveIncrEval incrEval; + solutionContinue continu; + testCooling cooling; + solutionEval eval; + + moSA sa(rand, incrEval, continu, 10.0, cooling, eval); + + cout << "[ moSA ] ==> "; + + sa(solution); + + test_result=((solution.fitness()!=2)?"KO":"OK"); + return_value=((test_result.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + cout << test_result << endl; + return return_value; +} + +//----------------------------------------------------------------------------- diff --git a/trunk/paradiseo-old-mo/test/t-moSimpleMoveTabuList.cpp b/trunk/paradiseo-old-mo/test/t-moSimpleMoveTabuList.cpp new file mode 100644 index 000000000..e9937bdac --- /dev/null +++ b/trunk/paradiseo-old-mo/test/t-moSimpleMoveTabuList.cpp @@ -0,0 +1,104 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- +// t-moSimpleMoveTabuList.cpp +//----------------------------------------------------------------------------- + +#include // EO +#include // MO + +using std::cout; +using std::endl; + +//----------------------------------------------------------------------------- + +typedef EO solution; + +class testMove : public moMove +{ +public : + testMove(unsigned int _value): value(_value) + {} + + void operator () (solution & _solution) + { + _solution=_solution; + } + + bool operator == (const testMove & _move) + { + return (value==_move.value); + } +private : + unsigned int value; +} ; + +//----------------------------------------------------------------------------- + +int +main() +{ + std::string test_result; + int return_value; + + moSimpleMoveTabuList tabuList(1); + + solution solution; + + testMove move_1(1), move_2(2); + + cout << "[ moSimpleMoveTabuList ] ==> "; + + tabuList.init(); + tabuList.update(); + + tabuList.add(move_1, solution); + + tabuList(move_2, solution); + + move_1(solution); + + tabuList.add(move_2, solution); + tabuList.add(move_2, solution); + + test_result=((tabuList(move_1, solution))?"KO":"OK"); + return_value=((test_result.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + cout << test_result << endl; + return return_value; +} + +//----------------------------------------------------------------------------- diff --git a/trunk/paradiseo-old-mo/test/t-moSimpleSolutionTabuList.cpp b/trunk/paradiseo-old-mo/test/t-moSimpleSolutionTabuList.cpp new file mode 100644 index 000000000..85d63a5cb --- /dev/null +++ b/trunk/paradiseo-old-mo/test/t-moSimpleSolutionTabuList.cpp @@ -0,0 +1,106 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- +// t-moSimpleSolutionTabuList.cpp +//----------------------------------------------------------------------------- + +#include // EO +#include // MO + +using std::cout; +using std::endl; + +//----------------------------------------------------------------------------- + +class solution : public EO +{ +public: + solution(unsigned int _value): value(_value) + {} + + bool operator == (const solution & _solution) + { + return (value==_solution.value); + } + +private: + unsigned int value; +}; + +class testMove : public moMove +{ +public : + void operator () (solution & _solution) + { + solution solution(_solution); + } +}; + +//----------------------------------------------------------------------------- + +int +main() +{ + std::string test_result; + int return_value; + + moSimpleSolutionTabuList tabuList(1); + + solution solution_1(1), solution_2(2); + + testMove move; + + cout << "[ moSimpleSolutionTabuList ] ==> "; + + tabuList.init(); + tabuList.update(); + + tabuList.add(move, solution_1); + + move(solution_1); + + tabuList.add(move, solution_2); + + tabuList.add(move, solution_2); + + test_result=((tabuList(move, solution_1))?"KO":"OK"); + return_value=((test_result.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + cout << test_result << endl; + return return_value; +} + +//----------------------------------------------------------------------------- diff --git a/trunk/paradiseo-old-mo/test/t-moSteadyFitSolContinue.cpp b/trunk/paradiseo-old-mo/test/t-moSteadyFitSolContinue.cpp new file mode 100644 index 000000000..d70630102 --- /dev/null +++ b/trunk/paradiseo-old-mo/test/t-moSteadyFitSolContinue.cpp @@ -0,0 +1,108 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- +// t-moSteadyFitSolContinue.cpp +//----------------------------------------------------------------------------- + +#include // EO +#include // MO + +using std::cout; +using std::endl; + +//----------------------------------------------------------------------------- + +typedef EO solution; + +//----------------------------------------------------------------------------- + +int +main() +{ + std::string test_result, test_1, test_2; + int return_value, value_1, value_2; + + unsigned int i; + solution solution_1, solution_2; + + moSteadyFitSolContinue continu(10,10); + + cout << "[ moSteadyFitSolContinue ] ==> "; + + continu.init(); + + i=0; + solution_1.fitness(i); + while( continu(solution_1) && i<50) + { + i++; + + if(i<11) + { + solution_1.fitness(i); + } + + if(i==11) + { + test_1="KO"; + try + { + continu(solution_2); + } + catch(std::runtime_error e) + { + test_1="OK"; + } + value_1=((test_1.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + } + + if(i==15) + { + solution_1.fitness(i); + } + } + + test_2=((i!=25)?"KO":"OK"); + value_2=((test_2.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + test_result=(((test_1.compare("OK")==0)&&(test_2.compare("OK")==0))?"OK":"KO"); + return_value=(((value_1==EXIT_SUCCESS)&&(value_2==EXIT_SUCCESS))?EXIT_SUCCESS:EXIT_FAILURE); + + cout << test_result << endl; + return return_value; +} + +//----------------------------------------------------------------------------- diff --git a/trunk/paradiseo-old-mo/test/t-moTA.cpp b/trunk/paradiseo-old-mo/test/t-moTA.cpp new file mode 100644 index 000000000..2bfd91e2b --- /dev/null +++ b/trunk/paradiseo-old-mo/test/t-moTA.cpp @@ -0,0 +1,168 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2007-2008 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Salma Mesmoudi +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- +// t-moTA.cpp +//----------------------------------------------------------------------------- + +#include // EO +#include // MO + +using std::cout; +using std::endl; + +//----------------------------------------------------------------------------- + +typedef EO solution; + +class testMove : public moMove +{ +public : + void operator () (solution & _solution) + { + solution sol=_solution; + } +} ; + +class testRandMove : public moRandMove +{ +public : + void operator () (testMove & _move) + { + _move=_move; + } +}; + +class testMoveIncrEval : public moMoveIncrEval +{ +public : + + testMoveIncrEval() : counter(0) + {} + + int operator () (const testMove & _move, const solution & _solution) + { + const testMove move(_move); + const solution solution(_solution); + + if(counter==0) + { + counter++; + return 2; + } + return 0; + } +private : + unsigned int counter; +} ; + +class solutionContinue : public moSolContinue +{ +public : + + solutionContinue() : counter(0) + {} + + bool operator () (const solution & _solution) + { + const solution sol(_solution); + + if(counter==0) + { + counter++; + return true; + } + + return false; + } + + void init() + {} +private : + unsigned int counter; +} ; + +class testCooling : public moCoolingSchedule +{ +public : + bool operator () (double & _threeshold) + { + double threeshold; + threeshold=_threeshold; + + return false; + } +}; + +class solutionEval : public eoEvalFunc +{ +public : + void operator () (solution & _solution) + { + _solution.fitness(0); + } +} ; + + +//----------------------------------------------------------------------------- + +int +main() +{ + std::string test_result; + int return_value; + + solution solution; + + testRandMove rand; + testMoveIncrEval incrEval; + solutionContinue continu; + testCooling cooling; + solutionEval eval; + + moTA ta(rand, incrEval, continu, 10.0, cooling, eval); + + cout << "[ moTA ] ==> "; + + ta(solution); + + test_result=((solution.fitness()!=2)?"KO":"OK"); + return_value=((test_result.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + cout << test_result << endl; + return return_value; +} + +//----------------------------------------------------------------------------- diff --git a/trunk/paradiseo-old-mo/test/t-moTS.cpp b/trunk/paradiseo-old-mo/test/t-moTS.cpp new file mode 100644 index 000000000..96908ef27 --- /dev/null +++ b/trunk/paradiseo-old-mo/test/t-moTS.cpp @@ -0,0 +1,188 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- +// t-moTS.cpp +//----------------------------------------------------------------------------- + +#include // EO +#include // MO + +using std::cout; +using std::endl; + +//----------------------------------------------------------------------------- + +typedef EO solution; + +class testMove : public moMove +{ +public : + void operator () (solution & _solution) + { + solution sol=_solution; + } +} ; + +class testMoveInit : public moMoveInit +{ +public : + void operator () (testMove & _move, const solution & _solution) + { + testMove move=_move; + const solution sol(_solution); + } +} ; + +class testMoveNext : public moNextMove +{ +public : + bool operator () (testMove & _move, const solution & _solution) + { + testMove move(_move); + const solution sol(_solution); + + return false; + } +} ; + +class testMoveIncrEval : public moMoveIncrEval +{ +public : + unsigned int operator () (const testMove & _move, const solution & _solution) + { + const testMove move(_move); + const solution solution(_solution); + + return 2; + } +} ; + +class testTabuList : public moTabuList +{ +public: + bool operator() (const testMove & _move, const solution & _solution) + { + const testMove move(_move); + const solution sol(_solution); + + return false; + } + + void add(const testMove & _move, const solution & _solution) + { + const testMove move(_move); + const solution sol(_solution); + } + + void update() + {} + + void init() + {} +}; + +class testAspirCrit : public moAspirCrit +{ +public: + bool operator() (const testMove & _move, const unsigned int & _fitness) + { + unsigned int fitness; + const testMove move(_move); + fitness=_fitness; + + return false; + } + + void init() + {} +}; + +class solutionContinue : public moSolContinue +{ +public : + bool operator () (const solution & _solution) + { + const solution sol(_solution); + + return false; + } + + void init() + {} +} ; + +class solutionEval : public eoEvalFunc +{ +public : + void operator () (solution & _solution) + { + _solution.fitness(2); + } +} ; + + +//----------------------------------------------------------------------------- + +int +main() +{ + std::string test_result; + int return_value; + + solution solution; + + testMoveInit init; + testMoveNext next; + testMoveIncrEval incrEval; + testTabuList tabuList; + testAspirCrit aspirCrit; + solutionContinue continu; + solutionEval eval; + + moTS ts(init, next, incrEval, tabuList, aspirCrit, continu, eval); + + cout << "[ moTS ] ==> "; + + ts(solution); + + test_result=((solution.fitness()!=2)?"KO":"OK"); + return_value=((test_result.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + cout << test_result << endl; + return return_value; +} + +//----------------------------------------------------------------------------- diff --git a/trunk/paradiseo-old-mo/test/t-moTSMoveLoopExpl.cpp b/trunk/paradiseo-old-mo/test/t-moTSMoveLoopExpl.cpp new file mode 100644 index 000000000..75aaaeebc --- /dev/null +++ b/trunk/paradiseo-old-mo/test/t-moTSMoveLoopExpl.cpp @@ -0,0 +1,180 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- +// t-moTSMoveLoopExpl.cpp +//----------------------------------------------------------------------------- + +#include // EO +#include // MO + +using std::cout; +using std::endl; + +//----------------------------------------------------------------------------- + +typedef EO solution; + +class testMove : public moMove +{ +public : + void operator () (solution & _solution) + { + solution sol=_solution; + } +} ; + +class testMoveInit : public moMoveInit +{ +public : + void operator () (testMove & _move, const solution & _solution) + { + testMove move=_move; + const solution sol(_solution); + } +} ; + +class testMoveNext : public moNextMove +{ +public : + bool operator () (testMove & _move, const solution & _solution) + { + testMove move(_move); + const solution sol(_solution); + + return false; + } +} ; + +class testMoveIncrEval : public moMoveIncrEval +{ +public : + unsigned int operator () (const testMove & _move, const solution & _solution) + { + const testMove move(_move); + const solution solution(_solution); + + return 2; + } +} ; + +class testTabuList : public moTabuList +{ +public: + bool operator() (const testMove & _move, const solution & _solution) + { + const testMove move(_move); + const solution sol(_solution); + + return false; + } + + void add(const testMove & _move, const solution & _solution) + { + const testMove move(_move); + const solution sol(_solution); + } + + void update() + {} + + void init() + {} +}; + +class testAspirCrit : public moAspirCrit +{ +public: + bool operator() (const testMove & _move, const unsigned int & _fitness) + { + unsigned int fitness; + const testMove move(_move); + fitness=_fitness; + + return false; + } + + void init() + {} +}; + +//----------------------------------------------------------------------------- + +int +main() +{ + std::string test_result, test_1, test_2; + int return_value, value_1, value_2; + + solution solution_1 ,solution_2; + + testMoveInit init; + testMoveNext next; + testMoveIncrEval incrEval; + testTabuList tabuList; + testAspirCrit aspirCrit; + + moTSMoveLoopExpl explorer(init, next, incrEval, tabuList, aspirCrit); + + cout << "[ moTSMoveLoopExpl ] ==> "; + + test_1="KO"; + + try + { + explorer(solution_1, solution_2); + } + catch(std::runtime_error e) + { + test_1="OK"; + } + + value_1=((test_1.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + solution_1.fitness(0); + + explorer(solution_1, solution_2); + + test_2=((solution_2.fitness()!=2)?"KO":"OK"); + value_2=((test_2.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + test_result=(((test_1.compare("OK")==0)&&(test_2.compare("OK")==0))?"OK":"KO"); + return_value=(((value_1==EXIT_SUCCESS)&&(value_2==EXIT_SUCCESS))?EXIT_SUCCESS:EXIT_FAILURE); + + cout << test_result << endl; + return return_value; +} + +//----------------------------------------------------------------------------- diff --git a/trunk/paradiseo-old-mo/test/t-moTS_2.cpp b/trunk/paradiseo-old-mo/test/t-moTS_2.cpp new file mode 100644 index 000000000..eebaa532b --- /dev/null +++ b/trunk/paradiseo-old-mo/test/t-moTS_2.cpp @@ -0,0 +1,123 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- +// t-moTS_2.cpp +//----------------------------------------------------------------------------- + +#include // EO +#include // MO + +using std::cout; +using std::endl; + +//----------------------------------------------------------------------------- + +typedef EO solution; + +class testMove : public moMove +{ +public : + void operator () (solution & _solution) + { + solution sol=_solution; + } +} ; + +class testMoveExplorer : public moMoveExpl +{ +public : + void operator () (const solution & _solution_1, solution & _solution_2) + { + const solution solution(_solution_1); + _solution_2.fitness(2); + } +}; + +class solutionContinue : public moSolContinue +{ +public : + bool operator () (const solution & _solution) + { + const solution sol(_solution); + + return false; + } + + void init() + {} +} ; + +class solutionEval : public eoEvalFunc +{ +public : + void operator () (solution & _solution) + { + _solution.fitness(0); + } +} ; + + +//----------------------------------------------------------------------------- + +int +main() +{ + std::string test_result; + int return_value; + + solution solution; + + testMoveExplorer explorer; + solutionContinue continu; + solutionEval eval; + testMove move; + + moTS ts(explorer, continu, eval); + + cout << "[ moTS_2 ] ==> "; + + ts(solution); + + move(solution); + + test_result=((solution.fitness()!=2)?"KO":"OK"); + return_value=((test_result.compare("KO")==0)?EXIT_FAILURE:EXIT_SUCCESS); + + cout << test_result << endl; + return return_value; +} + +//----------------------------------------------------------------------------- diff --git a/trunk/paradiseo-old-mo/test/t-moVNS.cpp b/trunk/paradiseo-old-mo/test/t-moVNS.cpp new file mode 100644 index 000000000..36fadfca0 --- /dev/null +++ b/trunk/paradiseo-old-mo/test/t-moVNS.cpp @@ -0,0 +1,140 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2007-2008 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Salma Mesmoudi (salma.mesmoudi@inria.fr), Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) +* Jeremie Humeau (jeremie.humeau@inria.fr) +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- +// t-moVNS.cpp +//----------------------------------------------------------------------------- + +#include // EO +#include // MO +#include + +using std::cout; +using std::endl; + +//----------------------------------------------------------------------------- + +typedef EO solution; +typedef eoScalarFitness< float, std::greater > tspFitness ; +typedef eoVector Route ; + +int cpt=0; +int tableau[7]={10.0, 9.0, 8.0, 8.0, 7.0, 7.0, 7.0}; + +class testMove : public moMove +{ +public : + + void operator () (solution & _solution) + { + solution sol=_solution; + } +} ; + + +class solutionAlgo : public moAlgo +{ +public : + bool operator () (solution & _solution) + { + solution solution(_solution); + return true; + } +} ; + +class Voisinage : public eoMonOp +{ +public : + bool operator () (Route & _solution) + { + _solution.invalidate(); + //_solution.fitness(); + + return true; + } +} ; + +class Explorer : public moExpl +{ +public: + Explorer(eoMonOp & expl): moExpl( expl) + { + + } +}; + +class solutionEval : public eoEvalFunc +{ +public : + void operator () (Route & _solution) + { + _solution.fitness(tableau[cpt]); + cpt++; + } +}; + +//----------------------------------------------------------------------------- + +int +main() +{ + std::string test_result; + + //solution solution; + Route so ; + + Voisinage sol1; + Voisinage sol2; + Explorer explorer(sol1); + explorer.addExplorer(sol2); + solutionEval eval; + + moVNS vns(explorer, eval); + + cout << "[moVNS] ==> "; + + so.fitness(20.0); + + vns(so); + + assert(so.fitness()==7.0); + + cout << "OK" << endl; + + return EXIT_SUCCESS; +} + +//----------------------------------------------------------------------------- diff --git a/trunk/paradiseo-old-mo/tutorial/CMakeLists.txt b/trunk/paradiseo-old-mo/tutorial/CMakeLists.txt new file mode 100644 index 000000000..6b1468059 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/CMakeLists.txt @@ -0,0 +1,222 @@ +IF(COMMAND cmake_policy) + CMAKE_POLICY(SET CMP0003 NEW) +ENDIF(COMMAND cmake_policy) +###################################################################################### +### 1) Definitions (required for tsp target) +###################################################################################### + +SET(TSP_SRC_DIR ${MO_SRC_DIR}/tutorial/examples/tsp CACHE PATH "TSP src directory") +SET(TSP_BIN_DIR ${MO_BIN_DIR}/tutorial/examples/tsp CACHE PATH "TSP binary directory") + +SET(FUNCTION_SRC_DIR ${MO_SRC_DIR}/tutorial/examples/function CACHE PATH "FUNCTION src directory") +SET(FUNCTION_BIN_DIR ${MO_BIN_DIR}/tutorial/examples/function CACHE PATH "FUNCTION binary directory") + +###################################################################################### + +###################################################################################### +### 2) How to manage copy of benchs ? +###################################################################################### + +IF(ENABLE_CMAKE_EXAMPLE OR CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005" OR CMAKE_GENERATOR STREQUAL "Visual Studio 9 2008") + SET(BENCH_LIST + berlin52.tsp + eil101.tsp + pr2392.tsp + rl5915.tsp + usa13509.tsp + ) + + FOREACH (bench ${BENCH_LIST}) + EXECUTE_PROCESS( + COMMAND ${CMAKE_COMMAND} -E copy_if_different + ${MO_SRC_DIR}/tutorial/examples/tsp/benchs/${bench} + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/${bench} + ) + ENDFOREACH (bench) + EXECUTE_PROCESS( + COMMAND ${CMAKE_COMMAND} -E copy_if_different + ${MO_SRC_DIR}/tutorial/Lesson1/param + ${MO_BIN_DIR}/tutorial/Lesson1/param + COMMAND ${CMAKE_COMMAND} -E copy_if_different + ${MO_SRC_DIR}/tutorial/Lesson2/param + ${MO_BIN_DIR}/tutorial/Lesson2/param + COMMAND ${CMAKE_COMMAND} -E copy_if_different + ${MO_SRC_DIR}/tutorial/Lesson3/param + ${MO_BIN_DIR}/tutorial/Lesson3/param + COMMAND ${CMAKE_COMMAND} -E copy_if_different + ${MO_SRC_DIR}/tutorial/Lesson4/param + ${MO_BIN_DIR}/tutorial/Lesson4/param + COMMAND ${CMAKE_COMMAND} -E copy_if_different + ${MO_SRC_DIR}/tutorial/Lesson5/param + ${MO_BIN_DIR}/tutorial/Lesson5/param + COMMAND ${CMAKE_COMMAND} -E copy_if_different + ${MO_SRC_DIR}/tutorial/HybridLesson/param + ${MO_BIN_DIR}/tutorial/HybridLesson/param + ) +ENDIF(ENABLE_CMAKE_EXAMPLE OR CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005" OR CMAKE_GENERATOR STREQUAL "Visual Studio 9 2008") + +###################################################################################### +### 3) Where must cmake go now ? +###################################################################################### + +MACRO(ADD_COMMANDS_MO) + ADD_CUSTOM_COMMAND( + OUTPUT + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/berlin52.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/eil101.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/pr2392.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/rl5915.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/usa13509.tsp + COMMAND ${CMAKE_COMMAND} -E copy_if_different + ${MO_SRC_DIR}/tutorial/examples/tsp/benchs/berlin52.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/berlin52.tsp + COMMAND ${CMAKE_COMMAND} -E copy_if_different + ${MO_SRC_DIR}/tutorial/examples/tsp/benchs/eil101.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/eil101.tsp + COMMAND ${CMAKE_COMMAND} -E copy_if_different + ${MO_SRC_DIR}/tutorial/examples/tsp/benchs/pr2392.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/pr2392.tsp + COMMAND ${CMAKE_COMMAND} -E copy_if_different + ${MO_SRC_DIR}/tutorial/examples/tsp/benchs/rl5915.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/rl5915.tsp + COMMAND ${CMAKE_COMMAND} -E copy_if_different + ${MO_SRC_DIR}/tutorial/examples/tsp/benchs/usa13509.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/usa13509.tsp + ) + ADD_CUSTOM_COMMAND( + OUTPUT ${MO_BIN_DIR}/tutorial/Lesson1/param + COMMAND ${CMAKE_COMMAND} -E copy_if_different + ${MO_SRC_DIR}/tutorial/Lesson1/param + ${MO_BIN_DIR}/tutorial/Lesson1 + ) + ADD_CUSTOM_COMMAND( + OUTPUT ${MO_BIN_DIR}/tutorial/Lesson2/param + COMMAND ${CMAKE_COMMAND} -E copy_if_different + ${MO_SRC_DIR}/tutorial/Lesson2/param + ${MO_BIN_DIR}/tutorial/Lesson2 + ) + ADD_CUSTOM_COMMAND( + OUTPUT ${MO_BIN_DIR}/tutorial/Lesson3/param + COMMAND ${CMAKE_COMMAND} -E copy_if_different + ${MO_SRC_DIR}/tutorial/Lesson3/param + ${MO_BIN_DIR}/tutorial/Lesson3 + ) + ADD_CUSTOM_COMMAND( + OUTPUT ${MO_BIN_DIR}/tutorial/Lesson4/param + COMMAND ${CMAKE_COMMAND} -E copy_if_different + ${MO_SRC_DIR}/tutorial/Lesson4/param + ${MO_BIN_DIR}/tutorial/Lesson4 + ) + ADD_CUSTOM_COMMAND( + OUTPUT ${MO_BIN_DIR}/tutorial/Lesson5/param + COMMAND ${CMAKE_COMMAND} -E copy_if_different + ${MO_SRC_DIR}/tutorial/Lesson5/param + ${MO_BIN_DIR}/tutorial/Lesson5 + ) + ADD_CUSTOM_COMMAND( + OUTPUT ${MO_BIN_DIR}/tutorial/Lesson6/param + COMMAND ${CMAKE_COMMAND} -E copy_if_different + ${MO_SRC_DIR}/tutorial/HybridLesson/param + ${MO_BIN_DIR}/tutorial/HybridLesson + ) +ENDMACRO(ADD_COMMANDS_MO) + +MACRO(ADD_TARGET_MO n) + IF(${n} STREQUAL "lesson1") + ADD_CUSTOM_TARGET(lesson1 DEPENDS + ${MO_BIN_DIR}/tutorial/Lesson1/param + ${MO_BIN_DIR}/tutorial/Lesson1/hill_climbing + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/berlin52.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/eil101.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/pr2392.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/rl5915.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/usa13509.tsp + ) + ELSEIF(${n} STREQUAL "lesson2") + ADD_CUSTOM_TARGET(lesson2 DEPENDS + ${MO_BIN_DIR}/tutorial/Lesson2/param + ${MO_BIN_DIR}/tutorial/Lesson2/tabu_search + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/berlin52.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/eil101.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/pr2392.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/rl5915.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/usa13509.tsp + ) + ELSEIF(${n} STREQUAL "lesson3") + ADD_CUSTOM_TARGET(lesson3 DEPENDS + ${MO_BIN_DIR}/tutorial/Lesson3/param + ${MO_BIN_DIR}/tutorial/Lesson3/simulated_annealing + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/berlin52.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/eil101.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/pr2392.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/rl5915.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/usa13509.tsp + ) + ELSEIF(${n} STREQUAL "lesson4") + ADD_CUSTOM_TARGET(lesson4 DEPENDS + ${MO_BIN_DIR}/tutorial/Lesson4/param + ${MO_BIN_DIR}/tutorial/Lesson4/iterated_local_search + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/berlin52.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/eil101.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/pr2392.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/rl5915.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/usa13509.tsp + ) + ELSEIF(${n} STREQUAL "lesson5") + ADD_CUSTOM_TARGET(lesson5 DEPENDS + ${MO_BIN_DIR}/tutorial/Lesson5/param + ${MO_BIN_DIR}/tutorial/Lesson5/variable_neighborhood_search + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/berlin52.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/eil101.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/pr2392.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/rl5915.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/usa13509.tsp + ) + ELSEIF(${n} STREQUAL "hybridlesson") + ADD_CUSTOM_TARGET(hybridlesson DEPENDS + ${MO_BIN_DIR}/tutorial/HybridLesson/param + ${MO_BIN_DIR}/tutorial/HybridLesson/hybrid_ga + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/berlin52.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/eil101.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/pr2392.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/rl5915.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/usa13509.tsp + ) + ELSEIF(${n} STREQUAL "install") + ADD_CUSTOM_TARGET(install DEPENDS + ${MO_BIN_DIR}/tutorial/Lesson1/param + ${MO_BIN_DIR}/tutorial/Lesson2/param + ${MO_BIN_DIR}/tutorial/Lesson3/param + ${MO_BIN_DIR}/tutorial/Lesson4/param + ${MO_BIN_DIR}/tutorial/Lesson5/param + ${MO_BIN_DIR}/tutorial/HybridLesson/param + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/berlin52.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/eil101.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/pr2392.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/rl5915.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/usa13509.tsp + ) + ELSEIF(${n} STREQUAL "benchs") + ADD_CUSTOM_TARGET(benchs DEPENDS + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/berlin52.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/eil101.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/pr2392.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/rl5915.tsp + ${MO_BIN_DIR}/tutorial/examples/tsp/benchs/usa13509.tsp + ) + ENDIF(${n} STREQUAL "lesson1") +ENDMACRO(ADD_TARGET_MO) + +IF(NOT CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005" AND NOT CMAKE_GENERATOR STREQUAL "Visual Studio 9 2008") + ADD_COMMANDS_MO() + ADD_TARGET_MO(install) + ADD_TARGET_MO(benchs) +ENDIF(NOT CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005" AND NOT CMAKE_GENERATOR STREQUAL "Visual Studio 9 2008") + +ADD_SUBDIRECTORY(examples) +ADD_SUBDIRECTORY(Lesson1) +ADD_SUBDIRECTORY(Lesson2) +ADD_SUBDIRECTORY(Lesson3) +ADD_SUBDIRECTORY(Lesson4) +ADD_SUBDIRECTORY(Lesson5) +ADD_SUBDIRECTORY(HybridLesson) diff --git a/trunk/paradiseo-old-mo/tutorial/HybridLesson/CMakeLists.txt b/trunk/paradiseo-old-mo/tutorial/HybridLesson/CMakeLists.txt new file mode 100644 index 000000000..31bdbf4e4 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/HybridLesson/CMakeLists.txt @@ -0,0 +1,65 @@ +###################################################################################### +### 1) Include the sources +###################################################################################### + +INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src) +INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src/utils) +INCLUDE_DIRECTORIES(${MO_SRC_DIR}/src) +INCLUDE_DIRECTORIES(${TSP_SRC_DIR}) + +###################################################################################### +### 2) Specify where CMake can find the libraries +###################################################################################### + +LINK_DIRECTORIES(${EO_BIN_DIR}/lib ${TSP_BIN_DIR}/lib) + +###################################################################################### +### 3) Define your target(s): just an executable here +###################################################################################### + +IF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005" OR CMAKE_GENERATOR STREQUAL "Visual Studio 9 2008") + SOURCE_GROUP(src FILES hybrid_ga.cpp) + + SOURCE_GROUP(benchs FILES + ${TSP_BIN_DIR}/benchs/berlin52.tsp + ${TSP_BIN_DIR}/benchs/eil101.tsp + ${TSP_BIN_DIR}/benchs/pr2392.tsp + ${TSP_BIN_DIR}/benchs/rl5915.tsp + ${TSP_BIN_DIR}/benchs/usa13509.tsp + ) + + ADD_EXECUTABLE(hybrid_ga + hybrid_ga.cpp + ${MO_BIN_DIR}/tutorial/HybridLesson/param + ${TSP_BIN_DIR}/benchs/berlin52.tsp + ${TSP_BIN_DIR}/benchs/eil101.tsp + ${TSP_BIN_DIR}/benchs/pr2392.tsp + ${TSP_BIN_DIR}/benchs/rl5915.tsp + ${TSP_BIN_DIR}/benchs/usa13509.tsp + ) +ELSE(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005" OR CMAKE_GENERATOR STREQUAL "Visual Studio 9 2008") + ADD_COMMANDS_MO() + ADD_TARGET_MO(lesson6) + IF(ENABLE_CMAKE_EXAMPLE) + ADD_EXECUTABLE(hybrid_ga hybrid_ga.cpp) + ELSE(ENABLE_CMAKE_EXAMPLE) + ADD_EXECUTABLE(hybrid_ga EXCLUDE_FROM_ALL hybrid_ga.cpp) + ENDIF(ENABLE_CMAKE_EXAMPLE) +ENDIF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005" OR CMAKE_GENERATOR STREQUAL "Visual Studio 9 2008") + +ADD_DEPENDENCIES(hybrid_ga tsp) + +###################################################################################### +### 4) Optionnal: define your target(s)'s version: no effect for windows +###################################################################################### + +SET(HYBRIDGA_VERSION ${GLOBAL_VERSION}) +SET_TARGET_PROPERTIES(hybrid_ga PROPERTIES VERSION "${HYBRIDGA_VERSION}") + +###################################################################################### +### 5) Link the librairies for your target(s) +###################################################################################### + +TARGET_LINK_LIBRARIES(hybrid_ga tsp eo eoutils) + +###################################################################################### diff --git a/trunk/paradiseo-old-mo/tutorial/HybridLesson/hybrid_ga.cpp b/trunk/paradiseo-old-mo/tutorial/HybridLesson/hybrid_ga.cpp new file mode 100644 index 000000000..35670ab9b --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/HybridLesson/hybrid_ga.cpp @@ -0,0 +1,194 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Thomas Legrand +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include +#include +#include + +void manage_configuration_file(eoParser & _parser); + +int +main (int _argc, char* _argv []) +{ + std::string instancePath, crossoverType, selectionType; + unsigned int seed, populationSize, maxIterations, selectedParentNumber; + double crossoverRate, mutationRate, elitismRate, tournamentRate; + + eoParser parser(_argc, _argv); + + manage_configuration_file(parser); + + seed=atoi( (parser.getParamWithLongName("seed")->getValue()).c_str() ); + instancePath=parser.getParamWithLongName("instancePath")->getValue(); + populationSize=atoi( (parser.getParamWithLongName("popSize")->getValue()).c_str() ); + maxIterations=atoi( (parser.getParamWithLongName("maxIter")->getValue()).c_str() ); + crossoverRate=atof( (parser.getParamWithLongName("crossRate")->getValue()).c_str() ); + mutationRate=atof( (parser.getParamWithLongName("mutRate")->getValue()).c_str() ); + selectedParentNumber=atoi( (parser.getParamWithLongName("nbSelPar")->getValue()).c_str() ); + elitismRate=atof( (parser.getParamWithLongName("elitismRate")->getValue()).c_str() ); + tournamentRate=atof( (parser.getParamWithLongName("tournRate")->getValue()).c_str() ); + crossoverType=parser.getParamWithLongName("crossType")->getValue(); + selectionType=parser.getParamWithLongName("selectionType")->getValue(); + + srand (seed); + Graph::load(instancePath.c_str()); + + RouteInit init ; + + RouteEval full_evaluation ; + + eoPop population (populationSize, init) ; + apply (full_evaluation, population) ; + + std :: cout << "[From] " << population.best_element () << std :: endl ; + + eoGenContinue continu (maxIterations) ; + + eoStochTournamentSelect select_one ; + + eoSelectNumber select (select_one, selectedParentNumber) ; + + eoQuadOp *crossover; + + if(crossoverType.compare("Partial")==0) + { + crossover=new PartialMappedXover(); + } + else if (crossoverType.compare("Order")==0) + { + crossover=new OrderXover(); + } + else if (crossoverType.compare("Edge")==0) + { + crossover=new EdgeXover(); + } + else + { + throw std::runtime_error("[tsp.cpp]: the crossover type '"+crossoverType+"' is not correct."); + } + + TwoOptInit two_opt_initializer; + + TwoOptNext two_opt_next_move_generator; + + TwoOptIncrEval two_opt_incremental_evaluation; + + moMoveSelect* two_opt_selection; + + if(selectionType.compare("Best")==0) + { + two_opt_selection= new moBestImprSelect(); + } + else if (selectionType.compare("First")==0) + { + two_opt_selection= new moFirstImprSelect(); + } + else if (selectionType.compare("Random")==0) + { + two_opt_selection= new moRandImprSelect(); + } + else + { + throw std::runtime_error("[hill_climbing.cpp]: the type of selection '"+selectionType+"' is not correct."); + } + + moHC hill_climbing_mutation (two_opt_initializer, two_opt_next_move_generator, two_opt_incremental_evaluation, + *two_opt_selection, full_evaluation); + + eoSGATransform transform (*crossover, crossoverRate, hill_climbing_mutation, mutationRate) ; + + eoElitism merge (elitismRate) ; + + eoStochTournamentTruncate reduce (tournamentRate) ; + + eoEasyEA ea (continu, full_evaluation, select, transform, merge, reduce) ; + + ea (population) ; + + std :: cout << "[To] " << population.best_element () << std :: endl ; + + delete(crossover); + delete(two_opt_selection); + + return EXIT_SUCCESS; +} + +void +manage_configuration_file(eoParser & _parser) +{ + std::ofstream os; + + _parser.createParam(std::string("../examples/tsp/benchs/berlin52.tsp"), "instancePath", "Path to the instance.", + 0, "Configuration", false); + + _parser.getORcreateParam((unsigned int)time(0), "seed", "Seed for rand.", 0, "Configuration", false); + + _parser.getORcreateParam((unsigned int)100, "popSize", "Size of the population.", 0, "Configuration", false); + + _parser.getORcreateParam((unsigned int)1000, "maxIter", "Maximum number of iterations.", 0, "Configuration", false); + + _parser.getORcreateParam((double)1.0, "crossRate", "Probability of crossover.", 0, "Configuration", false); + + _parser.getORcreateParam((double)0.01, "mutRate", "Probability of mutation.", 0, "Configuration", false); + + _parser.getORcreateParam((unsigned int)100, "nbSelPar", "Number of selected parents.", 0, "Configuration", false); + + _parser.getORcreateParam((double)1.0, "elitismRate", "Percentage of the best individuals kept.", 0, "Configuration", false); + + _parser.getORcreateParam((double)0.7, "tournRate", "Percentage of the individuals used during the tournament.", + 0, "Configuration", false); + + _parser.getORcreateParam(std::string("Partial"), "crossType", "Crossover to use, it can be 'Partial', 'Order' or 'Edge'.", + 0, "Configuration", false); + + + _parser.getORcreateParam(std::string("Best"), "selectionType", "Type of the selection: 'Best', 'First' or 'Random'.", + 0, "Configuration", false); + + if (_parser.userNeedsHelp()) + { + _parser.printHelp(std::cout); + exit(EXIT_FAILURE); + } + + os.open("current_param"); + if(!os.is_open()) + { + throw std::runtime_error("[tsp.cpp]: the file current_param cannot be created."); + } + os <<_parser; + os.close(); +} diff --git a/trunk/paradiseo-old-mo/tutorial/HybridLesson/param b/trunk/paradiseo-old-mo/tutorial/HybridLesson/param new file mode 100644 index 000000000..f0a3f9217 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/HybridLesson/param @@ -0,0 +1,17 @@ + +###### General ###### +# --help=0 # -h : Prints this message +# --stopOnUnknownParam=1 # Stop if unkown param entered + +###### Configuration ###### +# --instancePath=../examples/tsp/benchs/berlin52.tsp # Path to the instance. +# --seed=1224599328 # Seed for rand. +# --popSize=100 # Size of the population. +# --maxIter=1000 # Maximum number of iterations. +# --crossRate=1 # Probability of crossover. +# --mutRate=0.01 # Probability of mutation. +# --nbSelPar=100 # Number of selected parents. +# --elitismRate=1 # Percentage of the best individuals kept. +# --tournRate=0.7 # Percentage of the individuals used during the tournament. +# --crossType=Partial # Crossover to use, it can be 'Partial', 'Order' or 'Edge'. +# --selectionType=Best # Type of the selection: 'Best', 'First' or 'Random'. diff --git a/trunk/paradiseo-old-mo/tutorial/Lesson1/CMakeLists.txt b/trunk/paradiseo-old-mo/tutorial/Lesson1/CMakeLists.txt new file mode 100644 index 000000000..3f018e4ee --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/Lesson1/CMakeLists.txt @@ -0,0 +1,67 @@ +###################################################################################### +### 1) Include the sources +###################################################################################### + +INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src) +INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src/utils) +INCLUDE_DIRECTORIES(${MO_SRC_DIR}/src) +INCLUDE_DIRECTORIES(${TSP_SRC_DIR}) + +###################################################################################### +### 2) Specify where CMake can find the libraries +###################################################################################### + +LINK_DIRECTORIES(${EO_BIN_DIR}/lib ${TSP_BIN_DIR}/lib) + +###################################################################################### +### 3) Define your target(s): just an executable here +###################################################################################### + +IF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005" OR CMAKE_GENERATOR STREQUAL "Visual Studio 9 2008") + SOURCE_GROUP(src FILES hill_climbing.cpp) + + SOURCE_GROUP(benchs FILES + ${TSP_BIN_DIR}/benchs/berlin52.tsp + ${TSP_BIN_DIR}/benchs/eil101.tsp + ${TSP_BIN_DIR}/benchs/pr2392.tsp + ${TSP_BIN_DIR}/benchs/rl5915.tsp + ${TSP_BIN_DIR}/benchs/usa13509.tsp + ) + + ADD_EXECUTABLE(hill_climbing + hill_climbing.cpp + ${MO_BIN_DIR}/tutorial/Lesson1/param + ${TSP_BIN_DIR}/benchs/berlin52.tsp + ${TSP_BIN_DIR}/benchs/eil101.tsp + ${TSP_BIN_DIR}/benchs/pr2392.tsp + ${TSP_BIN_DIR}/benchs/rl5915.tsp + ${TSP_BIN_DIR}/benchs/usa13509.tsp + ) +ELSE(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005" OR CMAKE_GENERATOR STREQUAL "Visual Studio 9 2008") + ADD_COMMANDS_MO() + ADD_TARGET_MO(lesson1) + IF(ENABLE_CMAKE_EXAMPLE) + ADD_EXECUTABLE(hill_climbing hill_climbing.cpp) + ELSE(ENABLE_CMAKE_EXAMPLE) + ADD_EXECUTABLE(hill_climbing EXCLUDE_FROM_ALL hill_climbing.cpp) + ENDIF(ENABLE_CMAKE_EXAMPLE) +ENDIF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005" OR CMAKE_GENERATOR STREQUAL "Visual Studio 9 2008") + + +ADD_DEPENDENCIES(hill_climbing tsp) + +###################################################################################### +### 4) Optionnal: define your target(s)'s version: no effect for windows +###################################################################################### + +SET(HILLCLIMBING_VERSION ${GLOBAL_VERSION}) +SET_TARGET_PROPERTIES(hill_climbing PROPERTIES VERSION "${HILLCLIMBING_VERSION}") + +###################################################################################### +### 5) Link the librairies for your target(s) +###################################################################################### + +TARGET_LINK_LIBRARIES(hill_climbing tsp eo eoutils) + +###################################################################################### + diff --git a/trunk/paradiseo-old-mo/tutorial/Lesson1/hill_climbing.cpp b/trunk/paradiseo-old-mo/tutorial/Lesson1/hill_climbing.cpp new file mode 100644 index 000000000..94fc3ae34 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/Lesson1/hill_climbing.cpp @@ -0,0 +1,134 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include +#include + +void manage_configuration_file(eoParser & _parser); + +int +main (int _argc, char* _argv []) +{ + std::string instancePath, selectionType; + unsigned int seed; + + eoParser parser(_argc, _argv); + + manage_configuration_file(parser); + + seed=atoi( (parser.getParamWithLongName("seed")->getValue()).c_str() ); + instancePath=parser.getParamWithLongName("instancePath")->getValue(); + selectionType=parser.getParamWithLongName("selectionType")->getValue(); + + srand (seed); + Graph::load(instancePath.c_str()); + + Route solution; + + RouteInit initializer; + initializer (solution); + + RouteEval full_evaluation; + full_evaluation (solution); + + std :: cout << "[From] " << solution << std :: endl; + + /* Tools for an efficient (? :-)) + local search ! */ + + TwoOptInit two_opt_initializer; + + TwoOptNext two_opt_next_move_generator; + + TwoOptIncrEval two_opt_incremental_evaluation; + + moMoveSelect* two_opt_selection; + + if(selectionType.compare("Best")==0) + { + two_opt_selection= new moBestImprSelect(); + } + else if (selectionType.compare("First")==0) + { + two_opt_selection= new moFirstImprSelect(); + } + else if (selectionType.compare("Random")==0) + { + two_opt_selection= new moRandImprSelect(); + } + else + { + throw std::runtime_error("[hill_climbing.cpp]: the type of selection '"+selectionType+"' is not correct."); + } + + moHC hill_climbing (two_opt_initializer, two_opt_next_move_generator, two_opt_incremental_evaluation, + *two_opt_selection, full_evaluation); + hill_climbing (solution) ; + + std :: cout << "[To] " << solution << std :: endl; + + delete(two_opt_selection); + + return EXIT_SUCCESS; +} + +void +manage_configuration_file(eoParser & _parser) +{ + std::ofstream os; + + _parser.createParam(std::string("../examples/tsp/benchs/berlin52.tsp"), "instancePath", "Path to the instance.", + 0, "Configuration", false); + + _parser.getORcreateParam((unsigned int)time(0), "seed", "Seed for rand.", 0, "Configuration", false); + + _parser.getORcreateParam(std::string("Best"), "selectionType", "Type of the selection: 'Best', 'First' or 'Random'.", + 0, "Configuration", false); + + if (_parser.userNeedsHelp()) + { + _parser.printHelp(std::cout); + exit(EXIT_FAILURE); + } + + os.open("current_param"); + if(!os.is_open()) + { + throw std::runtime_error("[hill_climbing.cpp]: the file current_param cannot be created."); + } + os <<_parser; + os.close(); +} diff --git a/trunk/paradiseo-old-mo/tutorial/Lesson1/param b/trunk/paradiseo-old-mo/tutorial/Lesson1/param new file mode 100644 index 000000000..8bdb97f37 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/Lesson1/param @@ -0,0 +1,9 @@ + +###### General ###### +# --help=0 # -h : Prints this message +# --stopOnUnknownParam=1 # Stop if unkown param entered + +###### Configuration ###### +# --instancePath=../examples/tsp/benchs/berlin52.tsp # Path to the instance. +# --seed=1203517190 # Seed for rand. +# --selectionType=Best # Type of the selection: 'Best', 'First' or 'Random'. diff --git a/trunk/paradiseo-old-mo/tutorial/Lesson2/CMakeLists.txt b/trunk/paradiseo-old-mo/tutorial/Lesson2/CMakeLists.txt new file mode 100644 index 000000000..0f240ebd3 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/Lesson2/CMakeLists.txt @@ -0,0 +1,66 @@ +###################################################################################### +### 1) Include the sources +###################################################################################### + +INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src) +INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src/utils) +INCLUDE_DIRECTORIES(${MO_SRC_DIR}/src) +INCLUDE_DIRECTORIES(${TSP_SRC_DIR}) + +###################################################################################### +### 2) Specify where CMake can find the libraries +###################################################################################### + +LINK_DIRECTORIES(${EO_BIN_DIR}/lib ${TSP_BIN_DIR}/lib) + +###################################################################################### +### 3) Define your target(s): just an executable here +###################################################################################### + +IF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005" OR CMAKE_GENERATOR STREQUAL "Visual Studio 9 2008") + SOURCE_GROUP(src FILES tabu_search.cpp) + + SOURCE_GROUP(benchs FILES + ${TSP_BIN_DIR}/benchs/berlin52.tsp + ${TSP_BIN_DIR}/benchs/eil101.tsp + ${TSP_BIN_DIR}/benchs/pr2392.tsp + ${TSP_BIN_DIR}/benchs/rl5915.tsp + ${TSP_BIN_DIR}/benchs/usa13509.tsp + ) + + ADD_EXECUTABLE(tabu_search + tabu_search.cpp + ${MO_BIN_DIR}/tutorial/Lesson2/param + ${TSP_BIN_DIR}/benchs/berlin52.tsp + ${TSP_BIN_DIR}/benchs/eil101.tsp + ${TSP_BIN_DIR}/benchs/pr2392.tsp + ${TSP_BIN_DIR}/benchs/rl5915.tsp + ${TSP_BIN_DIR}/benchs/usa13509.tsp + ) +ELSE(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005" OR CMAKE_GENERATOR STREQUAL "Visual Studio 9 2008") + ADD_COMMANDS_MO() + ADD_TARGET_MO(lesson2) + IF(ENABLE_CMAKE_EXAMPLE) + ADD_EXECUTABLE(tabu_search tabu_search.cpp) + ELSE(ENABLE_CMAKE_EXAMPLE) + ADD_EXECUTABLE(tabu_search EXCLUDE_FROM_ALL tabu_search.cpp) + ENDIF(ENABLE_CMAKE_EXAMPLE) +ENDIF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005" OR CMAKE_GENERATOR STREQUAL "Visual Studio 9 2008") + +ADD_DEPENDENCIES(tabu_search tsp) + +###################################################################################### +### 4) Optionnal: define your target(s)'s version: no effect for windows +###################################################################################### + +SET(TABUSEARCH_VERSION ${GLOBAL_VERSION}) +SET_TARGET_PROPERTIES(tabu_search PROPERTIES VERSION "${TABUSEARCH_VERSION}") + +###################################################################################### +### 5) Link the librairies for your target(s) +###################################################################################### + +TARGET_LINK_LIBRARIES(tabu_search tsp eo eoutils) + +###################################################################################### + diff --git a/trunk/paradiseo-old-mo/tutorial/Lesson2/param b/trunk/paradiseo-old-mo/tutorial/Lesson2/param new file mode 100644 index 000000000..53d46bed9 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/Lesson2/param @@ -0,0 +1,11 @@ + +###### General ###### +# --help=0 # -h : Prints this message +# --stopOnUnknownParam=1 # Stop if unkown param entered + +###### Configuration ###### +# --instancePath=../examples/tsp/benchs/berlin52.tsp # Path to the instance +# --seed=1202917905 # Seed for rand +# --tabuListSize=10 # Size of the tabu list +# --maxIter=1000 # Maximum number of iterations +# --tabuListType=TwoOpt # Type of the tabu list: 'TwoOpt', 'SimpleMove' or 'SimpleSolution' diff --git a/trunk/paradiseo-old-mo/tutorial/Lesson2/tabu_search.cpp b/trunk/paradiseo-old-mo/tutorial/Lesson2/tabu_search.cpp new file mode 100644 index 000000000..ce67cbbec --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/Lesson2/tabu_search.cpp @@ -0,0 +1,145 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr + +*/ + +#include +#include +#include + +void manage_configuration_file(eoParser & _parser); + +int +main (int _argc, char* _argv []) +{ + std::string instancePath, value; + unsigned int seed, maxIterations, tabuListSize; + + eoParser parser(_argc, _argv); + + manage_configuration_file(parser); + + seed=atoi( (parser.getParamWithLongName("seed")->getValue()).c_str() ); + maxIterations=atoi( (parser.getParamWithLongName("maxIter")->getValue()).c_str() ); + tabuListSize=atoi( (parser.getParamWithLongName("tabuListSize")->getValue()).c_str() ); + instancePath=parser.getParamWithLongName("instancePath")->getValue(); + value=parser.getParamWithLongName("tabuListType")->getValue(); + + srand (seed); + Graph::load(instancePath.c_str()); + + Route solution; + + RouteInit initializer; + initializer(solution); + + RouteEval full_evaluation; + full_evaluation(solution); + + std :: cout << "[From] " << solution << std :: endl; + + /* Tools for an efficient (? :-)) + local search ! */ + + TwoOptInit two_opt_initializer; + + TwoOptNext two_opt_next_move_generator; + + TwoOptIncrEval two_opt_incremental_evaluation; + + moTabuList *tabuList; + + if(value.compare("TwoOpt")==0) + { + tabuList=new TwoOptTabuList(); + } + else if (value.compare("SimpleMove")==0) + { + tabuList=new moSimpleMoveTabuList(tabuListSize); + } + else if (value.compare("SimpleSolution")==0) + { + tabuList=new moSimpleSolutionTabuList(tabuListSize); + } + else + { + throw std::runtime_error("[tabu_search.cpp]: the type of tabu list '"+value+"' is not correct."); + } + + moNoAspirCrit aspiration_criterion; + + moGenSolContinue continu (maxIterations); + + moTS tabu_search (two_opt_initializer, two_opt_next_move_generator, + two_opt_incremental_evaluation, *tabuList, aspiration_criterion, continu, full_evaluation); + tabu_search(solution); + + std :: cout << "[To] " << solution << std :: endl; + + delete(tabuList); + + return EXIT_SUCCESS; +} + +void +manage_configuration_file(eoParser & _parser) +{ + std::ofstream os; + + _parser.createParam(std::string("../examples/tsp/benchs/berlin52.tsp"), "instancePath", "Path to the instance.", + 0, "Configuration", false); + + _parser.getORcreateParam((unsigned int)time(0), "seed", "Seed for rand.", 0, "Configuration", false); + + _parser.getORcreateParam((unsigned int)10, "tabuListSize", "Size of the tabu list.", 0, "Configuration", false); + + _parser.getORcreateParam((unsigned int)1000, "maxIter", "Maximum number of iterations.", 0, "Configuration", false); + + _parser.getORcreateParam(std::string("TwoOpt"), "tabuListType", "Type of the tabu list: 'TwoOpt', 'SimpleMove' or 'SimpleSolution'.", + 0, "Configuration", false); + + if (_parser.userNeedsHelp()) + { + _parser.printHelp(std::cout); + exit(EXIT_FAILURE); + } + + os.open("current_param"); + if(!os.is_open()) + { + throw std::runtime_error("[tabu_search.cpp]: the file current_param cannot be created."); + } + os <<_parser; + os.close(); +} diff --git a/trunk/paradiseo-old-mo/tutorial/Lesson3/CMakeLists.txt b/trunk/paradiseo-old-mo/tutorial/Lesson3/CMakeLists.txt new file mode 100644 index 000000000..41e048ef4 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/Lesson3/CMakeLists.txt @@ -0,0 +1,66 @@ +###################################################################################### +### 1) Include the sources +###################################################################################### + +INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src) +INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src/utils) +INCLUDE_DIRECTORIES(${MO_SRC_DIR}/src) +INCLUDE_DIRECTORIES(${TSP_SRC_DIR}) + +###################################################################################### +### 2) Specify where CMake can find the libraries +###################################################################################### + +LINK_DIRECTORIES(${EO_BIN_DIR}/lib ${TSP_BIN_DIR}/lib) + +###################################################################################### +### 3) Define your target(s): just an executable here +###################################################################################### + +IF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005" OR CMAKE_GENERATOR STREQUAL "Visual Studio 9 2008") + SOURCE_GROUP(src FILES simulated_annealing.cpp) + + SOURCE_GROUP(benchs FILES + ${TSP_BIN_DIR}/benchs/berlin52.tsp + ${TSP_BIN_DIR}/benchs/eil101.tsp + ${TSP_BIN_DIR}/benchs/pr2392.tsp + ${TSP_BIN_DIR}/benchs/rl5915.tsp + ${TSP_BIN_DIR}/benchs/usa13509.tsp + ) + + ADD_EXECUTABLE(simulated_annealing + simulated_annealing.cpp + ${MO_BIN_DIR}/tutorial/Lesson3/param + ${TSP_BIN_DIR}/benchs/berlin52.tsp + ${TSP_BIN_DIR}/benchs/eil101.tsp + ${TSP_BIN_DIR}/benchs/pr2392.tsp + ${TSP_BIN_DIR}/benchs/rl5915.tsp + ${TSP_BIN_DIR}/benchs/usa13509.tsp + ) +ELSE(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005" OR CMAKE_GENERATOR STREQUAL "Visual Studio 9 2008") + ADD_COMMANDS_MO() + ADD_TARGET_MO(lesson3) + IF(ENABLE_CMAKE_EXAMPLE) + ADD_EXECUTABLE(simulated_annealing simulated_annealing.cpp) + ELSE(ENABLE_CMAKE_EXAMPLE) + ADD_EXECUTABLE(simulated_annealing EXCLUDE_FROM_ALL simulated_annealing.cpp) + ENDIF(ENABLE_CMAKE_EXAMPLE) +ENDIF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005" OR CMAKE_GENERATOR STREQUAL "Visual Studio 9 2008") + +ADD_DEPENDENCIES(simulated_annealing tsp) + +###################################################################################### +### 4) Optionnal: define your target(s)'s version: no effect for windows +###################################################################################### + +SET(SIMULATEDANNEALING_VERSION ${GLOBAL_VERSION}) +SET_TARGET_PROPERTIES(simulated_annealing PROPERTIES VERSION "${SIMULATEDANNEALING_VERSION}") + +###################################################################################### +### 5) Link the librairies for your target(s) +###################################################################################### + +TARGET_LINK_LIBRARIES(simulated_annealing tsp eo eoutils) + +###################################################################################### + diff --git a/trunk/paradiseo-old-mo/tutorial/Lesson3/param b/trunk/paradiseo-old-mo/tutorial/Lesson3/param new file mode 100644 index 000000000..d80626b17 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/Lesson3/param @@ -0,0 +1,14 @@ + +###### General ###### +# --help=0 # -h : Prints this message +# --stopOnUnknownParam=1 # Stop if unkown param entered + +###### Configuration ###### +# --instancePath=../examples/tsp/benchs/berlin52.tsp # Path to the instance. +# --seed=1202919978 # Seed for rand. +# --maxIter=1000 # Maximum number of iterations. +# --initialTemp=1000 # Initial temperature. +# --threshold=0.1 # Minimum temperature allowed. +# --expoRatio=0.98 # Ratio used if exponential cooling schedule is chosen. +# --lineaRatio=0.5 # Ratio used if linear cooling schedule is chosen. +# --coolSchedType=Expo # Type the cooling schedule: 'Expo' or 'Linear'. diff --git a/trunk/paradiseo-old-mo/tutorial/Lesson3/simulated_annealing.cpp b/trunk/paradiseo-old-mo/tutorial/Lesson3/simulated_annealing.cpp new file mode 100644 index 000000000..0905b3590 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/Lesson3/simulated_annealing.cpp @@ -0,0 +1,148 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include +#include + +void manage_configuration_file(eoParser & _parser); + +int +main (int _argc, char* _argv []) +{ + std::string instancePath, value; + unsigned int seed, maxIterations; + double threshold, geometricRatio, linearRatio, initialTemperature; + + eoParser parser(_argc, _argv); + + manage_configuration_file(parser); + + seed=atoi( (parser.getParamWithLongName("seed")->getValue()).c_str() ); + instancePath=parser.getParamWithLongName("instancePath")->getValue(); + maxIterations=atoi( (parser.getParamWithLongName("maxIter")->getValue()).c_str() ); + initialTemperature=atof( (parser.getParamWithLongName("initialTemp")->getValue()).c_str() ); + threshold=atof( (parser.getParamWithLongName("threshold")->getValue()).c_str() ); + geometricRatio=atof( (parser.getParamWithLongName("geometricRatio")->getValue()).c_str() ); + linearRatio=atof( (parser.getParamWithLongName("lineaRatio")->getValue()).c_str() ); + value=parser.getParamWithLongName("coolSchedType")->getValue(); + + srand (seed); + Graph::load(instancePath.c_str()); + + Route solution; + + RouteInit initializer; + initializer (solution); + + RouteEval full_evaluation; + full_evaluation (solution); + + std :: cout << "[From] " << solution << std :: endl; + + /* Tools for an efficient (? :-)) + local search ! */ + + TwoOptRand two_opt_random_move_generator; + + TwoOptIncrEval two_opt_incremental_evaluation; + + TwoOpt move; + + moCoolingSchedule* coolingSchedule; + + if(value.compare("Geometric")==0) + { + coolingSchedule=new moGeometricCoolingSchedule(threshold, geometricRatio); + } + else if (value.compare("Linear")==0) + { + coolingSchedule=new moLinearCoolingSchedule(threshold, linearRatio); + } + else + { + throw std::runtime_error("[simulated_annealing.cpp]: the type of cooling schedule '"+value+"' is not correct."); + } + + moGenSolContinue continu (maxIterations); + + moSA simulated_annealing (two_opt_random_move_generator, two_opt_incremental_evaluation, + continu, initialTemperature, *coolingSchedule, full_evaluation); + simulated_annealing (solution); + + std :: cout << "[To] " << solution << std :: endl; + + delete(coolingSchedule); + + return EXIT_SUCCESS ; +} + +void +manage_configuration_file(eoParser & _parser) +{ + std::ofstream os; + + _parser.createParam(std::string("../examples/tsp/benchs/berlin52.tsp"), "instancePath", "Path to the instance.", + 0, "Configuration", false); + + _parser.getORcreateParam((unsigned int)time(0), "seed", "Seed for rand.", 0, "Configuration", false); + + _parser.getORcreateParam((unsigned int)1000, "maxIter", "Maximum number of iterations.", 0, "Configuration", false); + + _parser.getORcreateParam((double)1000, "initialTemp", "Initial temperature.", 0, "Configuration", false); + + _parser.getORcreateParam((double)0.1, "threshold", "Minimum temperature allowed.", 0, "Configuration", false); + + _parser.getORcreateParam((double)0.98, "geometricRatio", "Ratio used if exponential cooling schedule is chosen.", 0, "Configuration", false); + + _parser.getORcreateParam((double)0.5, "lineaRatio", "Ratio used if linear cooling schedule is chosen.", 0, "Configuration", false); + + _parser.getORcreateParam(std::string("Geometric"), "coolSchedType", "Type the cooling schedule: 'Geometric' or 'Linear'.", + 0, "Configuration", false); + + if (_parser.userNeedsHelp()) + { + _parser.printHelp(std::cout); + exit(EXIT_FAILURE); + } + + os.open("current_param"); + if(!os.is_open()) + { + throw std::runtime_error("[simulated_annealing.cpp]: the file current_param cannot be created."); + } + os <<_parser; + os.close(); +} diff --git a/trunk/paradiseo-old-mo/tutorial/Lesson4/CMakeLists.txt b/trunk/paradiseo-old-mo/tutorial/Lesson4/CMakeLists.txt new file mode 100644 index 000000000..a8435bd79 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/Lesson4/CMakeLists.txt @@ -0,0 +1,65 @@ +###################################################################################### +### 1) Include the sources +###################################################################################### + +INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src) +INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src/utils) +INCLUDE_DIRECTORIES(${MO_SRC_DIR}/src) +INCLUDE_DIRECTORIES(${TSP_SRC_DIR}) + +###################################################################################### +### 2) Specify where CMake can find the libraries +###################################################################################### + +LINK_DIRECTORIES(${EO_BIN_DIR}/lib ${TSP_BIN_DIR}/lib) + +###################################################################################### +### 3) Define your target(s): just an executable here +###################################################################################### + +IF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005" OR CMAKE_GENERATOR STREQUAL "Visual Studio 9 2008") + SOURCE_GROUP(src FILES iterated_local_search.cpp) + + SOURCE_GROUP(benchs FILES + ${TSP_BIN_DIR}/benchs/berlin52.tsp + ${TSP_BIN_DIR}/benchs/eil101.tsp + ${TSP_BIN_DIR}/benchs/pr2392.tsp + ${TSP_BIN_DIR}/benchs/rl5915.tsp + ${TSP_BIN_DIR}/benchs/usa13509.tsp + ) + + ADD_EXECUTABLE(iterated_local_search + iterated_local_search.cpp + ${MO_BIN_DIR}/tutorial/Lesson4/param + ${TSP_BIN_DIR}/benchs/berlin52.tsp + ${TSP_BIN_DIR}/benchs/eil101.tsp + ${TSP_BIN_DIR}/benchs/pr2392.tsp + ${TSP_BIN_DIR}/benchs/rl5915.tsp + ${TSP_BIN_DIR}/benchs/usa13509.tsp + ) +ELSE(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005" OR CMAKE_GENERATOR STREQUAL "Visual Studio 9 2008") + ADD_COMMANDS_MO() + ADD_TARGET_MO(lesson4) + IF(ENABLE_CMAKE_EXAMPLE) + ADD_EXECUTABLE(iterated_local_search iterated_local_search.cpp) + ELSE(ENABLE_CMAKE_EXAMPLE) + ADD_EXECUTABLE(iterated_local_search EXCLUDE_FROM_ALL iterated_local_search.cpp) + ENDIF(ENABLE_CMAKE_EXAMPLE) +ENDIF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005" OR CMAKE_GENERATOR STREQUAL "Visual Studio 9 2008") + +ADD_DEPENDENCIES(iterated_local_search tsp) + +###################################################################################### +### 4) Optionnal: define your target(s)'s version: no effect for windows +###################################################################################### + +SET(ITERATEDLOCALSEARCH_VERSION ${GLOBAL_VERSION}) +SET_TARGET_PROPERTIES(iterated_local_search PROPERTIES VERSION "${ITERATEDLOCALSEARCH_VERSION}") + +###################################################################################### +### 5) Link the librairies for your target(s) +###################################################################################### + +TARGET_LINK_LIBRARIES(iterated_local_search tsp eo eoutils) + +###################################################################################### diff --git a/trunk/paradiseo-old-mo/tutorial/Lesson4/iterated_local_search.cpp b/trunk/paradiseo-old-mo/tutorial/Lesson4/iterated_local_search.cpp new file mode 100644 index 000000000..8d8b42324 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/Lesson4/iterated_local_search.cpp @@ -0,0 +1,117 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include +#include + +void manage_configuration_file(eoParser & _parser); + +int +main (int _argc, char* _argv []) +{ + std::string instancePath; + unsigned int seed, maxIterations; + + eoParser parser(_argc, _argv); + + manage_configuration_file(parser); + + seed=atoi( (parser.getParamWithLongName("seed")->getValue()).c_str() ); + instancePath=parser.getParamWithLongName("instancePath")->getValue(); + maxIterations=atoi( (parser.getParamWithLongName("maxIter")->getValue()).c_str() ); + + srand(seed); + Graph::load (instancePath.c_str()); + + Route solution; + + RouteInit initializer; + initializer (solution); + + RouteEval full_evaluation; + full_evaluation (solution); + + std :: cout << "[From] " << solution << std :: endl; + + TwoOptInit two_opt_initializer; + + TwoOptNext two_opt_next_move_generator; + + TwoOptIncrEval two_opt_incremental_evaluation; + + moBestImprSelect two_opt_selection; + + moGenSolContinue continu(maxIterations); + + moFitComparator comparator; + + CitySwap perturbation; + + moILS iterated_local_search (two_opt_initializer, two_opt_next_move_generator, two_opt_incremental_evaluation, + two_opt_selection, continu, comparator, perturbation, full_evaluation) ; + iterated_local_search(solution); + + std :: cout << "[To] " << solution << std :: endl; + + return EXIT_SUCCESS; +} + +void +manage_configuration_file(eoParser & _parser) +{ + std::ofstream os; + + _parser.createParam(std::string("../examples/tsp/benchs/berlin52.tsp"), "instancePath", "Path to the instance.", + 0, "Configuration", false); + + _parser.getORcreateParam((unsigned int)time(0), "seed", "Seed for rand.", 0, "Configuration", false); + + _parser.getORcreateParam((unsigned int)1000, "maxIter", "Maximum number of iterations.", 0, "Configuration", false); + + if (_parser.userNeedsHelp()) + { + _parser.printHelp(std::cout); + exit(EXIT_FAILURE); + } + + os.open("current_param"); + if(!os.is_open()) + { + throw std::runtime_error("[iterated_local_search.cpp]: the file current_param cannot be created."); + } + os <<_parser; + os.close(); +} diff --git a/trunk/paradiseo-old-mo/tutorial/Lesson4/param b/trunk/paradiseo-old-mo/tutorial/Lesson4/param new file mode 100644 index 000000000..91a5284c8 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/Lesson4/param @@ -0,0 +1,9 @@ + +###### General ###### +# --help=0 # -h : Prints this message +# --stopOnUnknownParam=1 # Stop if unkown param entered + +###### Configuration ###### +# --instancePath=../examples/tsp/benchs/berlin52.tsp # Path to the instance. +# --seed=1203080388 # Seed for rand. +# --maxIter=1000 # Maximum number of iterations. diff --git a/trunk/paradiseo-old-mo/tutorial/Lesson5/CMakeLists.txt b/trunk/paradiseo-old-mo/tutorial/Lesson5/CMakeLists.txt new file mode 100644 index 000000000..7d4f0797d --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/Lesson5/CMakeLists.txt @@ -0,0 +1,65 @@ +###################################################################################### +### 1) Include the sources +###################################################################################### + +INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src) +INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src/utils) +INCLUDE_DIRECTORIES(${MO_SRC_DIR}/src) +INCLUDE_DIRECTORIES(${TSP_SRC_DIR}) + +###################################################################################### +### 2) Specify where CMake can find the libraries +###################################################################################### + +LINK_DIRECTORIES(${EO_BIN_DIR}/lib ${TSP_BIN_DIR}/lib) + +###################################################################################### +### 3) Define your target(s): just an executable here +###################################################################################### + +IF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005" OR CMAKE_GENERATOR STREQUAL "Visual Studio 9 2008") + SOURCE_GROUP(src FILES variable_neighborhood_search.cpp) + + SOURCE_GROUP(benchs FILES + ${TSP_BIN_DIR}/benchs/berlin52.tsp + ${TSP_BIN_DIR}/benchs/eil101.tsp + ${TSP_BIN_DIR}/benchs/pr2392.tsp + ${TSP_BIN_DIR}/benchs/rl5915.tsp + ${TSP_BIN_DIR}/benchs/usa13509.tsp + ) + + ADD_EXECUTABLE(variable_neighborhood_search + variable_neighborhood_search.cpp + ${MO_BIN_DIR}/tutorial/Lesson5/param + ${TSP_BIN_DIR}/benchs/berlin52.tsp + ${TSP_BIN_DIR}/benchs/eil101.tsp + ${TSP_BIN_DIR}/benchs/pr2392.tsp + ${TSP_BIN_DIR}/benchs/rl5915.tsp + ${TSP_BIN_DIR}/benchs/usa13509.tsp + ) +ELSE(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005" OR CMAKE_GENERATOR STREQUAL "Visual Studio 9 2008") + ADD_COMMANDS_MO() + ADD_TARGET_MO(lesson5) + IF(ENABLE_CMAKE_EXAMPLE) + ADD_EXECUTABLE(variable_neighborhood_search variable_neighborhood_search.cpp) + ELSE(ENABLE_CMAKE_EXAMPLE) + ADD_EXECUTABLE(variable_neighborhood_search EXCLUDE_FROM_ALL variable_neighborhood_search.cpp) + ENDIF(ENABLE_CMAKE_EXAMPLE) +ENDIF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005" OR CMAKE_GENERATOR STREQUAL "Visual Studio 9 2008") + +ADD_DEPENDENCIES(variable_neighborhood_search tsp) + +###################################################################################### +### 4) Optionnal: define your target(s)'s version: no effect for windows +###################################################################################### + +SET(ITERATEDLOCALSEARCH_VERSION ${GLOBAL_VERSION}) +SET_TARGET_PROPERTIES(variable_neighborhood_search PROPERTIES VERSION "${ITERATEDLOCALSEARCH_VERSION}") + +###################################################################################### +### 5) Link the librairies for your target(s) +###################################################################################### + +TARGET_LINK_LIBRARIES(variable_neighborhood_search tsp eo eoutils) + +###################################################################################### diff --git a/trunk/paradiseo-old-mo/tutorial/Lesson5/param b/trunk/paradiseo-old-mo/tutorial/Lesson5/param new file mode 100644 index 000000000..d81cd02b9 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/Lesson5/param @@ -0,0 +1,8 @@ +###### General ###### +# --help=0 # -h : Prints this message +# --stopOnUnknownParam=1 # Stop if unkown param entered + +###### Configuration ###### +# --instancePath=../examples/tsp/benchs/berlin52.tsp # Path to the instance. +# --seed=1231949999 # Seed for rand. +# --selectionType=Best # Type of the selection: 'Best', 'First' or 'Random'. diff --git a/trunk/paradiseo-old-mo/tutorial/Lesson5/variable_neighborhood_search.cpp b/trunk/paradiseo-old-mo/tutorial/Lesson5/variable_neighborhood_search.cpp new file mode 100644 index 000000000..c03eaf256 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/Lesson5/variable_neighborhood_search.cpp @@ -0,0 +1,160 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Salma Mesmoudi (salma.mesmoudi@inria.fr), Jean-Charles Boisson + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include +#include +#include + + +//template void add(T& var, P& vect); +void manage_configuration_file(eoParser & _parser); +//void ajouter (std::vector > >& V, moMove& K)const ; + +int +main (int _argc, char* _argv []) +{ + std::string instancePath, selectionType; + unsigned int seed; + + eoParser parser(_argc, _argv); + + manage_configuration_file(parser); + + seed=atoi( (parser.getParamWithLongName("seed")->getValue()).c_str() ); + instancePath=parser.getParamWithLongName("instancePath")->getValue(); + selectionType=parser.getParamWithLongName("selectionType")->getValue(); + + srand (seed); + Graph::load(instancePath.c_str()); + + Route solution; + + RouteInit initializer; + initializer (solution); + + RouteEval full_evaluation; + full_evaluation (solution); + + std :: cout << "[From] " << solution << std :: endl; + //A neighbor is a local search or mutation + + /*Tools for an efficient (? :-)) + local search ! */ + //---------------------first neighbor---------------------------------- + + TwoOptInit two_opt_initializer; + + TwoOptNext two_opt_next_move_generator; + + TwoOptIncrEval two_opt_incremental_evaluation; + + moMoveSelect* two_opt_selection; + + if(selectionType.compare("Best")==0) + { + two_opt_selection= new moBestImprSelect(); + } + else if (selectionType.compare("First")==0) + { + two_opt_selection= new moFirstImprSelect(); + } + else if (selectionType.compare("Random")==0) + { + two_opt_selection= new moRandImprSelect(); + } + else + { + throw std::runtime_error("[hill_climbing.cpp]: the type of selection '"+selectionType+"' is not correct."); + } + + + moHC hill_climbing (two_opt_initializer, two_opt_next_move_generator, two_opt_incremental_evaluation, + *two_opt_selection, full_evaluation); + + + //--------------------second neighbor----------------- + + CitySwap perturbation; + + //-----------neighbor vector-------------------------- + + moExpl explorer(perturbation); + explorer.addExplorer(hill_climbing); + explorer.addExplorer(perturbation); + + //------------VNS application-------------------------- + + moVNS vns(explorer, full_evaluation); + vns(solution); + //hill_climbing(solution); + std :: cout << "[To] " << solution << std :: endl; + + delete(two_opt_selection); + + return EXIT_SUCCESS; +} + + +void +manage_configuration_file(eoParser & _parser) +{ + std::ofstream os; + + _parser.createParam(std::string("../examples/tsp/benchs/berlin52.tsp"), "instancePath", "Path to the instance.", + 0, "Configuration", false); + + _parser.getORcreateParam((unsigned int)time(0), "seed", "Seed for rand.", 0, "Configuration", false); + + _parser.getORcreateParam(std::string("Best"), "selectionType", "Type of the selection: 'Best', 'First' or 'Random'.", + 0, "Configuration", false); + + if (_parser.userNeedsHelp()) + { + _parser.printHelp(std::cout); + exit(EXIT_FAILURE); + } + + os.open("current_param"); + if(!os.is_open()) + { + throw std::runtime_error("[hill_climbing.cpp]: the file current_param cannot be created."); + } + os <<_parser; + os.close(); +} + + + diff --git a/trunk/paradiseo-old-mo/tutorial/OldLesson/CMakeLists.txt b/trunk/paradiseo-old-mo/tutorial/OldLesson/CMakeLists.txt new file mode 100644 index 000000000..ca24b6c37 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/OldLesson/CMakeLists.txt @@ -0,0 +1,36 @@ +###################################################################################### +### 1) Include the sources +###################################################################################### + +INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src) +INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src/utils) +INCLUDE_DIRECTORIES(${MO_SRC_DIR}/src) +INCLUDE_DIRECTORIES(${FUNCTION_SRC_DIR}) + +###################################################################################### +### 2) Specify where CMake can find the libraries +###################################################################################### + +LINK_DIRECTORIES(${EO_BIN_DIR}/lib ${FUNCTION_BIN_DIR}/lib) + +###################################################################################### +### 3) Define your target(s): just an executable here +###################################################################################### + +ADD_EXECUTABLE(minimize_function +ADD_DEPENDENCIES(minimize_function function) + +###################################################################################### +### 4) Optionnal: define your target(s)'s version: no effect for windows +###################################################################################### + +SET(MINIMIZEFUNCTION_VERSION ${GLOBAL_VERSION}) +SET_TARGET_PROPERTIES(minimize_function PROPERTIES VERSION "${MINIMIZEFUNCTION_VERSION}") + +###################################################################################### +### 5) Link the librairies for your target(s) +###################################################################################### + +TARGET_LINK_LIBRARIES(minimize_function function eo eoutils) + +###################################################################################### diff --git a/trunk/paradiseo-old-mo/tutorial/OldLesson/minimize_function.cpp b/trunk/paradiseo-old-mo/tutorial/OldLesson/minimize_function.cpp new file mode 100644 index 000000000..c69acd9f8 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/OldLesson/minimize_function.cpp @@ -0,0 +1,136 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include +#include + +void manage_configuration_file(eoParser & _parser); + +int +main (int _argc, char* _argv []) +{ + std::string selectionType; + double initialBound, searchBound, searchStep; + eoParser parser(_argc, _argv); + + manage_configuration_file(parser); + + initialBound=atof( (parser.getParamWithLongName("initialBound")->getValue()).c_str() ); + searchBound=atof( (parser.getParamWithLongName("searchBound")->getValue()).c_str() ); + searchStep=atof( (parser.getParamWithLongName("searchStep")->getValue()).c_str() ); + selectionType=parser.getParamWithLongName("selectionType")->getValue(); + + Affectation solution; + + AffectationInit initialize(initialBound); + initialize (solution); + + AffectationEval evaluation; + evaluation (solution); + + std::cout << "Initial affectation : " << std::endl; + std::cout << "\t x1 = " << solution.first << std::endl; + std::cout << "\t x2 = " << solution.second << std::endl; + std::cout << "\t f(x1,x2) = " << solution.fitness() << std::endl; + + DeviationInit deviation_initializer(searchBound); + + DeviationNext deviation_next_move_generator(searchBound, searchStep); + + DeviationIncrEval deviation_incremental_evaluation; + + moMoveSelect* deviation_selection; + + if(selectionType.compare("Best")==0) + { + deviation_selection= new moBestImprSelect(); + } + else if (selectionType.compare("First")==0) + { + deviation_selection= new moFirstImprSelect(); + } + else if (selectionType.compare("Random")==0) + { + deviation_selection= new moRandImprSelect(); + } + else + { + throw std::runtime_error("[minimize_function.cpp]: the type of selection '"+selectionType+"' is not correct."); + } + + moHC hill_climbing (deviation_initializer, deviation_next_move_generator, deviation_incremental_evaluation, + *deviation_selection, evaluation); + hill_climbing (solution) ; + + std::cout << "Final affectation : " << std::endl; + std::cout << "\t x1 = " << solution.first << std::endl; + std::cout << "\t x2 = " << solution.second << std::endl; + std::cout << "\t f(x1,x2) = " << solution.fitness() << std::endl; + + delete(deviation_selection); + + return EXIT_SUCCESS; +} + +void +manage_configuration_file(eoParser & _parser) +{ + std::ofstream os; + + _parser.createParam((double)1, "initialBound", "Bound for the initial affectation.", 0, "Configuration", false); + + _parser.createParam((double)1, "searchBound", "Bound for neighbourhood exploration.", 0, "Configuration", false); + + _parser.createParam((double)1, "searchStep", "Step between two values during the neighbourhood exploration.", + 0, "Configuration", false); + + _parser.createParam(std::string("First"), "selectionType", "Type of the selection: 'Best', 'First' or 'Random'.", + 0, "Configuration", false); + + if (_parser.userNeedsHelp()) + { + _parser.printHelp(std::cout); + exit(EXIT_FAILURE); + } + + os.open("current_param"); + if(!os.is_open()) + { + throw std::runtime_error("[minimize_function.cpp]: the file current_param cannot be created."); + } + os <<_parser; + os.close(); +} diff --git a/trunk/paradiseo-old-mo/tutorial/OldLesson/param b/trunk/paradiseo-old-mo/tutorial/OldLesson/param new file mode 100644 index 000000000..726b2e29f --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/OldLesson/param @@ -0,0 +1,10 @@ + +###### General ###### +# --help=0 # -h : Prints this message +# --stopOnUnknownParam=1 # Stop if unkown param entered + +###### Configuration ###### +# --initialBound=1 # Bound for the initial affectation. +# --searchBound=1 # Bound for neighbourhood exploration. +# --searchStep=1 # Step between two values during the neighbourhood exploration. +# --selectionType=First # Type of the selection: 'Best', 'First' or 'Random'. diff --git a/trunk/paradiseo-old-mo/tutorial/examples/CMakeLists.txt b/trunk/paradiseo-old-mo/tutorial/examples/CMakeLists.txt new file mode 100644 index 000000000..4e30cc193 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/CMakeLists.txt @@ -0,0 +1,13 @@ + + +###################################################################################### +### 1) Where must cmake go now ? +###################################################################################### + +#SUBDIRS(tsp function) +ADD_SUBDIRECTORY(tsp) +ADD_SUBDIRECTORY(function) + +###################################################################################### + + diff --git a/trunk/paradiseo-old-mo/tutorial/examples/function/CMakeLists.txt b/trunk/paradiseo-old-mo/tutorial/examples/function/CMakeLists.txt new file mode 100644 index 000000000..c7c61e3c1 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/function/CMakeLists.txt @@ -0,0 +1,36 @@ +###################################################################################### +### 0) Include the sources +###################################################################################### + +INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src) +INCLUDE_DIRECTORIES(${MO_SRC_DIR}/src) + +###################################################################################### + + +###################################################################################### +### 1) Define your target(s): just the tsp here +###################################################################################### + +SET(FUNCTION_LIB_OUTPUT_PATH ${FUNCTION_BIN_DIR}/lib) +SET(LIBRARY_OUTPUT_PATH ${FUNCTION_LIB_OUTPUT_PATH}) + +SET (FUNCTION_SOURCES affectation_eval.cpp + affectation_init.cpp + deviation.cpp + deviation_init.cpp + deviation_next.cpp + deviation_incr_eval.cpp ) + +ADD_LIBRARY(function STATIC ${FUNCTION_SOURCES}) + +###################################################################################### + + +###################################################################################### +### 2) Optionnal: define your target(s)'s version: no effect for windows +###################################################################################### + +SET(FUNCTION_VERSION "${GLOBAL_VERSION}") +SET_TARGET_PROPERTIES(function PROPERTIES VERSION "${FUNCTION_VERSION}") +###################################################################################### diff --git a/trunk/paradiseo-old-mo/tutorial/examples/function/affectation.h b/trunk/paradiseo-old-mo/tutorial/examples/function/affectation.h new file mode 100644 index 000000000..aa45da336 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/function/affectation.h @@ -0,0 +1,49 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef affectation_h +#define affectation_h + +#include +#include + +// A double that has to be minimized. +typedef eoScalarFitness< double, std::greater > functionFitness ; + +class Affectation : public EO, public std::pair +{}; + +#endif diff --git a/trunk/paradiseo-old-mo/tutorial/examples/function/affectation_eval.cpp b/trunk/paradiseo-old-mo/tutorial/examples/function/affectation_eval.cpp new file mode 100644 index 000000000..ab2d569d7 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/function/affectation_eval.cpp @@ -0,0 +1,53 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "affectation_eval.h" + +void AffectationEval :: operator () (Affectation & _affectation) +{ + double x1, x2, result; + + //std::cout << "AffectationEval" << std::endl; + + x1=_affectation.first; + x2=_affectation.second; + + result=(2*x1*x1) + (x2*x2) + (x1*x2) - (2*x1) - x2; + + //std::cout << result << std::endl; + + _affectation.fitness(result); +} diff --git a/trunk/paradiseo-old-mo/tutorial/examples/function/affectation_eval.h b/trunk/paradiseo-old-mo/tutorial/examples/function/affectation_eval.h new file mode 100644 index 000000000..affa225c9 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/function/affectation_eval.h @@ -0,0 +1,54 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef affectation_eval_h +#define affectation_eval_h + +#include + +#include "affectation.h" + +//! Affectation Evaluator +class AffectationEval : public eoEvalFunc +{ + + public : + + void operator () (Affectation & _affectation) ; + +} ; + +#endif diff --git a/trunk/paradiseo-old-mo/tutorial/examples/function/affectation_init.cpp b/trunk/paradiseo-old-mo/tutorial/examples/function/affectation_init.cpp new file mode 100644 index 000000000..6299b6607 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/function/affectation_init.cpp @@ -0,0 +1,74 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include + +#include "affectation_init.h" + +AffectationInit::AffectationInit(double _bound): bound(_bound) +{ + if(bound < 0.0) + { + std::cout << "[affectation_init.cpp][AffectationInit]: bound is negative, " << bound << " is tranformed to "; + bound = -bound; + std::cout << bound << "." << std::endl; + } +} + +void AffectationInit::operator()(Affectation & _affectation) +{ + eoBooleanGenerator booleanGenerator; + + eoUniformGenerator doubleGenerator(bound); + + //A value between 0.0 and bound. + _affectation.first = doubleGenerator(); + + //value or -value ? + if(booleanGenerator()) + { + _affectation.first= - _affectation.first; + } + + //A value between 0.0 and bound. + _affectation.second = doubleGenerator(); + + //value or -value ? + if(booleanGenerator()) + { + _affectation.second= - _affectation.second; + } +} diff --git a/trunk/paradiseo-old-mo/tutorial/examples/function/affectation_init.h b/trunk/paradiseo-old-mo/tutorial/examples/function/affectation_init.h new file mode 100644 index 000000000..a0be33a69 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/function/affectation_init.h @@ -0,0 +1,58 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef affectation_init_h +#define affectation_init_h + +#include + +#include "affectation.h" + +class AffectationInit : public eoInit + { + + public : + + AffectationInit(double _bound); + + void operator () (Affectation & _affectation) ; + + //! A bound for the initial value for the affectation + double bound; + + } ; + +#endif diff --git a/trunk/paradiseo-old-mo/tutorial/examples/function/deviation.cpp b/trunk/paradiseo-old-mo/tutorial/examples/function/deviation.cpp new file mode 100644 index 000000000..7c86c6ea5 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/function/deviation.cpp @@ -0,0 +1,44 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "deviation.h" + +void Deviation::operator () (Affectation & _affectation) +{ + _affectation.first += first; + _affectation.second += second; +} + diff --git a/trunk/paradiseo-old-mo/tutorial/examples/function/deviation.h b/trunk/paradiseo-old-mo/tutorial/examples/function/deviation.h new file mode 100644 index 000000000..a575b6235 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/function/deviation.h @@ -0,0 +1,50 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef deviation_h +#define deviation_h + +#include +#include "affectation.h" + +class Deviation : public moMove , public std :: pair +{ + public : + + void operator () (Affectation & _affectation) ; +} ; + +#endif diff --git a/trunk/paradiseo-old-mo/tutorial/examples/function/deviation_incr_eval.cpp b/trunk/paradiseo-old-mo/tutorial/examples/function/deviation_incr_eval.cpp new file mode 100644 index 000000000..440b18ae8 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/function/deviation_incr_eval.cpp @@ -0,0 +1,53 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "deviation_incr_eval.h" + +functionFitness DeviationIncrEval :: operator () (const Deviation & _move, const Affectation & _affectation) +{ + double x1, x2, deltaX1, deltaX2; + + x1=_affectation.first; + x2=_affectation.second; + + deltaX1=_move.first; + deltaX2=_move.second; + + return _affectation.fitness() + + ( 2*deltaX1*deltaX1 ) + ( deltaX2*deltaX2 ) + ( deltaX1*deltaX2 ) - ( 2*deltaX1 ) - deltaX2 + + ( deltaX1 * ( (4*x1) + x2 ) ) + ( x2*deltaX1 ); +} + diff --git a/trunk/paradiseo-old-mo/tutorial/examples/function/deviation_incr_eval.h b/trunk/paradiseo-old-mo/tutorial/examples/function/deviation_incr_eval.h new file mode 100644 index 000000000..b3f4cda25 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/function/deviation_incr_eval.h @@ -0,0 +1,51 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef deviation_incr_eval_h +#define deviation_incr_eval_h + +#include +#include "deviation.h" + +class DeviationIncrEval : public moMoveIncrEval + { + public : + + functionFitness operator () (const Deviation & _move, const Affectation & _affectation); + + } ; + +#endif diff --git a/trunk/paradiseo-old-mo/tutorial/examples/function/deviation_init.cpp b/trunk/paradiseo-old-mo/tutorial/examples/function/deviation_init.cpp new file mode 100644 index 000000000..edcfee536 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/function/deviation_init.cpp @@ -0,0 +1,56 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "deviation_init.h" + +DeviationInit::DeviationInit(double _bound): bound(_bound) +{ + if(bound < 0.0) + { + std::cout << "[deviation_init.cpp][DeviationInit]: bound is negative, " << bound << " is tranformed to "; + bound = -bound; + std::cout << bound << "." << std::endl;; + } +} + +void DeviationInit::operator () (Deviation & _move, const Affectation & _affectation) +{ + //Code only used to avoid compilation warning because _affectation is not used in this procedure. + Affectation affectation(_affectation); + + _move.first=-bound; + _move.second=-bound; +} diff --git a/trunk/paradiseo-old-mo/tutorial/examples/function/deviation_init.h b/trunk/paradiseo-old-mo/tutorial/examples/function/deviation_init.h new file mode 100644 index 000000000..48d11839b --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/function/deviation_init.h @@ -0,0 +1,61 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef deviation_init_h +#define deviation_init_h + +#include +#include + +#include "deviation.h" + +/** It sets the first couple of edges */ +class DeviationInit : public moMoveInit + { + + public : + + DeviationInit(double _bound); + + void operator () (Deviation & _move, const Affectation & _affectation) ; + + private : + + //! A bound for the initial value for the deviations + double bound; + } ; + +#endif diff --git a/trunk/paradiseo-old-mo/tutorial/examples/function/deviation_next.cpp b/trunk/paradiseo-old-mo/tutorial/examples/function/deviation_next.cpp new file mode 100644 index 000000000..bb36ae695 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/function/deviation_next.cpp @@ -0,0 +1,95 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "deviation_next.h" + +DeviationNext::DeviationNext(double _bound, double _step): bound(_bound), step(_step) +{ + if(bound<0.0) + { + std::cout << "[deviation_next.cpp][DeviationNext]: bound is negative, " << bound << " is tranformed to "; + bound=-bound; + std::cout << bound << "." << std::endl; + } + + if(step<0.0) + { + std::cout << "[deviation_next.cpp][DeviationNext]: step is negative, " << step << " is tranformed to "; + step=-step; + std::cout << step << "." << std::endl; + } + + if(step>bound) + { + std::cout << "[deviation_next.cpp][DeviationNext]: step is higher than bound, " << step << " is tranformed to "; + step = bound / 2; + std::cout << step << "." << std::endl; + } +} + +bool DeviationNext::operator () (Deviation & _move, const Affectation & _affectation) +{ + Affectation affectation(_affectation); + + double deltaX1, deltaX2; + + deltaX1=_move.first; + deltaX2=_move.second; + + //std::cout << "deltaX1 = " << deltaX1 << ", deltaX2 = " << deltaX2 << std::endl; + + if( (deltaX1 >= bound) && (deltaX2 > bound) ) + { + return false; + } + + if(deltaX2 > bound) + { + deltaX1+=step; + deltaX2=-bound; + + _move.first=deltaX1; + _move.second=deltaX2; + + return true; + } + + deltaX2+=step; + + _move.second=deltaX2; + + return true; +} diff --git a/trunk/paradiseo-old-mo/tutorial/examples/function/deviation_next.h b/trunk/paradiseo-old-mo/tutorial/examples/function/deviation_next.h new file mode 100644 index 000000000..a28689cf7 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/function/deviation_next.h @@ -0,0 +1,62 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef deviation_next_h +#define deviation_next_h + +#include +#include "deviation.h" + +class DeviationNext : public moNextMove + { + + public : + + DeviationNext (double _bound, double _step); + + bool operator () (Deviation & _move, const Affectation & _affectation) ; + + + private : + + //! A bound for the search in the neighbourhood. + double bound; + + //! A step between two values. + double step; + } ; + +#endif diff --git a/trunk/paradiseo-old-mo/tutorial/examples/function/function b/trunk/paradiseo-old-mo/tutorial/examples/function/function new file mode 100644 index 000000000..3d0cb7659 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/function/function @@ -0,0 +1,41 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +#ifndef __function +#define __function + +#include "function.h" + +#endif diff --git a/trunk/paradiseo-old-mo/tutorial/examples/function/function.h b/trunk/paradiseo-old-mo/tutorial/examples/function/function.h new file mode 100644 index 000000000..d577c546a --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/function/function.h @@ -0,0 +1,48 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __function_h +#define __function_h + +#include "affectation.h" +#include "affectation_eval.h" +#include "affectation_init.h" +#include "deviation.h" +#include "deviation_incr_eval.h" +#include "deviation_init.h" +#include "deviation_next.h" + +#endif diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/CMakeLists.txt b/trunk/paradiseo-old-mo/tutorial/examples/tsp/CMakeLists.txt new file mode 100755 index 000000000..46f666724 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/CMakeLists.txt @@ -0,0 +1,45 @@ +###################################################################################### +### 1) Include the sources +###################################################################################### + +INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src) +INCLUDE_DIRECTORIES(${MO_SRC_DIR}/src) + +###################################################################################### + + +###################################################################################### +### 2) Define your target(s): just the tsp here +###################################################################################### + +SET(TSP_LIB_OUTPUT_PATH ${TSP_BIN_DIR}/lib) +SET(LIBRARY_OUTPUT_PATH ${TSP_LIB_OUTPUT_PATH}) + +SET (TSP_SOURCES graph.cpp + route_init.cpp + route_eval.cpp + part_route_eval.cpp + edge_xover.cpp + order_xover.cpp + route_valid.cpp + partial_mapped_xover.cpp + city_swap.cpp + two_opt.cpp + two_opt_init.cpp + two_opt_next.cpp + two_opt_incr_eval.cpp + two_opt_tabu_list.cpp + two_opt_rand.cpp) + +ADD_LIBRARY(tsp STATIC ${TSP_SOURCES}) + +###################################################################################### + + +###################################################################################### +### 3) Optionnal: define your target(s)'s version: no effect for windows +###################################################################################### + +SET(TSP_VERSION "${GLOBAL_VERSION}") +SET_TARGET_PROPERTIES(tsp PROPERTIES VERSION "${TSP_VERSION}") +###################################################################################### diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/benchs/berlin52.tsp b/trunk/paradiseo-old-mo/tutorial/examples/tsp/benchs/berlin52.tsp new file mode 100644 index 000000000..6f3579180 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/benchs/berlin52.tsp @@ -0,0 +1,60 @@ +NAME: berlin52 +TYPE: TSP +COMMENT: 52 locations in Berlin (Groetschel) +DIMENSION: 52 +EDGE_WEIGHT_TYPE: EUC_2D +NODE_COORD_SECTION +1 565.0 575.0 +2 25.0 185.0 +3 345.0 750.0 +4 945.0 685.0 +5 845.0 655.0 +6 880.0 660.0 +7 25.0 230.0 +8 525.0 1000.0 +9 580.0 1175.0 +10 650.0 1130.0 +11 1605.0 620.0 +12 1220.0 580.0 +13 1465.0 200.0 +14 1530.0 5.0 +15 845.0 680.0 +16 725.0 370.0 +17 145.0 665.0 +18 415.0 635.0 +19 510.0 875.0 +20 560.0 365.0 +21 300.0 465.0 +22 520.0 585.0 +23 480.0 415.0 +24 835.0 625.0 +25 975.0 580.0 +26 1215.0 245.0 +27 1320.0 315.0 +28 1250.0 400.0 +29 660.0 180.0 +30 410.0 250.0 +31 420.0 555.0 +32 575.0 665.0 +33 1150.0 1160.0 +34 700.0 580.0 +35 685.0 595.0 +36 685.0 610.0 +37 770.0 610.0 +38 795.0 645.0 +39 720.0 635.0 +40 760.0 650.0 +41 475.0 960.0 +42 95.0 260.0 +43 875.0 920.0 +44 700.0 500.0 +45 555.0 815.0 +46 830.0 485.0 +47 1170.0 65.0 +48 830.0 610.0 +49 605.0 625.0 +50 595.0 360.0 +51 1340.0 725.0 +52 1740.0 245.0 +EOF + diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/benchs/eil101.tsp b/trunk/paradiseo-old-mo/tutorial/examples/tsp/benchs/eil101.tsp new file mode 100644 index 000000000..46ff3bcc6 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/benchs/eil101.tsp @@ -0,0 +1,108 @@ +NAME: eil101 +TYPE: TSP +COMMENT: 101-city problem (Christofides/Eilon) +DIMENSION: 101 +EDGE_WEIGHT_TYPE: EUC_2D +NODE_COORD_SECTION +1 41 49 +2 35 17 +3 55 45 +4 55 20 +5 15 30 +6 25 30 +7 20 50 +8 10 43 +9 55 60 +10 30 60 +11 20 65 +12 50 35 +13 30 25 +14 15 10 +15 30 5 +16 10 20 +17 5 30 +18 20 40 +19 15 60 +20 45 65 +21 45 20 +22 45 10 +23 55 5 +24 65 35 +25 65 20 +26 45 30 +27 35 40 +28 41 37 +29 64 42 +30 40 60 +31 31 52 +32 35 69 +33 53 52 +34 65 55 +35 63 65 +36 2 60 +37 20 20 +38 5 5 +39 60 12 +40 40 25 +41 42 7 +42 24 12 +43 23 3 +44 11 14 +45 6 38 +46 2 48 +47 8 56 +48 13 52 +49 6 68 +50 47 47 +51 49 58 +52 27 43 +53 37 31 +54 57 29 +55 63 23 +56 53 12 +57 32 12 +58 36 26 +59 21 24 +60 17 34 +61 12 24 +62 24 58 +63 27 69 +64 15 77 +65 62 77 +66 49 73 +67 67 5 +68 56 39 +69 37 47 +70 37 56 +71 57 68 +72 47 16 +73 44 17 +74 46 13 +75 49 11 +76 49 42 +77 53 43 +78 61 52 +79 57 48 +80 56 37 +81 55 54 +82 15 47 +83 14 37 +84 11 31 +85 16 22 +86 4 18 +87 28 18 +88 26 52 +89 26 35 +90 31 67 +91 15 19 +92 22 22 +93 18 24 +94 26 27 +95 25 24 +96 22 27 +97 25 21 +98 19 21 +99 20 26 +100 18 18 +101 35 35 +EOF diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/benchs/pr2392.tsp b/trunk/paradiseo-old-mo/tutorial/examples/tsp/benchs/pr2392.tsp new file mode 100644 index 000000000..2cd96eff4 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/benchs/pr2392.tsp @@ -0,0 +1,2399 @@ +NAME: pr2392 +TYPE: TSP +COMMENT: 2392-city problem (Padberg/Rinaldi) +DIMENSION: 2392 +EDGE_WEIGHT_TYPE: EUC_2D +NODE_COORD_SECTION +1 1.63900e+03 2.15600e+03 +2 1.87500e+03 2.92500e+03 +3 2.15000e+03 2.92500e+03 +4 2.42500e+03 2.92500e+03 +5 2.52500e+03 2.67500e+03 +6 2.52500e+03 2.57500e+03 +7 2.52500e+03 2.37500e+03 +8 2.52500e+03 2.27500e+03 +9 2.52500e+03 2.17500e+03 +10 2.78600e+03 2.14800e+03 +11 2.78600e+03 2.24900e+03 +12 2.78600e+03 2.35200e+03 +13 2.78500e+03 2.45100e+03 +14 2.78500e+03 2.55200e+03 +15 2.78700e+03 2.65100e+03 +16 2.92500e+03 2.92500e+03 +17 3.19800e+03 2.92500e+03 +18 3.47500e+03 2.92500e+03 +19 3.72500e+03 2.92500e+03 +20 3.67500e+03 2.67500e+03 +21 3.67500e+03 2.57500e+03 +22 3.67500e+03 2.37500e+03 +23 3.67500e+03 2.27500e+03 +24 3.67500e+03 2.17500e+03 +25 4.18900e+03 2.15600e+03 +26 4.19000e+03 2.25600e+03 +27 4.19000e+03 2.35500e+03 +28 4.18900e+03 2.45600e+03 +29 4.18900e+03 2.55600e+03 +30 4.19000e+03 2.65600e+03 +31 4.27500e+03 2.97500e+03 +32 4.42500e+03 2.92500e+03 +33 4.70000e+03 2.92500e+03 +34 4.97500e+03 2.92500e+03 +35 5.07500e+03 2.67500e+03 +36 5.07500e+03 2.57500e+03 +37 5.07500e+03 2.37500e+03 +38 5.07500e+03 2.27500e+03 +39 5.07500e+03 2.17500e+03 +40 5.33600e+03 2.14800e+03 +41 5.33600e+03 2.24900e+03 +42 5.33600e+03 2.35200e+03 +43 5.33500e+03 2.45100e+03 +44 5.33500e+03 2.55200e+03 +45 5.33700e+03 2.65100e+03 +46 5.47500e+03 2.92500e+03 +47 5.74800e+03 2.92500e+03 +48 6.02500e+03 2.92500e+03 +49 6.27500e+03 2.92500e+03 +50 6.22500e+03 2.67500e+03 +51 6.22500e+03 2.57500e+03 +52 6.22500e+03 2.37500e+03 +53 6.22500e+03 2.27500e+03 +54 6.22500e+03 2.17500e+03 +55 6.73900e+03 2.15600e+03 +56 6.74000e+03 2.25600e+03 +57 6.74000e+03 2.35500e+03 +58 6.73900e+03 2.45600e+03 +59 6.73900e+03 2.55600e+03 +60 6.74000e+03 2.65600e+03 +61 6.82500e+03 2.97500e+03 +62 6.97500e+03 2.92500e+03 +63 7.25000e+03 2.92500e+03 +64 7.52500e+03 2.92500e+03 +65 7.62500e+03 2.67500e+03 +66 7.62500e+03 2.57500e+03 +67 7.62500e+03 2.37500e+03 +68 7.62500e+03 2.27500e+03 +69 7.62500e+03 2.17500e+03 +70 7.88600e+03 2.14800e+03 +71 7.88600e+03 2.24900e+03 +72 7.88600e+03 2.35200e+03 +73 7.88500e+03 2.45100e+03 +74 7.88500e+03 2.55200e+03 +75 7.88700e+03 2.65100e+03 +76 8.02500e+03 2.92500e+03 +77 8.29800e+03 2.92500e+03 +78 8.57500e+03 2.92500e+03 +79 8.82500e+03 2.92500e+03 +80 8.77500e+03 2.67500e+03 +81 8.77500e+03 2.57500e+03 +82 8.77500e+03 2.37500e+03 +83 8.77500e+03 2.27500e+03 +84 8.77500e+03 2.17500e+03 +85 9.28900e+03 2.15600e+03 +86 9.29000e+03 2.25600e+03 +87 9.29000e+03 2.35500e+03 +88 9.28900e+03 2.45600e+03 +89 9.28900e+03 2.55600e+03 +90 9.29000e+03 2.65600e+03 +91 9.37500e+03 2.97500e+03 +92 9.52500e+03 2.92500e+03 +93 9.80000e+03 2.92500e+03 +94 1.00750e+04 2.92500e+03 +95 1.01750e+04 2.67500e+03 +96 1.01750e+04 2.57500e+03 +97 1.01750e+04 2.37500e+03 +98 1.01750e+04 2.27500e+03 +99 1.01750e+04 2.17500e+03 +100 1.04360e+04 2.14800e+03 +101 1.04360e+04 2.24900e+03 +102 1.04360e+04 2.35200e+03 +103 1.04350e+04 2.45100e+03 +104 1.04350e+04 2.55200e+03 +105 1.04370e+04 2.65100e+03 +106 1.05750e+04 2.92500e+03 +107 1.08480e+04 2.92500e+03 +108 1.11250e+04 2.92500e+03 +109 1.13250e+04 2.17500e+03 +110 1.13250e+04 2.27500e+03 +111 1.13250e+04 2.37500e+03 +112 1.13250e+04 2.57500e+03 +113 1.13250e+04 2.67500e+03 +114 1.13750e+04 2.92500e+03 +115 1.13750e+04 3.12500e+03 +116 1.14000e+04 3.22500e+03 +117 1.14000e+04 3.32500e+03 +118 1.14000e+04 3.47500e+03 +119 1.14000e+04 3.62500e+03 +120 1.13000e+04 3.82500e+03 +121 1.11250e+04 3.82500e+03 +122 1.11250e+04 3.92500e+03 +123 1.10250e+04 3.97500e+03 +124 1.09250e+04 3.97500e+03 +125 1.09250e+04 3.87500e+03 +126 1.05500e+04 3.92500e+03 +127 1.05500e+04 3.72500e+03 +128 1.05500e+04 3.32500e+03 +129 1.01000e+04 3.32500e+03 +130 1.01000e+04 3.72500e+03 +131 1.01000e+04 3.92500e+03 +132 9.72500e+03 3.87500e+03 +133 9.72500e+03 3.97500e+03 +134 9.62500e+03 3.97500e+03 +135 9.55000e+03 3.87500e+03 +136 9.42500e+03 3.87500e+03 +137 9.27500e+03 3.90000e+03 +138 9.25000e+03 3.70000e+03 +139 9.25000e+03 3.57500e+03 +140 9.25000e+03 3.47500e+03 +141 9.25000e+03 3.37500e+03 +142 9.25000e+03 3.27500e+03 +143 8.82500e+03 3.12500e+03 +144 8.85000e+03 3.22500e+03 +145 8.85000e+03 3.32500e+03 +146 8.85000e+03 3.47500e+03 +147 8.85000e+03 3.62500e+03 +148 8.75000e+03 3.82500e+03 +149 8.57500e+03 3.82500e+03 +150 8.57500e+03 3.92500e+03 +151 8.47500e+03 3.97500e+03 +152 8.37500e+03 3.87500e+03 +153 8.37500e+03 3.97500e+03 +154 8.40000e+03 4.12500e+03 +155 8.30000e+03 4.17500e+03 +156 8.40000e+03 4.27500e+03 +157 8.50000e+03 4.17500e+03 +158 8.67500e+03 4.32500e+03 +159 8.77500e+03 4.42500e+03 +160 8.82500e+03 4.32500e+03 +161 9.27500e+03 4.27500e+03 +162 9.37500e+03 4.27500e+03 +163 9.32500e+03 4.37500e+03 +164 9.40000e+03 4.45000e+03 +165 9.40000e+03 4.55000e+03 +166 9.32500e+03 4.50000e+03 +167 9.21500e+03 4.56000e+03 +168 9.21500e+03 4.71000e+03 +169 9.37500e+03 4.77500e+03 +170 9.21500e+03 4.86000e+03 +171 9.21500e+03 5.01000e+03 +172 9.21500e+03 5.16000e+03 +173 9.21500e+03 5.31000e+03 +174 9.21500e+03 5.46000e+03 +175 9.21500e+03 5.61000e+03 +176 9.47500e+03 5.67500e+03 +177 9.47500e+03 5.52500e+03 +178 9.47500e+03 5.42500e+03 +179 9.47500e+03 5.27500e+03 +180 9.47500e+03 5.02500e+03 +181 9.57500e+03 5.07500e+03 +182 9.72500e+03 5.07500e+03 +183 9.67500e+03 4.97500e+03 +184 9.57500e+03 4.92500e+03 +185 9.52500e+03 4.77500e+03 +186 9.60000e+03 4.67500e+03 +187 9.62500e+03 4.77500e+03 +188 9.77500e+03 4.77500e+03 +189 9.97500e+03 4.60000e+03 +190 9.87500e+03 4.60000e+03 +191 9.80000e+03 4.52500e+03 +192 9.70000e+03 4.52500e+03 +193 9.70000e+03 4.42500e+03 +194 9.80000e+03 4.42500e+03 +195 9.80000e+03 4.32500e+03 +196 9.70000e+03 4.27500e+03 +197 9.60000e+03 4.17500e+03 +198 9.70000e+03 4.12500e+03 +199 9.80000e+03 4.17500e+03 +200 9.87500e+03 4.27500e+03 +201 9.97500e+03 4.27500e+03 +202 1.00750e+04 4.17500e+03 +203 1.02750e+04 4.17500e+03 +204 1.03750e+04 4.17500e+03 +205 1.05750e+04 4.17500e+03 +206 1.06750e+04 4.27500e+03 +207 1.07750e+04 4.27500e+03 +208 1.08500e+04 4.32500e+03 +209 1.08500e+04 4.42500e+03 +210 1.08500e+04 4.52500e+03 +211 1.07750e+04 4.57500e+03 +212 1.06750e+04 4.57500e+03 +213 1.08750e+04 4.77500e+03 +214 1.10250e+04 4.77500e+03 +215 1.11750e+04 4.72500e+03 +216 1.10500e+04 4.67500e+03 +217 1.09500e+04 4.50000e+03 +218 1.09500e+04 4.40000e+03 +219 1.09500e+04 4.27500e+03 +220 1.08500e+04 4.17500e+03 +221 1.09500e+04 4.12500e+03 +222 1.10500e+04 4.17500e+03 +223 1.12250e+04 4.32500e+03 +224 1.13750e+04 4.32500e+03 +225 1.13250e+04 4.42500e+03 +226 1.13250e+04 4.57500e+03 +227 1.13250e+04 4.67500e+03 +228 1.13250e+04 4.77500e+03 +229 1.13250e+04 4.92500e+03 +230 1.14500e+04 4.92500e+03 +231 1.14500e+04 5.07500e+03 +232 1.14220e+04 5.20400e+03 +233 1.14250e+04 5.32500e+03 +234 1.13250e+04 5.27500e+03 +235 1.13250e+04 5.37500e+03 +236 1.11750e+04 5.37500e+03 +237 1.11750e+04 5.27500e+03 +238 1.11250e+04 5.17500e+03 +239 1.11000e+04 5.02500e+03 +240 1.09750e+04 4.97500e+03 +241 1.09250e+04 5.07500e+03 +242 1.09500e+04 5.17500e+03 +243 1.09000e+04 5.27500e+03 +244 1.09000e+04 5.37500e+03 +245 1.08000e+04 5.17500e+03 +246 1.05250e+04 5.17500e+03 +247 1.03250e+04 5.17500e+03 +248 1.03250e+04 5.02500e+03 +249 1.04250e+04 5.07500e+03 +250 1.04750e+04 4.97500e+03 +251 1.03250e+04 4.87500e+03 +252 1.01750e+04 4.97500e+03 +253 1.02250e+04 5.07500e+03 +254 1.01250e+04 5.17500e+03 +255 9.97500e+03 5.17500e+03 +256 1.00500e+04 5.25000e+03 +257 1.00500e+04 5.35000e+03 +258 1.00250e+04 5.45000e+03 +259 1.01750e+04 5.45000e+03 +260 1.03250e+04 5.45000e+03 +261 1.04750e+04 5.45000e+03 +262 1.05750e+04 5.45000e+03 +263 1.06750e+04 5.45000e+03 +264 1.05250e+04 6.02500e+03 +265 1.05250e+04 6.12500e+03 +266 1.06750e+04 6.12500e+03 +267 1.08250e+04 6.02500e+03 +268 1.10250e+04 6.05000e+03 +269 1.12240e+04 5.90800e+03 +270 1.14000e+04 5.97500e+03 +271 1.14000e+04 6.37500e+03 +272 1.14000e+04 6.57500e+03 +273 1.11750e+04 6.57500e+03 +274 1.10250e+04 6.45000e+03 +275 1.09750e+04 6.67500e+03 +276 1.10750e+04 6.77500e+03 +277 1.09750e+04 6.87500e+03 +278 1.11750e+04 6.97500e+03 +279 1.13750e+04 6.97500e+03 +280 1.13250e+04 7.07500e+03 +281 1.14000e+04 7.15000e+03 +282 1.11250e+04 7.15000e+03 +283 1.09750e+04 7.15000e+03 +284 1.08750e+04 7.32500e+03 +285 1.09250e+04 7.42500e+03 +286 1.10750e+04 7.42500e+03 +287 1.11750e+04 7.47500e+03 +288 1.10750e+04 7.57500e+03 +289 1.11750e+04 7.62500e+03 +290 1.11750e+04 7.72500e+03 +291 1.10250e+04 7.72500e+03 +292 1.10250e+04 7.82500e+03 +293 1.11750e+04 7.82500e+03 +294 1.13250e+04 7.87500e+03 +295 1.14250e+04 7.92500e+03 +296 1.14250e+04 8.07500e+03 +297 1.13250e+04 8.07500e+03 +298 1.12750e+04 8.17500e+03 +299 1.14250e+04 8.22500e+03 +300 1.14250e+04 8.37500e+03 +301 1.12750e+04 8.32500e+03 +302 1.11750e+04 8.32500e+03 +303 1.10750e+04 8.22500e+03 +304 1.09750e+04 8.22500e+03 +305 1.09250e+04 7.97500e+03 +306 1.07750e+04 7.82500e+03 +307 1.08250e+04 7.60000e+03 +308 1.07250e+04 7.57500e+03 +309 1.07750e+04 7.42500e+03 +310 1.06750e+04 7.42500e+03 +311 1.05250e+04 7.42500e+03 +312 1.05250e+04 7.57500e+03 +313 1.04500e+04 7.75000e+03 +314 1.03000e+04 7.75000e+03 +315 1.04250e+04 7.87500e+03 +316 1.05250e+04 7.92500e+03 +317 1.05750e+04 7.82500e+03 +318 1.06250e+04 7.97500e+03 +319 1.07250e+04 7.97500e+03 +320 1.07250e+04 8.07500e+03 +321 1.06250e+04 8.12500e+03 +322 1.05250e+04 8.07500e+03 +323 1.04250e+04 8.02500e+03 +324 1.04250e+04 8.12500e+03 +325 1.02500e+04 8.22500e+03 +326 1.01500e+04 8.22500e+03 +327 1.02250e+04 8.12500e+03 +328 1.02750e+04 7.97500e+03 +329 1.01250e+04 7.97500e+03 +330 1.00000e+04 7.87500e+03 +331 1.00000e+04 7.77500e+03 +332 9.82500e+03 7.82500e+03 +333 9.62500e+03 7.72500e+03 +334 9.47500e+03 7.72500e+03 +335 9.42500e+03 7.62500e+03 +336 9.57500e+03 7.62500e+03 +337 9.62500e+03 7.47500e+03 +338 9.72500e+03 7.57500e+03 +339 9.82500e+03 7.47500e+03 +340 1.00250e+04 7.52500e+03 +341 9.97500e+03 7.42500e+03 +342 9.92500e+03 7.27500e+03 +343 9.82500e+03 7.07500e+03 +344 9.62500e+03 7.07500e+03 +345 9.72500e+03 6.97500e+03 +346 9.87500e+03 6.77500e+03 +347 9.72500e+03 6.77500e+03 +348 9.57500e+03 6.82500e+03 +349 9.57500e+03 6.67500e+03 +350 9.72500e+03 6.42500e+03 +351 9.62500e+03 6.20000e+03 +352 9.72500e+03 6.02500e+03 +353 9.62500e+03 6.00000e+03 +354 9.22500e+03 6.37500e+03 +355 9.22500e+03 6.52500e+03 +356 9.37500e+03 6.52500e+03 +357 9.37500e+03 6.67500e+03 +358 9.22500e+03 6.67500e+03 +359 9.22500e+03 6.87500e+03 +360 9.22500e+03 7.07500e+03 +361 9.22600e+03 7.25900e+03 +362 9.22500e+03 7.26000e+03 +363 9.22600e+03 7.40900e+03 +364 9.22500e+03 7.41000e+03 +365 9.22500e+03 7.56000e+03 +366 9.22600e+03 7.56000e+03 +367 9.22500e+03 7.71000e+03 +368 9.22500e+03 7.71100e+03 +369 9.32500e+03 7.82500e+03 +370 9.22500e+03 7.87500e+03 +371 9.22500e+03 7.97500e+03 +372 9.22500e+03 8.07500e+03 +373 9.22500e+03 8.17500e+03 +374 9.22500e+03 8.27500e+03 +375 9.22500e+03 8.37500e+03 +376 9.22500e+03 8.47500e+03 +377 9.27500e+03 8.82500e+03 +378 9.47500e+03 8.82500e+03 +379 9.57800e+03 8.82000e+03 +380 9.84700e+03 8.70300e+03 +381 9.87500e+03 8.82500e+03 +382 1.00250e+04 8.72500e+03 +383 1.00750e+04 8.82500e+03 +384 1.01750e+04 8.72500e+03 +385 1.01000e+04 8.57500e+03 +386 1.02500e+04 8.37500e+03 +387 1.02500e+04 8.47500e+03 +388 1.02500e+04 8.62500e+03 +389 1.04750e+04 8.77500e+03 +390 1.05750e+04 8.77500e+03 +391 1.06750e+04 8.77500e+03 +392 1.07750e+04 8.77500e+03 +393 1.09250e+04 8.77500e+03 +394 1.08750e+04 8.62500e+03 +395 1.08750e+04 8.52500e+03 +396 1.09750e+04 8.57500e+03 +397 1.11750e+04 8.47500e+03 +398 1.12750e+04 8.42500e+03 +399 1.13500e+04 8.57500e+03 +400 1.14500e+04 8.67500e+03 +401 1.13500e+04 8.77500e+03 +402 1.13250e+04 9.32500e+03 +403 1.13250e+04 9.42500e+03 +404 1.13250e+04 9.52500e+03 +405 1.13250e+04 9.72500e+03 +406 1.13250e+04 9.82500e+03 +407 1.11250e+04 1.00750e+04 +408 1.13750e+04 1.00750e+04 +409 1.13750e+04 1.02750e+04 +410 1.14000e+04 1.03750e+04 +411 1.14000e+04 1.04750e+04 +412 1.14000e+04 1.06250e+04 +413 1.14000e+04 1.07750e+04 +414 1.13000e+04 1.09750e+04 +415 1.11250e+04 1.09750e+04 +416 1.11250e+04 1.10750e+04 +417 1.10250e+04 1.11250e+04 +418 1.09250e+04 1.11250e+04 +419 1.09250e+04 1.10250e+04 +420 1.05500e+04 1.08750e+04 +421 1.05500e+04 1.10750e+04 +422 1.02750e+04 1.13250e+04 +423 1.03750e+04 1.13250e+04 +424 1.05750e+04 1.13250e+04 +425 1.06750e+04 1.14250e+04 +426 1.07750e+04 1.14250e+04 +427 1.08500e+04 1.14750e+04 +428 1.08500e+04 1.15750e+04 +429 1.08500e+04 1.16750e+04 +430 1.07750e+04 1.17250e+04 +431 1.06750e+04 1.17250e+04 +432 1.08750e+04 1.19250e+04 +433 1.10250e+04 1.19250e+04 +434 1.11750e+04 1.18750e+04 +435 1.10500e+04 1.18250e+04 +436 1.09500e+04 1.16500e+04 +437 1.09500e+04 1.15500e+04 +438 1.09500e+04 1.14250e+04 +439 1.08500e+04 1.13250e+04 +440 1.09500e+04 1.12750e+04 +441 1.10500e+04 1.13250e+04 +442 1.12250e+04 1.14750e+04 +443 1.13750e+04 1.14750e+04 +444 1.13250e+04 1.15750e+04 +445 1.13250e+04 1.17250e+04 +446 1.13250e+04 1.18250e+04 +447 1.13250e+04 1.19250e+04 +448 1.13250e+04 1.20750e+04 +449 1.14500e+04 1.20750e+04 +450 1.14500e+04 1.22250e+04 +451 1.14220e+04 1.23540e+04 +452 1.14250e+04 1.24750e+04 +453 1.13250e+04 1.24250e+04 +454 1.13250e+04 1.25250e+04 +455 1.11750e+04 1.25250e+04 +456 1.11750e+04 1.24250e+04 +457 1.11250e+04 1.23250e+04 +458 1.11000e+04 1.21750e+04 +459 1.09750e+04 1.21250e+04 +460 1.09250e+04 1.22250e+04 +461 1.09500e+04 1.23250e+04 +462 1.09000e+04 1.24250e+04 +463 1.09000e+04 1.25250e+04 +464 1.08000e+04 1.23250e+04 +465 1.05250e+04 1.23250e+04 +466 1.04250e+04 1.22250e+04 +467 1.04750e+04 1.21250e+04 +468 1.03250e+04 1.20250e+04 +469 1.01750e+04 1.21250e+04 +470 1.02250e+04 1.22250e+04 +471 1.03250e+04 1.21750e+04 +472 1.03250e+04 1.23250e+04 +473 1.01250e+04 1.23250e+04 +474 9.97500e+03 1.23250e+04 +475 1.00500e+04 1.24000e+04 +476 1.00500e+04 1.25000e+04 +477 1.00250e+04 1.26000e+04 +478 1.01750e+04 1.26000e+04 +479 1.03250e+04 1.26000e+04 +480 1.04750e+04 1.26000e+04 +481 1.05750e+04 1.26000e+04 +482 1.06750e+04 1.26000e+04 +483 1.05250e+04 1.31750e+04 +484 1.05250e+04 1.32750e+04 +485 1.06750e+04 1.32750e+04 +486 1.08250e+04 1.31750e+04 +487 1.10250e+04 1.32000e+04 +488 1.12240e+04 1.30580e+04 +489 1.14000e+04 1.31250e+04 +490 1.14000e+04 1.35250e+04 +491 1.14000e+04 1.37250e+04 +492 1.11750e+04 1.37250e+04 +493 1.10250e+04 1.36000e+04 +494 1.09750e+04 1.38250e+04 +495 1.10750e+04 1.39250e+04 +496 1.09750e+04 1.40250e+04 +497 1.11750e+04 1.41250e+04 +498 1.13750e+04 1.41250e+04 +499 1.13250e+04 1.42250e+04 +500 1.14000e+04 1.43000e+04 +501 1.11250e+04 1.43000e+04 +502 1.09750e+04 1.43000e+04 +503 1.08750e+04 1.44750e+04 +504 1.09250e+04 1.45750e+04 +505 1.08250e+04 1.47500e+04 +506 1.07250e+04 1.47250e+04 +507 1.07750e+04 1.45750e+04 +508 1.06750e+04 1.45750e+04 +509 1.05250e+04 1.45750e+04 +510 1.05250e+04 1.47250e+04 +511 1.04500e+04 1.49000e+04 +512 1.03000e+04 1.49000e+04 +513 1.04250e+04 1.50250e+04 +514 1.04250e+04 1.51750e+04 +515 1.04250e+04 1.52750e+04 +516 1.05250e+04 1.52250e+04 +517 1.06250e+04 1.52750e+04 +518 1.07250e+04 1.52250e+04 +519 1.07250e+04 1.51250e+04 +520 1.06250e+04 1.51250e+04 +521 1.05250e+04 1.50750e+04 +522 1.05750e+04 1.49750e+04 +523 1.07750e+04 1.49750e+04 +524 1.09250e+04 1.51250e+04 +525 1.10250e+04 1.49750e+04 +526 1.10250e+04 1.48750e+04 +527 1.10750e+04 1.47250e+04 +528 1.10750e+04 1.45750e+04 +529 1.11750e+04 1.46250e+04 +530 1.11750e+04 1.47750e+04 +531 1.11750e+04 1.48750e+04 +532 1.11750e+04 1.49750e+04 +533 1.13250e+04 1.50250e+04 +534 1.14250e+04 1.50750e+04 +535 1.14250e+04 1.52250e+04 +536 1.13250e+04 1.52250e+04 +537 1.12750e+04 1.53250e+04 +538 1.14250e+04 1.53750e+04 +539 1.14250e+04 1.55250e+04 +540 1.13500e+04 1.57250e+04 +541 1.14500e+04 1.58250e+04 +542 1.13500e+04 1.59250e+04 +543 1.11750e+04 1.56250e+04 +544 1.12750e+04 1.55750e+04 +545 1.12750e+04 1.54750e+04 +546 1.11750e+04 1.54750e+04 +547 1.10750e+04 1.53750e+04 +548 1.09750e+04 1.53750e+04 +549 1.08750e+04 1.56750e+04 +550 1.09750e+04 1.57250e+04 +551 1.08750e+04 1.57750e+04 +552 1.09250e+04 1.59250e+04 +553 1.07750e+04 1.59250e+04 +554 1.06750e+04 1.59250e+04 +555 1.05750e+04 1.59250e+04 +556 1.04750e+04 1.59250e+04 +557 1.02500e+04 1.57750e+04 +558 1.01750e+04 1.58750e+04 +559 1.00750e+04 1.59750e+04 +560 9.87500e+03 1.59750e+04 +561 9.84700e+03 1.58530e+04 +562 1.00250e+04 1.58750e+04 +563 1.01000e+04 1.57250e+04 +564 1.02500e+04 1.56250e+04 +565 1.02500e+04 1.55250e+04 +566 1.02500e+04 1.53750e+04 +567 1.01500e+04 1.53750e+04 +568 1.02250e+04 1.52750e+04 +569 1.02750e+04 1.51250e+04 +570 1.01250e+04 1.51250e+04 +571 1.00000e+04 1.50250e+04 +572 1.00000e+04 1.49250e+04 +573 9.82500e+03 1.49750e+04 +574 9.62500e+03 1.48750e+04 +575 9.47500e+03 1.48750e+04 +576 9.42500e+03 1.47750e+04 +577 9.57500e+03 1.47750e+04 +578 9.62500e+03 1.46250e+04 +579 9.72500e+03 1.47250e+04 +580 9.82500e+03 1.46250e+04 +581 1.00250e+04 1.46750e+04 +582 9.97500e+03 1.45750e+04 +583 9.92500e+03 1.44250e+04 +584 9.82500e+03 1.42250e+04 +585 9.62500e+03 1.42250e+04 +586 9.72500e+03 1.41250e+04 +587 9.87500e+03 1.39250e+04 +588 9.72500e+03 1.39250e+04 +589 9.57500e+03 1.39750e+04 +590 9.57500e+03 1.38250e+04 +591 9.72500e+03 1.35750e+04 +592 9.62500e+03 1.33500e+04 +593 9.72500e+03 1.31750e+04 +594 9.62500e+03 1.31500e+04 +595 9.22500e+03 1.35250e+04 +596 9.22500e+03 1.36750e+04 +597 9.37500e+03 1.36750e+04 +598 9.37500e+03 1.38250e+04 +599 9.22500e+03 1.38250e+04 +600 9.22500e+03 1.40250e+04 +601 9.22500e+03 1.42250e+04 +602 9.22600e+03 1.44090e+04 +603 9.22500e+03 1.44100e+04 +604 9.22600e+03 1.45590e+04 +605 9.22500e+03 1.45600e+04 +606 9.22500e+03 1.47100e+04 +607 9.22600e+03 1.47100e+04 +608 9.22500e+03 1.48600e+04 +609 9.22500e+03 1.48610e+04 +610 9.32500e+03 1.49750e+04 +611 9.22500e+03 1.50250e+04 +612 9.22500e+03 1.51250e+04 +613 9.22500e+03 1.52250e+04 +614 9.22500e+03 1.53250e+04 +615 9.22500e+03 1.54250e+04 +616 9.22500e+03 1.55250e+04 +617 9.22500e+03 1.56250e+04 +618 9.57800e+03 1.59700e+04 +619 9.47500e+03 1.59750e+04 +620 9.27500e+03 1.59750e+04 +621 8.90000e+03 1.58250e+04 +622 8.80000e+03 1.59250e+04 +623 8.80000e+03 1.57250e+04 +624 8.72500e+03 1.55750e+04 +625 8.62500e+03 1.56250e+04 +626 8.42500e+03 1.57250e+04 +627 8.32500e+03 1.56750e+04 +628 8.32500e+03 1.57750e+04 +629 8.37500e+03 1.59250e+04 +630 8.22500e+03 1.59250e+04 +631 8.12500e+03 1.59250e+04 +632 8.02500e+03 1.59250e+04 +633 7.92500e+03 1.59250e+04 +634 7.70000e+03 1.57750e+04 +635 7.70000e+03 1.56250e+04 +636 7.70000e+03 1.55250e+04 +637 7.55000e+03 1.57250e+04 +638 7.62500e+03 1.58750e+04 +639 7.52500e+03 1.59750e+04 +640 7.47500e+03 1.58750e+04 +641 7.32500e+03 1.59750e+04 +642 7.29700e+03 1.58530e+04 +643 7.02800e+03 1.59700e+04 +644 6.92500e+03 1.59750e+04 +645 6.72500e+03 1.59750e+04 +646 6.67500e+03 1.56250e+04 +647 6.67500e+03 1.55250e+04 +648 6.67500e+03 1.54250e+04 +649 6.67500e+03 1.53250e+04 +650 6.67500e+03 1.52250e+04 +651 6.67500e+03 1.51250e+04 +652 6.67500e+03 1.50250e+04 +653 6.77500e+03 1.49750e+04 +654 6.67500e+03 1.48610e+04 +655 6.67500e+03 1.48600e+04 +656 6.67600e+03 1.47100e+04 +657 6.67500e+03 1.47100e+04 +658 6.67500e+03 1.45600e+04 +659 6.67600e+03 1.45590e+04 +660 6.67500e+03 1.44100e+04 +661 6.67600e+03 1.44090e+04 +662 6.67500e+03 1.42250e+04 +663 6.67500e+03 1.40250e+04 +664 6.67500e+03 1.38250e+04 +665 6.82500e+03 1.38250e+04 +666 6.82500e+03 1.36750e+04 +667 6.67500e+03 1.36750e+04 +668 6.67500e+03 1.35250e+04 +669 7.07500e+03 1.31500e+04 +670 7.17500e+03 1.31750e+04 +671 7.07500e+03 1.33500e+04 +672 7.17500e+03 1.35750e+04 +673 7.02500e+03 1.38250e+04 +674 7.02500e+03 1.39750e+04 +675 7.17500e+03 1.39250e+04 +676 7.32500e+03 1.39250e+04 +677 7.17500e+03 1.41250e+04 +678 7.07500e+03 1.42250e+04 +679 7.27500e+03 1.42250e+04 +680 7.37500e+03 1.44250e+04 +681 7.42500e+03 1.45750e+04 +682 7.47500e+03 1.46750e+04 +683 7.27500e+03 1.46250e+04 +684 7.17500e+03 1.47250e+04 +685 7.07500e+03 1.46250e+04 +686 7.02500e+03 1.47750e+04 +687 6.87500e+03 1.47750e+04 +688 6.92500e+03 1.48750e+04 +689 7.07500e+03 1.48750e+04 +690 7.27500e+03 1.49750e+04 +691 7.45000e+03 1.49250e+04 +692 7.45000e+03 1.50250e+04 +693 7.57500e+03 1.51250e+04 +694 7.72500e+03 1.51250e+04 +695 7.67500e+03 1.52750e+04 +696 7.60000e+03 1.53750e+04 +697 7.70000e+03 1.53750e+04 +698 7.87500e+03 1.52750e+04 +699 7.87500e+03 1.51750e+04 +700 7.97500e+03 1.52250e+04 +701 8.07500e+03 1.52750e+04 +702 8.17500e+03 1.52250e+04 +703 8.17500e+03 1.51250e+04 +704 8.07500e+03 1.51250e+04 +705 8.02500e+03 1.49750e+04 +706 7.97500e+03 1.50750e+04 +707 7.87500e+03 1.50250e+04 +708 7.75000e+03 1.49000e+04 +709 7.90000e+03 1.49000e+04 +710 7.97500e+03 1.47250e+04 +711 7.97500e+03 1.45750e+04 +712 8.12500e+03 1.45750e+04 +713 8.22500e+03 1.45750e+04 +714 8.17500e+03 1.47250e+04 +715 8.27500e+03 1.47500e+04 +716 8.22500e+03 1.49750e+04 +717 8.37500e+03 1.51250e+04 +718 8.42500e+03 1.53750e+04 +719 8.52500e+03 1.53750e+04 +720 8.62500e+03 1.54750e+04 +721 8.72500e+03 1.54750e+04 +722 8.87500e+03 1.55250e+04 +723 8.87500e+03 1.53750e+04 +724 8.72500e+03 1.53250e+04 +725 8.77500e+03 1.52250e+04 +726 8.87500e+03 1.52250e+04 +727 8.87500e+03 1.50750e+04 +728 8.77500e+03 1.50250e+04 +729 8.62500e+03 1.49750e+04 +730 8.47500e+03 1.49750e+04 +731 8.47500e+03 1.48750e+04 +732 8.62500e+03 1.48750e+04 +733 8.62500e+03 1.47750e+04 +734 8.52500e+03 1.47250e+04 +735 8.62500e+03 1.46250e+04 +736 8.52500e+03 1.45750e+04 +737 8.37500e+03 1.45750e+04 +738 8.32500e+03 1.44750e+04 +739 8.42500e+03 1.43000e+04 +740 8.57500e+03 1.43000e+04 +741 8.85000e+03 1.43000e+04 +742 8.77500e+03 1.42250e+04 +743 8.82500e+03 1.41250e+04 +744 8.62500e+03 1.41250e+04 +745 8.42500e+03 1.40250e+04 +746 8.52500e+03 1.39250e+04 +747 8.42500e+03 1.38250e+04 +748 8.47500e+03 1.36000e+04 +749 8.62500e+03 1.37250e+04 +750 8.85000e+03 1.37250e+04 +751 8.85000e+03 1.35250e+04 +752 8.85000e+03 1.31250e+04 +753 8.67400e+03 1.30580e+04 +754 8.47500e+03 1.32000e+04 +755 8.27500e+03 1.31750e+04 +756 8.12500e+03 1.32750e+04 +757 7.97500e+03 1.32750e+04 +758 7.97500e+03 1.31750e+04 +759 8.12500e+03 1.26000e+04 +760 8.02500e+03 1.26000e+04 +761 7.92500e+03 1.26000e+04 +762 7.77500e+03 1.26000e+04 +763 7.62500e+03 1.26000e+04 +764 7.47500e+03 1.26000e+04 +765 7.50000e+03 1.25000e+04 +766 7.50000e+03 1.24000e+04 +767 7.42500e+03 1.23250e+04 +768 7.57500e+03 1.23250e+04 +769 7.67500e+03 1.22250e+04 +770 7.62500e+03 1.21250e+04 +771 7.77500e+03 1.20250e+04 +772 7.92500e+03 1.21250e+04 +773 7.87500e+03 1.22250e+04 +774 7.77500e+03 1.21750e+04 +775 7.77500e+03 1.23250e+04 +776 7.97500e+03 1.23250e+04 +777 8.25000e+03 1.23250e+04 +778 8.35000e+03 1.25250e+04 +779 8.35000e+03 1.24250e+04 +780 8.40000e+03 1.23250e+04 +781 8.37500e+03 1.22250e+04 +782 8.42500e+03 1.21250e+04 +783 8.55000e+03 1.21750e+04 +784 8.57500e+03 1.23250e+04 +785 8.62500e+03 1.24250e+04 +786 8.62500e+03 1.25250e+04 +787 8.77500e+03 1.25250e+04 +788 8.77500e+03 1.24250e+04 +789 8.87500e+03 1.24750e+04 +790 8.87200e+03 1.23540e+04 +791 8.90000e+03 1.22250e+04 +792 8.90000e+03 1.20750e+04 +793 8.77500e+03 1.20750e+04 +794 8.77500e+03 1.19250e+04 +795 8.77500e+03 1.18250e+04 +796 8.77500e+03 1.17250e+04 +797 8.77500e+03 1.15750e+04 +798 8.82500e+03 1.14750e+04 +799 8.67500e+03 1.14750e+04 +800 8.50000e+03 1.13250e+04 +801 8.40000e+03 1.12750e+04 +802 8.30000e+03 1.13250e+04 +803 8.40000e+03 1.14250e+04 +804 8.40000e+03 1.15500e+04 +805 8.40000e+03 1.16500e+04 +806 8.50000e+03 1.18250e+04 +807 8.62500e+03 1.18750e+04 +808 8.47500e+03 1.19250e+04 +809 8.32500e+03 1.19250e+04 +810 8.12500e+03 1.17250e+04 +811 8.22500e+03 1.17250e+04 +812 8.30000e+03 1.16750e+04 +813 8.30000e+03 1.15750e+04 +814 8.30000e+03 1.14750e+04 +815 8.22500e+03 1.14250e+04 +816 8.12500e+03 1.14250e+04 +817 8.02500e+03 1.13250e+04 +818 7.82500e+03 1.13250e+04 +819 7.72500e+03 1.13250e+04 +820 7.52500e+03 1.13250e+04 +821 7.42500e+03 1.14250e+04 +822 7.32500e+03 1.14250e+04 +823 7.25000e+03 1.13250e+04 +824 7.15000e+03 1.12750e+04 +825 7.05000e+03 1.13250e+04 +826 7.15000e+03 1.14250e+04 +827 7.25000e+03 1.14750e+04 +828 7.25000e+03 1.15750e+04 +829 7.15000e+03 1.15750e+04 +830 7.15000e+03 1.16750e+04 +831 7.25000e+03 1.16750e+04 +832 7.32500e+03 1.17500e+04 +833 7.42500e+03 1.17500e+04 +834 7.22500e+03 1.19250e+04 +835 7.07500e+03 1.19250e+04 +836 7.05000e+03 1.18250e+04 +837 6.97500e+03 1.19250e+04 +838 7.02500e+03 1.20750e+04 +839 7.12500e+03 1.21250e+04 +840 7.17500e+03 1.22250e+04 +841 7.02500e+03 1.22250e+04 +842 6.92500e+03 1.21750e+04 +843 6.92500e+03 1.24250e+04 +844 6.92500e+03 1.25750e+04 +845 6.92500e+03 1.26750e+04 +846 6.92500e+03 1.28250e+04 +847 6.66500e+03 1.27600e+04 +848 6.66500e+03 1.26100e+04 +849 6.66500e+03 1.24600e+04 +850 6.66500e+03 1.23100e+04 +851 6.66500e+03 1.21600e+04 +852 6.66500e+03 1.20100e+04 +853 6.82500e+03 1.19250e+04 +854 6.66500e+03 1.18600e+04 +855 6.66500e+03 1.17100e+04 +856 6.77500e+03 1.16500e+04 +857 6.85000e+03 1.17000e+04 +858 6.85000e+03 1.16000e+04 +859 6.77500e+03 1.15250e+04 +860 6.82500e+03 1.14250e+04 +861 6.72500e+03 1.14250e+04 +862 6.27500e+03 1.14750e+04 +863 6.22500e+03 1.15750e+04 +864 6.12500e+03 1.14750e+04 +865 5.95000e+03 1.13250e+04 +866 5.85000e+03 1.14250e+04 +867 5.75000e+03 1.13250e+04 +868 5.85000e+03 1.12750e+04 +869 5.82500e+03 1.11250e+04 +870 5.82500e+03 1.10250e+04 +871 5.92500e+03 1.11250e+04 +872 6.02500e+03 1.10750e+04 +873 6.02500e+03 1.09750e+04 +874 6.20000e+03 1.09750e+04 +875 6.30000e+03 1.07750e+04 +876 6.30000e+03 1.06250e+04 +877 6.30000e+03 1.04750e+04 +878 6.30000e+03 1.03750e+04 +879 6.27500e+03 1.02750e+04 +880 6.70000e+03 1.04250e+04 +881 6.70000e+03 1.05250e+04 +882 6.70000e+03 1.06250e+04 +883 6.70000e+03 1.07250e+04 +884 6.70000e+03 1.08500e+04 +885 6.72500e+03 1.10500e+04 +886 6.87500e+03 1.10250e+04 +887 7.00000e+03 1.10250e+04 +888 7.07500e+03 1.11250e+04 +889 7.17500e+03 1.11250e+04 +890 7.17500e+03 1.10250e+04 +891 7.55000e+03 1.10750e+04 +892 7.55000e+03 1.08750e+04 +893 7.55000e+03 1.04750e+04 +894 8.00000e+03 1.04750e+04 +895 8.00000e+03 1.08750e+04 +896 8.00000e+03 1.10750e+04 +897 8.37500e+03 1.10250e+04 +898 8.37500e+03 1.11250e+04 +899 8.47500e+03 1.11250e+04 +900 8.57500e+03 1.10750e+04 +901 8.57500e+03 1.09750e+04 +902 8.75000e+03 1.09750e+04 +903 8.85000e+03 1.07750e+04 +904 8.85000e+03 1.06250e+04 +905 8.85000e+03 1.04750e+04 +906 8.85000e+03 1.03750e+04 +907 8.82500e+03 1.02750e+04 +908 9.25000e+03 1.04250e+04 +909 9.25000e+03 1.05250e+04 +910 9.25000e+03 1.06250e+04 +911 9.25000e+03 1.07250e+04 +912 9.25000e+03 1.08500e+04 +913 9.27500e+03 1.10500e+04 +914 9.42500e+03 1.10250e+04 +915 9.55000e+03 1.10250e+04 +916 9.62500e+03 1.11250e+04 +917 9.72500e+03 1.10250e+04 +918 9.72500e+03 1.11250e+04 +919 9.70000e+03 1.12750e+04 +920 9.80000e+03 1.13250e+04 +921 9.70000e+03 1.14250e+04 +922 9.60000e+03 1.13250e+04 +923 9.37500e+03 1.14250e+04 +924 9.27500e+03 1.14250e+04 +925 9.32500e+03 1.15250e+04 +926 9.40000e+03 1.16000e+04 +927 9.40000e+03 1.17000e+04 +928 9.32500e+03 1.16500e+04 +929 9.21500e+03 1.17100e+04 +930 9.21500e+03 1.18600e+04 +931 9.37500e+03 1.19250e+04 +932 9.21500e+03 1.20100e+04 +933 9.21500e+03 1.21600e+04 +934 9.21500e+03 1.23100e+04 +935 9.21500e+03 1.24600e+04 +936 9.21500e+03 1.26100e+04 +937 9.21500e+03 1.27600e+04 +938 9.47500e+03 1.28250e+04 +939 9.47500e+03 1.26750e+04 +940 9.47500e+03 1.25750e+04 +941 9.47500e+03 1.24250e+04 +942 9.47500e+03 1.21750e+04 +943 9.57500e+03 1.22250e+04 +944 9.72500e+03 1.22250e+04 +945 9.67500e+03 1.21250e+04 +946 9.57500e+03 1.20750e+04 +947 9.52500e+03 1.19250e+04 +948 9.60000e+03 1.18250e+04 +949 9.62500e+03 1.19250e+04 +950 9.77500e+03 1.19250e+04 +951 9.97500e+03 1.17500e+04 +952 9.87500e+03 1.17500e+04 +953 9.80000e+03 1.16750e+04 +954 9.70000e+03 1.16750e+04 +955 9.70000e+03 1.15750e+04 +956 9.80000e+03 1.15750e+04 +957 9.80000e+03 1.14750e+04 +958 9.87500e+03 1.14250e+04 +959 9.97500e+03 1.14250e+04 +960 1.00750e+04 1.13250e+04 +961 1.01000e+04 1.10750e+04 +962 1.01000e+04 1.08750e+04 +963 1.01000e+04 1.04750e+04 +964 1.05500e+04 1.04750e+04 +965 1.08480e+04 1.00750e+04 +966 1.05750e+04 1.00750e+04 +967 1.04370e+04 9.80100e+03 +968 1.04350e+04 9.70200e+03 +969 1.04350e+04 9.60100e+03 +970 1.04360e+04 9.50200e+03 +971 1.04360e+04 9.39900e+03 +972 1.04360e+04 9.29800e+03 +973 1.01750e+04 9.32500e+03 +974 1.01750e+04 9.42500e+03 +975 1.01750e+04 9.52500e+03 +976 1.01750e+04 9.72500e+03 +977 1.01750e+04 9.82500e+03 +978 1.00750e+04 1.00750e+04 +979 9.80000e+03 1.00750e+04 +980 9.52500e+03 1.00750e+04 +981 9.37500e+03 1.01250e+04 +982 9.29000e+03 9.80600e+03 +983 9.28900e+03 9.70600e+03 +984 9.28900e+03 9.60600e+03 +985 9.29000e+03 9.50500e+03 +986 9.29000e+03 9.40600e+03 +987 9.28900e+03 9.30600e+03 +988 8.77500e+03 9.32500e+03 +989 8.77500e+03 9.42500e+03 +990 8.77500e+03 9.52500e+03 +991 8.77500e+03 9.72500e+03 +992 8.77500e+03 9.82500e+03 +993 8.82500e+03 1.00750e+04 +994 8.57500e+03 1.00750e+04 +995 8.29800e+03 1.00750e+04 +996 8.02500e+03 1.00750e+04 +997 7.88700e+03 9.80100e+03 +998 7.88500e+03 9.70200e+03 +999 7.88500e+03 9.60100e+03 +1000 7.88600e+03 9.50200e+03 +1001 7.88600e+03 9.39900e+03 +1002 7.88600e+03 9.29800e+03 +1003 7.62500e+03 9.32500e+03 +1004 7.62500e+03 9.42500e+03 +1005 7.62500e+03 9.52500e+03 +1006 7.62500e+03 9.72500e+03 +1007 7.62500e+03 9.82500e+03 +1008 7.52500e+03 1.00750e+04 +1009 7.25000e+03 1.00750e+04 +1010 6.97500e+03 1.00750e+04 +1011 6.82500e+03 1.01250e+04 +1012 6.74000e+03 9.80600e+03 +1013 6.73900e+03 9.70600e+03 +1014 6.73900e+03 9.60600e+03 +1015 6.74000e+03 9.50500e+03 +1016 6.74000e+03 9.40600e+03 +1017 6.73900e+03 9.30600e+03 +1018 7.02800e+03 8.82000e+03 +1019 6.92500e+03 8.82500e+03 +1020 6.72500e+03 8.82500e+03 +1021 6.67500e+03 8.47500e+03 +1022 6.67500e+03 8.37500e+03 +1023 6.67500e+03 8.27500e+03 +1024 6.67500e+03 8.17500e+03 +1025 6.67500e+03 8.07500e+03 +1026 6.67500e+03 7.97500e+03 +1027 6.67500e+03 7.87500e+03 +1028 6.77500e+03 7.82500e+03 +1029 6.67500e+03 7.71100e+03 +1030 6.67500e+03 7.71000e+03 +1031 6.67600e+03 7.56000e+03 +1032 6.67500e+03 7.56000e+03 +1033 6.67500e+03 7.41000e+03 +1034 6.67600e+03 7.40900e+03 +1035 6.67500e+03 7.26000e+03 +1036 6.67600e+03 7.25900e+03 +1037 6.67500e+03 7.07500e+03 +1038 6.67500e+03 6.87500e+03 +1039 6.67500e+03 6.67500e+03 +1040 6.82500e+03 6.67500e+03 +1041 6.82500e+03 6.52500e+03 +1042 6.67500e+03 6.52500e+03 +1043 6.67500e+03 6.37500e+03 +1044 7.07500e+03 6.00000e+03 +1045 7.17500e+03 6.02500e+03 +1046 7.07500e+03 6.20000e+03 +1047 7.17500e+03 6.42500e+03 +1048 7.02500e+03 6.67500e+03 +1049 7.02500e+03 6.82500e+03 +1050 7.17500e+03 6.77500e+03 +1051 7.32500e+03 6.77500e+03 +1052 7.17500e+03 6.97500e+03 +1053 7.07500e+03 7.07500e+03 +1054 7.27500e+03 7.07500e+03 +1055 7.37500e+03 7.27500e+03 +1056 7.42500e+03 7.42500e+03 +1057 7.47500e+03 7.52500e+03 +1058 7.27500e+03 7.47500e+03 +1059 7.17500e+03 7.57500e+03 +1060 7.07500e+03 7.47500e+03 +1061 7.02500e+03 7.62500e+03 +1062 6.87500e+03 7.62500e+03 +1063 6.92500e+03 7.72500e+03 +1064 7.07500e+03 7.72500e+03 +1065 7.27500e+03 7.82500e+03 +1066 7.45000e+03 7.77500e+03 +1067 7.45000e+03 7.87500e+03 +1068 7.57500e+03 7.97500e+03 +1069 7.72500e+03 7.97500e+03 +1070 7.67500e+03 8.12500e+03 +1071 7.60000e+03 8.22500e+03 +1072 7.70000e+03 8.22500e+03 +1073 7.70000e+03 8.37500e+03 +1074 7.70000e+03 8.47500e+03 +1075 7.55000e+03 8.57500e+03 +1076 7.47500e+03 8.72500e+03 +1077 7.29700e+03 8.70300e+03 +1078 7.32500e+03 8.82500e+03 +1079 7.52500e+03 8.82500e+03 +1080 7.62500e+03 8.72500e+03 +1081 7.70000e+03 8.62500e+03 +1082 7.92500e+03 8.77500e+03 +1083 8.02500e+03 8.77500e+03 +1084 8.12500e+03 8.77500e+03 +1085 8.22500e+03 8.77500e+03 +1086 8.37500e+03 8.77500e+03 +1087 8.32500e+03 8.62500e+03 +1088 8.42500e+03 8.57500e+03 +1089 8.32500e+03 8.52500e+03 +1090 8.42500e+03 8.22500e+03 +1091 8.52500e+03 8.22500e+03 +1092 8.62500e+03 8.32500e+03 +1093 8.72500e+03 8.32500e+03 +1094 8.72500e+03 8.42500e+03 +1095 8.62500e+03 8.47500e+03 +1096 8.80000e+03 8.77500e+03 +1097 8.90000e+03 8.67500e+03 +1098 8.80000e+03 8.57500e+03 +1099 8.87500e+03 8.37500e+03 +1100 8.87500e+03 8.22500e+03 +1101 8.72500e+03 8.17500e+03 +1102 8.77500e+03 8.07500e+03 +1103 8.87500e+03 8.07500e+03 +1104 8.87500e+03 7.92500e+03 +1105 8.77500e+03 7.87500e+03 +1106 8.62500e+03 7.82500e+03 +1107 8.62500e+03 7.72500e+03 +1108 8.62500e+03 7.62500e+03 +1109 8.62500e+03 7.47500e+03 +1110 8.52500e+03 7.42500e+03 +1111 8.52500e+03 7.57500e+03 +1112 8.47500e+03 7.72500e+03 +1113 8.47500e+03 7.82500e+03 +1114 8.37500e+03 7.97500e+03 +1115 8.22500e+03 7.82500e+03 +1116 8.02500e+03 7.82500e+03 +1117 7.97500e+03 7.92500e+03 +1118 8.07500e+03 7.97500e+03 +1119 8.17500e+03 7.97500e+03 +1120 8.17500e+03 8.07500e+03 +1121 8.07500e+03 8.12500e+03 +1122 7.97500e+03 8.07500e+03 +1123 7.87500e+03 8.12500e+03 +1124 7.87500e+03 8.02500e+03 +1125 7.87500e+03 7.87500e+03 +1126 7.75000e+03 7.75000e+03 +1127 7.90000e+03 7.75000e+03 +1128 7.97500e+03 7.57500e+03 +1129 7.97500e+03 7.42500e+03 +1130 8.12500e+03 7.42500e+03 +1131 8.22500e+03 7.42500e+03 +1132 8.17500e+03 7.57500e+03 +1133 8.27500e+03 7.60000e+03 +1134 8.37500e+03 7.42500e+03 +1135 8.32500e+03 7.32500e+03 +1136 8.42500e+03 7.15000e+03 +1137 8.57500e+03 7.15000e+03 +1138 8.85000e+03 7.15000e+03 +1139 8.77500e+03 7.07500e+03 +1140 8.82500e+03 6.97500e+03 +1141 8.62500e+03 6.97500e+03 +1142 8.42500e+03 6.87500e+03 +1143 8.52500e+03 6.77500e+03 +1144 8.42500e+03 6.67500e+03 +1145 8.47500e+03 6.45000e+03 +1146 8.62500e+03 6.57500e+03 +1147 8.85000e+03 6.57500e+03 +1148 8.85000e+03 6.37500e+03 +1149 8.85000e+03 5.97500e+03 +1150 8.67400e+03 5.90800e+03 +1151 8.47500e+03 6.05000e+03 +1152 8.27500e+03 6.02500e+03 +1153 8.12500e+03 6.12500e+03 +1154 7.97500e+03 6.12500e+03 +1155 7.97500e+03 6.02500e+03 +1156 8.12500e+03 5.45000e+03 +1157 8.02500e+03 5.45000e+03 +1158 7.92500e+03 5.45000e+03 +1159 7.77500e+03 5.45000e+03 +1160 7.62500e+03 5.45000e+03 +1161 7.47500e+03 5.45000e+03 +1162 7.50000e+03 5.35000e+03 +1163 7.50000e+03 5.25000e+03 +1164 7.42500e+03 5.17500e+03 +1165 7.57500e+03 5.17500e+03 +1166 7.67500e+03 5.07500e+03 +1167 7.62500e+03 4.97500e+03 +1168 7.77500e+03 4.87500e+03 +1169 7.92500e+03 4.97500e+03 +1170 7.87500e+03 5.07500e+03 +1171 7.77500e+03 5.02500e+03 +1172 7.77500e+03 5.17500e+03 +1173 7.97500e+03 5.17500e+03 +1174 8.25000e+03 5.17500e+03 +1175 8.35000e+03 5.37500e+03 +1176 8.35000e+03 5.27500e+03 +1177 8.40000e+03 5.17500e+03 +1178 8.37500e+03 5.07500e+03 +1179 8.42500e+03 4.97500e+03 +1180 8.55000e+03 5.02500e+03 +1181 8.57500e+03 5.17500e+03 +1182 8.62500e+03 5.27500e+03 +1183 8.62500e+03 5.37500e+03 +1184 8.77500e+03 5.37500e+03 +1185 8.77500e+03 5.27500e+03 +1186 8.87500e+03 5.32500e+03 +1187 8.87200e+03 5.20400e+03 +1188 8.90000e+03 5.07500e+03 +1189 8.90000e+03 4.92500e+03 +1190 8.77500e+03 4.92500e+03 +1191 8.77500e+03 4.77500e+03 +1192 8.77500e+03 4.67500e+03 +1193 8.77500e+03 4.57500e+03 +1194 8.62500e+03 4.72500e+03 +1195 8.50000e+03 4.67500e+03 +1196 8.47500e+03 4.77500e+03 +1197 8.32500e+03 4.77500e+03 +1198 8.12500e+03 4.57500e+03 +1199 8.22500e+03 4.57500e+03 +1200 8.30000e+03 4.52500e+03 +1201 8.40000e+03 4.50000e+03 +1202 8.40000e+03 4.40000e+03 +1203 8.30000e+03 4.42500e+03 +1204 8.30000e+03 4.32500e+03 +1205 8.22500e+03 4.27500e+03 +1206 8.12500e+03 4.27500e+03 +1207 8.02500e+03 4.17500e+03 +1208 8.00000e+03 3.92500e+03 +1209 8.00000e+03 3.72500e+03 +1210 8.00000e+03 3.32500e+03 +1211 7.55000e+03 3.32500e+03 +1212 7.55000e+03 3.72500e+03 +1213 7.55000e+03 3.92500e+03 +1214 7.82500e+03 4.17500e+03 +1215 7.72500e+03 4.17500e+03 +1216 7.52500e+03 4.17500e+03 +1217 7.42500e+03 4.27500e+03 +1218 7.32500e+03 4.27500e+03 +1219 7.25000e+03 4.32500e+03 +1220 7.25000e+03 4.42500e+03 +1221 7.15000e+03 4.42500e+03 +1222 7.15000e+03 4.52500e+03 +1223 7.25000e+03 4.52500e+03 +1224 7.32500e+03 4.60000e+03 +1225 7.42500e+03 4.60000e+03 +1226 7.22500e+03 4.77500e+03 +1227 7.07500e+03 4.77500e+03 +1228 7.05000e+03 4.67500e+03 +1229 6.97500e+03 4.77500e+03 +1230 7.02500e+03 4.92500e+03 +1231 7.12500e+03 4.97500e+03 +1232 7.17500e+03 5.07500e+03 +1233 7.02500e+03 5.07500e+03 +1234 6.92500e+03 5.02500e+03 +1235 6.92500e+03 5.27500e+03 +1236 6.92500e+03 5.42500e+03 +1237 6.92500e+03 5.52500e+03 +1238 6.92500e+03 5.67500e+03 +1239 6.66500e+03 5.61000e+03 +1240 6.66500e+03 5.46000e+03 +1241 6.66500e+03 5.31000e+03 +1242 6.66500e+03 5.16000e+03 +1243 6.66500e+03 5.01000e+03 +1244 6.66500e+03 4.86000e+03 +1245 6.82500e+03 4.77500e+03 +1246 6.66500e+03 4.71000e+03 +1247 6.66500e+03 4.56000e+03 +1248 6.77500e+03 4.50000e+03 +1249 6.85000e+03 4.55000e+03 +1250 6.85000e+03 4.45000e+03 +1251 6.77500e+03 4.37500e+03 +1252 6.72500e+03 4.27500e+03 +1253 6.82500e+03 4.27500e+03 +1254 7.05000e+03 4.17500e+03 +1255 7.15000e+03 4.27500e+03 +1256 7.25000e+03 4.17500e+03 +1257 7.15000e+03 4.12500e+03 +1258 7.17500e+03 3.97500e+03 +1259 7.17500e+03 3.87500e+03 +1260 7.07500e+03 3.97500e+03 +1261 7.00000e+03 3.87500e+03 +1262 6.87500e+03 3.87500e+03 +1263 6.72500e+03 3.90000e+03 +1264 6.70000e+03 3.70000e+03 +1265 6.70000e+03 3.57500e+03 +1266 6.70000e+03 3.47500e+03 +1267 6.70000e+03 3.37500e+03 +1268 6.70000e+03 3.27500e+03 +1269 6.27500e+03 3.12500e+03 +1270 6.30000e+03 3.22500e+03 +1271 6.30000e+03 3.32500e+03 +1272 6.30000e+03 3.47500e+03 +1273 6.30000e+03 3.62500e+03 +1274 6.20000e+03 3.82500e+03 +1275 6.02500e+03 3.82500e+03 +1276 6.02500e+03 3.92500e+03 +1277 5.92500e+03 3.97500e+03 +1278 5.82500e+03 3.97500e+03 +1279 5.82500e+03 3.87500e+03 +1280 5.45000e+03 3.92500e+03 +1281 5.45000e+03 3.72500e+03 +1282 5.45000e+03 3.32500e+03 +1283 5.00000e+03 3.32500e+03 +1284 5.00000e+03 3.72500e+03 +1285 5.00000e+03 3.92500e+03 +1286 4.62500e+03 3.87500e+03 +1287 4.62500e+03 3.97500e+03 +1288 4.52500e+03 3.97500e+03 +1289 4.45000e+03 3.87500e+03 +1290 4.32500e+03 3.87500e+03 +1291 4.17500e+03 3.90000e+03 +1292 4.15000e+03 3.70000e+03 +1293 4.15000e+03 3.57500e+03 +1294 4.15000e+03 3.47500e+03 +1295 4.15000e+03 3.37500e+03 +1296 4.15000e+03 3.27500e+03 +1297 3.72500e+03 3.12500e+03 +1298 3.75000e+03 3.22500e+03 +1299 3.75000e+03 3.32500e+03 +1300 3.75000e+03 3.47500e+03 +1301 3.75000e+03 3.62500e+03 +1302 3.65000e+03 3.82500e+03 +1303 3.47500e+03 3.82500e+03 +1304 3.47500e+03 3.92500e+03 +1305 3.37500e+03 3.97500e+03 +1306 3.27500e+03 3.87500e+03 +1307 3.27500e+03 3.97500e+03 +1308 3.30000e+03 4.12500e+03 +1309 3.20000e+03 4.17500e+03 +1310 3.30000e+03 4.27500e+03 +1311 3.40000e+03 4.17500e+03 +1312 3.57500e+03 4.32500e+03 +1313 3.67500e+03 4.42500e+03 +1314 3.72500e+03 4.32500e+03 +1315 4.17500e+03 4.27500e+03 +1316 4.27500e+03 4.27500e+03 +1317 4.22500e+03 4.37500e+03 +1318 4.30000e+03 4.45000e+03 +1319 4.30000e+03 4.55000e+03 +1320 4.22500e+03 4.50000e+03 +1321 4.11500e+03 4.56000e+03 +1322 4.11500e+03 4.71000e+03 +1323 4.27500e+03 4.77500e+03 +1324 4.11500e+03 4.86000e+03 +1325 4.11500e+03 5.01000e+03 +1326 4.11500e+03 5.16000e+03 +1327 4.11500e+03 5.31000e+03 +1328 4.11500e+03 5.46000e+03 +1329 4.11500e+03 5.61000e+03 +1330 4.37500e+03 5.67500e+03 +1331 4.37500e+03 5.52500e+03 +1332 4.37500e+03 5.42500e+03 +1333 4.37500e+03 5.27500e+03 +1334 4.37500e+03 5.02500e+03 +1335 4.47500e+03 5.07500e+03 +1336 4.62500e+03 5.07500e+03 +1337 4.57500e+03 4.97500e+03 +1338 4.47500e+03 4.92500e+03 +1339 4.42500e+03 4.77500e+03 +1340 4.50000e+03 4.67500e+03 +1341 4.52500e+03 4.77500e+03 +1342 4.67500e+03 4.77500e+03 +1343 4.87500e+03 4.60000e+03 +1344 4.77500e+03 4.60000e+03 +1345 4.70000e+03 4.52500e+03 +1346 4.60000e+03 4.52500e+03 +1347 4.60000e+03 4.42500e+03 +1348 4.70000e+03 4.42500e+03 +1349 4.70000e+03 4.32500e+03 +1350 4.60000e+03 4.27500e+03 +1351 4.50000e+03 4.17500e+03 +1352 4.60000e+03 4.12500e+03 +1353 4.70000e+03 4.17500e+03 +1354 4.77500e+03 4.27500e+03 +1355 4.87500e+03 4.27500e+03 +1356 4.97500e+03 4.17500e+03 +1357 5.17500e+03 4.17500e+03 +1358 5.27500e+03 4.17500e+03 +1359 5.47500e+03 4.17500e+03 +1360 5.57500e+03 4.27500e+03 +1361 5.67500e+03 4.27500e+03 +1362 5.75000e+03 4.32500e+03 +1363 5.75000e+03 4.42500e+03 +1364 5.75000e+03 4.52500e+03 +1365 5.67500e+03 4.57500e+03 +1366 5.57500e+03 4.57500e+03 +1367 5.77500e+03 4.77500e+03 +1368 5.92500e+03 4.77500e+03 +1369 6.07500e+03 4.72500e+03 +1370 5.95000e+03 4.67500e+03 +1371 5.85000e+03 4.50000e+03 +1372 5.85000e+03 4.40000e+03 +1373 5.85000e+03 4.27500e+03 +1374 5.75000e+03 4.17500e+03 +1375 5.85000e+03 4.12500e+03 +1376 5.95000e+03 4.17500e+03 +1377 6.12500e+03 4.32500e+03 +1378 6.27500e+03 4.32500e+03 +1379 6.22500e+03 4.42500e+03 +1380 6.22500e+03 4.57500e+03 +1381 6.22500e+03 4.67500e+03 +1382 6.22500e+03 4.77500e+03 +1383 6.22500e+03 4.92500e+03 +1384 6.35000e+03 4.92500e+03 +1385 6.35000e+03 5.07500e+03 +1386 6.32200e+03 5.20400e+03 +1387 6.32500e+03 5.32500e+03 +1388 6.22500e+03 5.27500e+03 +1389 6.22500e+03 5.37500e+03 +1390 6.07500e+03 5.37500e+03 +1391 6.07500e+03 5.27500e+03 +1392 6.02500e+03 5.17500e+03 +1393 6.00000e+03 5.02500e+03 +1394 5.87500e+03 4.97500e+03 +1395 5.82500e+03 5.07500e+03 +1396 5.85000e+03 5.17500e+03 +1397 5.80000e+03 5.27500e+03 +1398 5.80000e+03 5.37500e+03 +1399 5.70000e+03 5.17500e+03 +1400 5.42500e+03 5.17500e+03 +1401 5.32500e+03 5.07500e+03 +1402 5.37500e+03 4.97500e+03 +1403 5.22500e+03 4.87500e+03 +1404 5.07500e+03 4.97500e+03 +1405 5.12500e+03 5.07500e+03 +1406 5.22500e+03 5.02500e+03 +1407 5.22500e+03 5.17500e+03 +1408 5.02500e+03 5.17500e+03 +1409 4.87500e+03 5.17500e+03 +1410 4.95000e+03 5.25000e+03 +1411 4.95000e+03 5.35000e+03 +1412 4.92500e+03 5.45000e+03 +1413 5.07500e+03 5.45000e+03 +1414 5.22500e+03 5.45000e+03 +1415 5.37500e+03 5.45000e+03 +1416 5.47500e+03 5.45000e+03 +1417 5.57500e+03 5.45000e+03 +1418 5.42500e+03 6.02500e+03 +1419 5.42500e+03 6.12500e+03 +1420 5.57500e+03 6.12500e+03 +1421 5.72500e+03 6.02500e+03 +1422 5.92500e+03 6.05000e+03 +1423 6.12400e+03 5.90800e+03 +1424 6.30000e+03 5.97500e+03 +1425 6.30000e+03 6.37500e+03 +1426 6.30000e+03 6.57500e+03 +1427 6.07500e+03 6.57500e+03 +1428 5.92500e+03 6.45000e+03 +1429 5.87500e+03 6.67500e+03 +1430 5.97500e+03 6.77500e+03 +1431 5.87500e+03 6.87500e+03 +1432 6.07500e+03 6.97500e+03 +1433 6.27500e+03 6.97500e+03 +1434 6.22500e+03 7.07500e+03 +1435 6.30000e+03 7.15000e+03 +1436 6.02500e+03 7.15000e+03 +1437 5.87500e+03 7.15000e+03 +1438 5.77500e+03 7.32500e+03 +1439 5.82500e+03 7.42500e+03 +1440 5.97500e+03 7.42500e+03 +1441 6.07500e+03 7.47500e+03 +1442 5.97500e+03 7.57500e+03 +1443 6.07500e+03 7.62500e+03 +1444 6.07500e+03 7.72500e+03 +1445 5.92500e+03 7.72500e+03 +1446 5.92500e+03 7.82500e+03 +1447 6.07500e+03 7.82500e+03 +1448 6.22500e+03 7.87500e+03 +1449 6.32500e+03 7.92500e+03 +1450 6.32500e+03 8.07500e+03 +1451 6.22500e+03 8.07500e+03 +1452 6.17500e+03 8.17500e+03 +1453 6.32500e+03 8.22500e+03 +1454 6.32500e+03 8.37500e+03 +1455 6.17500e+03 8.32500e+03 +1456 6.07500e+03 8.32500e+03 +1457 5.97500e+03 8.22500e+03 +1458 5.87500e+03 8.22500e+03 +1459 5.82500e+03 7.97500e+03 +1460 5.67500e+03 7.82500e+03 +1461 5.72500e+03 7.60000e+03 +1462 5.62500e+03 7.57500e+03 +1463 5.67500e+03 7.42500e+03 +1464 5.57500e+03 7.42500e+03 +1465 5.42500e+03 7.42500e+03 +1466 5.42500e+03 7.57500e+03 +1467 5.35000e+03 7.75000e+03 +1468 5.20000e+03 7.75000e+03 +1469 5.32500e+03 7.87500e+03 +1470 5.47500e+03 7.82500e+03 +1471 5.42500e+03 7.92500e+03 +1472 5.52500e+03 7.97500e+03 +1473 5.62500e+03 7.97500e+03 +1474 5.62500e+03 8.07500e+03 +1475 5.52500e+03 8.12500e+03 +1476 5.42500e+03 8.07500e+03 +1477 5.32500e+03 8.02500e+03 +1478 5.32500e+03 8.12500e+03 +1479 5.15000e+03 8.22500e+03 +1480 5.05000e+03 8.22500e+03 +1481 5.12500e+03 8.12500e+03 +1482 5.17500e+03 7.97500e+03 +1483 5.02500e+03 7.97500e+03 +1484 4.90000e+03 7.87500e+03 +1485 4.90000e+03 7.77500e+03 +1486 4.72500e+03 7.82500e+03 +1487 4.52500e+03 7.72500e+03 +1488 4.37500e+03 7.72500e+03 +1489 4.32500e+03 7.62500e+03 +1490 4.47500e+03 7.62500e+03 +1491 4.52500e+03 7.47500e+03 +1492 4.62500e+03 7.57500e+03 +1493 4.72500e+03 7.47500e+03 +1494 4.92500e+03 7.52500e+03 +1495 4.87500e+03 7.42500e+03 +1496 4.82500e+03 7.27500e+03 +1497 4.72500e+03 7.07500e+03 +1498 4.52500e+03 7.07500e+03 +1499 4.62500e+03 6.97500e+03 +1500 4.77500e+03 6.77500e+03 +1501 4.62500e+03 6.77500e+03 +1502 4.47500e+03 6.82500e+03 +1503 4.47500e+03 6.67500e+03 +1504 4.62500e+03 6.42500e+03 +1505 4.52500e+03 6.20000e+03 +1506 4.62500e+03 6.02500e+03 +1507 4.52500e+03 6.00000e+03 +1508 4.12500e+03 6.37500e+03 +1509 4.12500e+03 6.52500e+03 +1510 4.27500e+03 6.52500e+03 +1511 4.27500e+03 6.67500e+03 +1512 4.12500e+03 6.67500e+03 +1513 4.12500e+03 6.87500e+03 +1514 4.12500e+03 7.07500e+03 +1515 4.12600e+03 7.25900e+03 +1516 4.12500e+03 7.26000e+03 +1517 4.12600e+03 7.40900e+03 +1518 4.12500e+03 7.41000e+03 +1519 4.12500e+03 7.56000e+03 +1520 4.12600e+03 7.56000e+03 +1521 4.12500e+03 7.71000e+03 +1522 4.12500e+03 7.71100e+03 +1523 4.22500e+03 7.82500e+03 +1524 4.12500e+03 7.87500e+03 +1525 4.12500e+03 7.97500e+03 +1526 4.12500e+03 8.07500e+03 +1527 4.12500e+03 8.17500e+03 +1528 4.12500e+03 8.27500e+03 +1529 4.12500e+03 8.37500e+03 +1530 4.12500e+03 8.47500e+03 +1531 4.17500e+03 8.82500e+03 +1532 4.37500e+03 8.82500e+03 +1533 4.47800e+03 8.82000e+03 +1534 4.74700e+03 8.70300e+03 +1535 4.77500e+03 8.82500e+03 +1536 4.92500e+03 8.72500e+03 +1537 4.97500e+03 8.82500e+03 +1538 5.07500e+03 8.72500e+03 +1539 5.00000e+03 8.57500e+03 +1540 5.15000e+03 8.37500e+03 +1541 5.15000e+03 8.47500e+03 +1542 5.15000e+03 8.62500e+03 +1543 5.37500e+03 8.77500e+03 +1544 5.47500e+03 8.77500e+03 +1545 5.57500e+03 8.77500e+03 +1546 5.67500e+03 8.77500e+03 +1547 5.82500e+03 8.77500e+03 +1548 5.77500e+03 8.62500e+03 +1549 5.77500e+03 8.52500e+03 +1550 5.87500e+03 8.57500e+03 +1551 6.07500e+03 8.47500e+03 +1552 6.17500e+03 8.42500e+03 +1553 6.25000e+03 8.57500e+03 +1554 6.35000e+03 8.67500e+03 +1555 6.25000e+03 8.77500e+03 +1556 6.22500e+03 9.32500e+03 +1557 6.22500e+03 9.42500e+03 +1558 6.22500e+03 9.52500e+03 +1559 6.22500e+03 9.72500e+03 +1560 6.22500e+03 9.82500e+03 +1561 6.27500e+03 1.00750e+04 +1562 6.02500e+03 1.00750e+04 +1563 5.74800e+03 1.00750e+04 +1564 5.47500e+03 1.00750e+04 +1565 5.33700e+03 9.80100e+03 +1566 5.33500e+03 9.70200e+03 +1567 5.33500e+03 9.60100e+03 +1568 5.33600e+03 9.50200e+03 +1569 5.33600e+03 9.39900e+03 +1570 5.33600e+03 9.29800e+03 +1571 5.07500e+03 9.32500e+03 +1572 5.07500e+03 9.42500e+03 +1573 5.07500e+03 9.52500e+03 +1574 5.07500e+03 9.72500e+03 +1575 5.07500e+03 9.82500e+03 +1576 4.97500e+03 1.00750e+04 +1577 4.70000e+03 1.00750e+04 +1578 4.42500e+03 1.00750e+04 +1579 4.27500e+03 1.01250e+04 +1580 4.19000e+03 9.80600e+03 +1581 4.18900e+03 9.70600e+03 +1582 4.18900e+03 9.60600e+03 +1583 4.19000e+03 9.50500e+03 +1584 4.19000e+03 9.40600e+03 +1585 4.18900e+03 9.30600e+03 +1586 3.67500e+03 9.32500e+03 +1587 3.67500e+03 9.42500e+03 +1588 3.67500e+03 9.52500e+03 +1589 3.67500e+03 9.72500e+03 +1590 3.67500e+03 9.82500e+03 +1591 3.72500e+03 1.00750e+04 +1592 3.47500e+03 1.00750e+04 +1593 3.19800e+03 1.00750e+04 +1594 2.92500e+03 1.00750e+04 +1595 2.78700e+03 9.80100e+03 +1596 2.78500e+03 9.70200e+03 +1597 2.78500e+03 9.60100e+03 +1598 2.78600e+03 9.50200e+03 +1599 2.78600e+03 9.39900e+03 +1600 2.78600e+03 9.29800e+03 +1601 2.52500e+03 9.32500e+03 +1602 2.52500e+03 9.42500e+03 +1603 2.52500e+03 9.52500e+03 +1604 2.52500e+03 9.72500e+03 +1605 2.52500e+03 9.82500e+03 +1606 2.42500e+03 1.00750e+04 +1607 2.15000e+03 1.00750e+04 +1608 2.45000e+03 1.04750e+04 +1609 2.90000e+03 1.04750e+04 +1610 2.90000e+03 1.08750e+04 +1611 2.90000e+03 1.10750e+04 +1612 3.27500e+03 1.10250e+04 +1613 3.27500e+03 1.11250e+04 +1614 3.37500e+03 1.11250e+04 +1615 3.47500e+03 1.10750e+04 +1616 3.47500e+03 1.09750e+04 +1617 3.65000e+03 1.09750e+04 +1618 3.75000e+03 1.07750e+04 +1619 3.75000e+03 1.06250e+04 +1620 3.75000e+03 1.04750e+04 +1621 3.75000e+03 1.03750e+04 +1622 3.72500e+03 1.02750e+04 +1623 4.15000e+03 1.04250e+04 +1624 4.15000e+03 1.05250e+04 +1625 4.15000e+03 1.06250e+04 +1626 4.15000e+03 1.07250e+04 +1627 4.15000e+03 1.08500e+04 +1628 4.17500e+03 1.10500e+04 +1629 4.32500e+03 1.10250e+04 +1630 4.45000e+03 1.10250e+04 +1631 4.52500e+03 1.11250e+04 +1632 4.62500e+03 1.10250e+04 +1633 4.62500e+03 1.11250e+04 +1634 4.60000e+03 1.12750e+04 +1635 4.70000e+03 1.13250e+04 +1636 4.60000e+03 1.14250e+04 +1637 4.50000e+03 1.13250e+04 +1638 4.27500e+03 1.14250e+04 +1639 4.17500e+03 1.14250e+04 +1640 4.22500e+03 1.15250e+04 +1641 4.30000e+03 1.16000e+04 +1642 4.30000e+03 1.17000e+04 +1643 4.22500e+03 1.16500e+04 +1644 4.11500e+03 1.17100e+04 +1645 4.11500e+03 1.18600e+04 +1646 4.27500e+03 1.19250e+04 +1647 4.11500e+03 1.20100e+04 +1648 4.11500e+03 1.21600e+04 +1649 4.11500e+03 1.23100e+04 +1650 4.11500e+03 1.24600e+04 +1651 4.11500e+03 1.26100e+04 +1652 4.11500e+03 1.27600e+04 +1653 4.37500e+03 1.28250e+04 +1654 4.37500e+03 1.26750e+04 +1655 4.37500e+03 1.25750e+04 +1656 4.37500e+03 1.24250e+04 +1657 4.37500e+03 1.21750e+04 +1658 4.47500e+03 1.22250e+04 +1659 4.62500e+03 1.22250e+04 +1660 4.57500e+03 1.21250e+04 +1661 4.47500e+03 1.20750e+04 +1662 4.42500e+03 1.19250e+04 +1663 4.50000e+03 1.18250e+04 +1664 4.52500e+03 1.19250e+04 +1665 4.67500e+03 1.19250e+04 +1666 4.87500e+03 1.17500e+04 +1667 4.77500e+03 1.17500e+04 +1668 4.70000e+03 1.16750e+04 +1669 4.60000e+03 1.16750e+04 +1670 4.60000e+03 1.15750e+04 +1671 4.70000e+03 1.15750e+04 +1672 4.70000e+03 1.14750e+04 +1673 4.77500e+03 1.14250e+04 +1674 4.87500e+03 1.14250e+04 +1675 4.97500e+03 1.13250e+04 +1676 5.17500e+03 1.13250e+04 +1677 5.27500e+03 1.13250e+04 +1678 5.00000e+03 1.10750e+04 +1679 5.00000e+03 1.08750e+04 +1680 5.00000e+03 1.04750e+04 +1681 5.45000e+03 1.04750e+04 +1682 5.45000e+03 1.08750e+04 +1683 5.45000e+03 1.10750e+04 +1684 5.47500e+03 1.13250e+04 +1685 5.57500e+03 1.14250e+04 +1686 5.67500e+03 1.14250e+04 +1687 5.75000e+03 1.14750e+04 +1688 5.75000e+03 1.15750e+04 +1689 5.85000e+03 1.15500e+04 +1690 5.85000e+03 1.16500e+04 +1691 5.75000e+03 1.16750e+04 +1692 5.67500e+03 1.17250e+04 +1693 5.57500e+03 1.17250e+04 +1694 5.77500e+03 1.19250e+04 +1695 5.92500e+03 1.19250e+04 +1696 5.95000e+03 1.18250e+04 +1697 6.07500e+03 1.18750e+04 +1698 6.22500e+03 1.17250e+04 +1699 6.22500e+03 1.18250e+04 +1700 6.22500e+03 1.19250e+04 +1701 6.22500e+03 1.20750e+04 +1702 6.35000e+03 1.20750e+04 +1703 6.35000e+03 1.22250e+04 +1704 6.32200e+03 1.23540e+04 +1705 6.32500e+03 1.24750e+04 +1706 6.22500e+03 1.24250e+04 +1707 6.22500e+03 1.25250e+04 +1708 6.07500e+03 1.25250e+04 +1709 6.07500e+03 1.24250e+04 +1710 6.02500e+03 1.23250e+04 +1711 6.00000e+03 1.21750e+04 +1712 5.87500e+03 1.21250e+04 +1713 5.82500e+03 1.22250e+04 +1714 5.85000e+03 1.23250e+04 +1715 5.80000e+03 1.24250e+04 +1716 5.80000e+03 1.25250e+04 +1717 5.70000e+03 1.23250e+04 +1718 5.42500e+03 1.23250e+04 +1719 5.32500e+03 1.22250e+04 +1720 5.37500e+03 1.21250e+04 +1721 5.22500e+03 1.20250e+04 +1722 5.07500e+03 1.21250e+04 +1723 5.12500e+03 1.22250e+04 +1724 5.22500e+03 1.21750e+04 +1725 5.22500e+03 1.23250e+04 +1726 5.02500e+03 1.23250e+04 +1727 4.87500e+03 1.23250e+04 +1728 4.95000e+03 1.24000e+04 +1729 4.95000e+03 1.25000e+04 +1730 4.92500e+03 1.26000e+04 +1731 5.07500e+03 1.26000e+04 +1732 5.22500e+03 1.26000e+04 +1733 5.37500e+03 1.26000e+04 +1734 5.47500e+03 1.26000e+04 +1735 5.57500e+03 1.26000e+04 +1736 5.42500e+03 1.31750e+04 +1737 5.42500e+03 1.32750e+04 +1738 5.57500e+03 1.32750e+04 +1739 5.72500e+03 1.31750e+04 +1740 5.92500e+03 1.32000e+04 +1741 6.12400e+03 1.30580e+04 +1742 6.30000e+03 1.31250e+04 +1743 6.30000e+03 1.35250e+04 +1744 6.30000e+03 1.37250e+04 +1745 6.07500e+03 1.37250e+04 +1746 5.92500e+03 1.36000e+04 +1747 5.87500e+03 1.38250e+04 +1748 5.97500e+03 1.39250e+04 +1749 5.87500e+03 1.40250e+04 +1750 6.07500e+03 1.41250e+04 +1751 6.27500e+03 1.41250e+04 +1752 6.22500e+03 1.42250e+04 +1753 6.30000e+03 1.43000e+04 +1754 6.02500e+03 1.43000e+04 +1755 5.87500e+03 1.43000e+04 +1756 5.77500e+03 1.44750e+04 +1757 5.82500e+03 1.45750e+04 +1758 5.72500e+03 1.47500e+04 +1759 5.62500e+03 1.47250e+04 +1760 5.67500e+03 1.45750e+04 +1761 5.57500e+03 1.45750e+04 +1762 5.42500e+03 1.45750e+04 +1763 5.42500e+03 1.47250e+04 +1764 5.35000e+03 1.49000e+04 +1765 5.20000e+03 1.49000e+04 +1766 5.32500e+03 1.50250e+04 +1767 5.32500e+03 1.51750e+04 +1768 5.32500e+03 1.52750e+04 +1769 5.42500e+03 1.52250e+04 +1770 5.52500e+03 1.52750e+04 +1771 5.62500e+03 1.52250e+04 +1772 5.62500e+03 1.51250e+04 +1773 5.52500e+03 1.51250e+04 +1774 5.42500e+03 1.50750e+04 +1775 5.47500e+03 1.49750e+04 +1776 5.67500e+03 1.49750e+04 +1777 5.82500e+03 1.51250e+04 +1778 5.92500e+03 1.49750e+04 +1779 5.92500e+03 1.48750e+04 +1780 5.97500e+03 1.47250e+04 +1781 5.97500e+03 1.45750e+04 +1782 6.07500e+03 1.46250e+04 +1783 6.07500e+03 1.47750e+04 +1784 6.07500e+03 1.48750e+04 +1785 6.07500e+03 1.49750e+04 +1786 6.22500e+03 1.50250e+04 +1787 6.32500e+03 1.50750e+04 +1788 6.32500e+03 1.52250e+04 +1789 6.22500e+03 1.52250e+04 +1790 6.17500e+03 1.53250e+04 +1791 6.32500e+03 1.53750e+04 +1792 6.32500e+03 1.55250e+04 +1793 6.25000e+03 1.57250e+04 +1794 6.35000e+03 1.58250e+04 +1795 6.25000e+03 1.59250e+04 +1796 6.07500e+03 1.56250e+04 +1797 6.17500e+03 1.55750e+04 +1798 6.17500e+03 1.54750e+04 +1799 6.07500e+03 1.54750e+04 +1800 5.97500e+03 1.53750e+04 +1801 5.87500e+03 1.53750e+04 +1802 5.77500e+03 1.56750e+04 +1803 5.87500e+03 1.57250e+04 +1804 5.77500e+03 1.57750e+04 +1805 5.82500e+03 1.59250e+04 +1806 5.67500e+03 1.59250e+04 +1807 5.57500e+03 1.59250e+04 +1808 5.47500e+03 1.59250e+04 +1809 5.37500e+03 1.59250e+04 +1810 5.15000e+03 1.57750e+04 +1811 5.07500e+03 1.58750e+04 +1812 4.97500e+03 1.59750e+04 +1813 4.77500e+03 1.59750e+04 +1814 4.74700e+03 1.58530e+04 +1815 4.92500e+03 1.58750e+04 +1816 5.00000e+03 1.57250e+04 +1817 5.15000e+03 1.56250e+04 +1818 5.15000e+03 1.55250e+04 +1819 5.15000e+03 1.53750e+04 +1820 5.05000e+03 1.53750e+04 +1821 5.12500e+03 1.52750e+04 +1822 5.17500e+03 1.51250e+04 +1823 5.02500e+03 1.51250e+04 +1824 4.90000e+03 1.50250e+04 +1825 4.90000e+03 1.49250e+04 +1826 4.72500e+03 1.49750e+04 +1827 4.52500e+03 1.48750e+04 +1828 4.37500e+03 1.48750e+04 +1829 4.32500e+03 1.47750e+04 +1830 4.47500e+03 1.47750e+04 +1831 4.52500e+03 1.46250e+04 +1832 4.62500e+03 1.47250e+04 +1833 4.72500e+03 1.46250e+04 +1834 4.92500e+03 1.46750e+04 +1835 4.87500e+03 1.45750e+04 +1836 4.82500e+03 1.44250e+04 +1837 4.72500e+03 1.42250e+04 +1838 4.52500e+03 1.42250e+04 +1839 4.62500e+03 1.41250e+04 +1840 4.77500e+03 1.39250e+04 +1841 4.62500e+03 1.39250e+04 +1842 4.47500e+03 1.39750e+04 +1843 4.47500e+03 1.38250e+04 +1844 4.62500e+03 1.35750e+04 +1845 4.52500e+03 1.33500e+04 +1846 4.62500e+03 1.31750e+04 +1847 4.52500e+03 1.31500e+04 +1848 4.12500e+03 1.35250e+04 +1849 4.12500e+03 1.36750e+04 +1850 4.27500e+03 1.36750e+04 +1851 4.27500e+03 1.38250e+04 +1852 4.12500e+03 1.38250e+04 +1853 4.12500e+03 1.40250e+04 +1854 4.12500e+03 1.42250e+04 +1855 4.12600e+03 1.44090e+04 +1856 4.12500e+03 1.44100e+04 +1857 4.12600e+03 1.45590e+04 +1858 4.12500e+03 1.45600e+04 +1859 4.12500e+03 1.47100e+04 +1860 4.12600e+03 1.47100e+04 +1861 4.12500e+03 1.48600e+04 +1862 4.12500e+03 1.48610e+04 +1863 4.22500e+03 1.49750e+04 +1864 4.12500e+03 1.50250e+04 +1865 4.12500e+03 1.51250e+04 +1866 4.12500e+03 1.52250e+04 +1867 4.12500e+03 1.53250e+04 +1868 4.12500e+03 1.54250e+04 +1869 4.12500e+03 1.55250e+04 +1870 4.12500e+03 1.56250e+04 +1871 4.47800e+03 1.59700e+04 +1872 4.37500e+03 1.59750e+04 +1873 4.17500e+03 1.59750e+04 +1874 3.80000e+03 1.58250e+04 +1875 3.70000e+03 1.59250e+04 +1876 3.70000e+03 1.57250e+04 +1877 3.62500e+03 1.55750e+04 +1878 3.52500e+03 1.56250e+04 +1879 3.32500e+03 1.57250e+04 +1880 3.22500e+03 1.56750e+04 +1881 3.22500e+03 1.57750e+04 +1882 3.27500e+03 1.59250e+04 +1883 3.12500e+03 1.59250e+04 +1884 3.02500e+03 1.59250e+04 +1885 2.92500e+03 1.59250e+04 +1886 2.82500e+03 1.59250e+04 +1887 2.60000e+03 1.57750e+04 +1888 2.60000e+03 1.56250e+04 +1889 2.60000e+03 1.55250e+04 +1890 2.45000e+03 1.57250e+04 +1891 2.52500e+03 1.58750e+04 +1892 2.42500e+03 1.59750e+04 +1893 2.37500e+03 1.58750e+04 +1894 2.22500e+03 1.59750e+04 +1895 2.19700e+03 1.58530e+04 +1896 1.92800e+03 1.59700e+04 +1897 1.82500e+03 1.59750e+04 +1898 1.62500e+03 1.59750e+04 +1899 1.57500e+03 1.56250e+04 +1900 1.57500e+03 1.55250e+04 +1901 1.57500e+03 1.54250e+04 +1902 1.57500e+03 1.53250e+04 +1903 1.57500e+03 1.52250e+04 +1904 1.57500e+03 1.51250e+04 +1905 1.57500e+03 1.50250e+04 +1906 1.67500e+03 1.49750e+04 +1907 1.57500e+03 1.48610e+04 +1908 1.57500e+03 1.48600e+04 +1909 1.57500e+03 1.47100e+04 +1910 1.57600e+03 1.47100e+04 +1911 1.57500e+03 1.45600e+04 +1912 1.57600e+03 1.45590e+04 +1913 1.57500e+03 1.44100e+04 +1914 1.57600e+03 1.44090e+04 +1915 1.57500e+03 1.42250e+04 +1916 1.57500e+03 1.40250e+04 +1917 1.57500e+03 1.38250e+04 +1918 1.72500e+03 1.38250e+04 +1919 1.72500e+03 1.36750e+04 +1920 1.57500e+03 1.36750e+04 +1921 1.57500e+03 1.35250e+04 +1922 1.97500e+03 1.31500e+04 +1923 2.07500e+03 1.31750e+04 +1924 1.97500e+03 1.33500e+04 +1925 2.07500e+03 1.35750e+04 +1926 1.92500e+03 1.38250e+04 +1927 1.92500e+03 1.39750e+04 +1928 2.07500e+03 1.39250e+04 +1929 2.22500e+03 1.39250e+04 +1930 2.07500e+03 1.41250e+04 +1931 1.97500e+03 1.42250e+04 +1932 2.17500e+03 1.42250e+04 +1933 2.27500e+03 1.44250e+04 +1934 2.32500e+03 1.45750e+04 +1935 2.37500e+03 1.46750e+04 +1936 2.17500e+03 1.46250e+04 +1937 2.07500e+03 1.47250e+04 +1938 1.97500e+03 1.46250e+04 +1939 1.92500e+03 1.47750e+04 +1940 1.77500e+03 1.47750e+04 +1941 1.82500e+03 1.48750e+04 +1942 1.97500e+03 1.48750e+04 +1943 2.17500e+03 1.49750e+04 +1944 2.35000e+03 1.49250e+04 +1945 2.35000e+03 1.50250e+04 +1946 2.47500e+03 1.51250e+04 +1947 2.62500e+03 1.51250e+04 +1948 2.57500e+03 1.52750e+04 +1949 2.50000e+03 1.53750e+04 +1950 2.60000e+03 1.53750e+04 +1951 2.77500e+03 1.52750e+04 +1952 2.77500e+03 1.51750e+04 +1953 2.87500e+03 1.52250e+04 +1954 2.97500e+03 1.52750e+04 +1955 3.07500e+03 1.52250e+04 +1956 3.07500e+03 1.51250e+04 +1957 2.97500e+03 1.51250e+04 +1958 2.92500e+03 1.49750e+04 +1959 2.87500e+03 1.50750e+04 +1960 2.77500e+03 1.50250e+04 +1961 2.65000e+03 1.49000e+04 +1962 2.80000e+03 1.49000e+04 +1963 2.87500e+03 1.47250e+04 +1964 2.87500e+03 1.45750e+04 +1965 3.02500e+03 1.45750e+04 +1966 3.12500e+03 1.45750e+04 +1967 3.07500e+03 1.47250e+04 +1968 3.17500e+03 1.47500e+04 +1969 3.12500e+03 1.49750e+04 +1970 3.27500e+03 1.51250e+04 +1971 3.32500e+03 1.53750e+04 +1972 3.42500e+03 1.53750e+04 +1973 3.52500e+03 1.54750e+04 +1974 3.62500e+03 1.54750e+04 +1975 3.77500e+03 1.55250e+04 +1976 3.77500e+03 1.53750e+04 +1977 3.62500e+03 1.53250e+04 +1978 3.67500e+03 1.52250e+04 +1979 3.77500e+03 1.52250e+04 +1980 3.77500e+03 1.50750e+04 +1981 3.67500e+03 1.50250e+04 +1982 3.52500e+03 1.49750e+04 +1983 3.37500e+03 1.49750e+04 +1984 3.37500e+03 1.48750e+04 +1985 3.52500e+03 1.48750e+04 +1986 3.52500e+03 1.47750e+04 +1987 3.42500e+03 1.47250e+04 +1988 3.52500e+03 1.46250e+04 +1989 3.42500e+03 1.45750e+04 +1990 3.27500e+03 1.45750e+04 +1991 3.22500e+03 1.44750e+04 +1992 3.32500e+03 1.43000e+04 +1993 3.47500e+03 1.43000e+04 +1994 3.75000e+03 1.43000e+04 +1995 3.67500e+03 1.42250e+04 +1996 3.72500e+03 1.41250e+04 +1997 3.52500e+03 1.41250e+04 +1998 3.32500e+03 1.40250e+04 +1999 3.42500e+03 1.39250e+04 +2000 3.32500e+03 1.38250e+04 +2001 3.37500e+03 1.36000e+04 +2002 3.52500e+03 1.37250e+04 +2003 3.75000e+03 1.37250e+04 +2004 3.75000e+03 1.35250e+04 +2005 3.75000e+03 1.31250e+04 +2006 3.57400e+03 1.30580e+04 +2007 3.37500e+03 1.32000e+04 +2008 3.17500e+03 1.31750e+04 +2009 3.02500e+03 1.32750e+04 +2010 2.87500e+03 1.32750e+04 +2011 2.87500e+03 1.31750e+04 +2012 3.02500e+03 1.26000e+04 +2013 2.92500e+03 1.26000e+04 +2014 2.82500e+03 1.26000e+04 +2015 2.67500e+03 1.26000e+04 +2016 2.52500e+03 1.26000e+04 +2017 2.37500e+03 1.26000e+04 +2018 2.40000e+03 1.25000e+04 +2019 2.40000e+03 1.24000e+04 +2020 2.32500e+03 1.23250e+04 +2021 2.47500e+03 1.23250e+04 +2022 2.57500e+03 1.22250e+04 +2023 2.52500e+03 1.21250e+04 +2024 2.67500e+03 1.20250e+04 +2025 2.82500e+03 1.21250e+04 +2026 2.77500e+03 1.22250e+04 +2027 2.67500e+03 1.21750e+04 +2028 2.67500e+03 1.23250e+04 +2029 2.87500e+03 1.23250e+04 +2030 3.15000e+03 1.23250e+04 +2031 3.25000e+03 1.25250e+04 +2032 3.25000e+03 1.24250e+04 +2033 3.30000e+03 1.23250e+04 +2034 3.27500e+03 1.22250e+04 +2035 3.32500e+03 1.21250e+04 +2036 3.45000e+03 1.21750e+04 +2037 3.47500e+03 1.23250e+04 +2038 3.52500e+03 1.24250e+04 +2039 3.52500e+03 1.25250e+04 +2040 3.67500e+03 1.25250e+04 +2041 3.67500e+03 1.24250e+04 +2042 3.77500e+03 1.24750e+04 +2043 3.77200e+03 1.23540e+04 +2044 3.80000e+03 1.22250e+04 +2045 3.80000e+03 1.20750e+04 +2046 3.67500e+03 1.20750e+04 +2047 3.67500e+03 1.19250e+04 +2048 3.67500e+03 1.18250e+04 +2049 3.67500e+03 1.17250e+04 +2050 3.67500e+03 1.15750e+04 +2051 3.72500e+03 1.14750e+04 +2052 3.57500e+03 1.14750e+04 +2053 3.40000e+03 1.13250e+04 +2054 3.30000e+03 1.12750e+04 +2055 3.20000e+03 1.13250e+04 +2056 3.30000e+03 1.14250e+04 +2057 3.30000e+03 1.15500e+04 +2058 3.30000e+03 1.16500e+04 +2059 3.40000e+03 1.18250e+04 +2060 3.52500e+03 1.18750e+04 +2061 3.37500e+03 1.19250e+04 +2062 3.22500e+03 1.19250e+04 +2063 3.02500e+03 1.17250e+04 +2064 3.12500e+03 1.17250e+04 +2065 3.20000e+03 1.16750e+04 +2066 3.20000e+03 1.15750e+04 +2067 3.20000e+03 1.14750e+04 +2068 3.12500e+03 1.14250e+04 +2069 3.02500e+03 1.14250e+04 +2070 2.92500e+03 1.13250e+04 +2071 2.72500e+03 1.13250e+04 +2072 2.62500e+03 1.13250e+04 +2073 2.45000e+03 1.08750e+04 +2074 2.45000e+03 1.10750e+04 +2075 2.42500e+03 1.13250e+04 +2076 2.32500e+03 1.14250e+04 +2077 2.22500e+03 1.14250e+04 +2078 2.15000e+03 1.14750e+04 +2079 2.15000e+03 1.15750e+04 +2080 2.05000e+03 1.15750e+04 +2081 2.05000e+03 1.16750e+04 +2082 2.15000e+03 1.16750e+04 +2083 2.22500e+03 1.17500e+04 +2084 2.32500e+03 1.17500e+04 +2085 2.12500e+03 1.19250e+04 +2086 1.97500e+03 1.19250e+04 +2087 1.95000e+03 1.18250e+04 +2088 1.87500e+03 1.19250e+04 +2089 1.92500e+03 1.20750e+04 +2090 2.02500e+03 1.21250e+04 +2091 2.07500e+03 1.22250e+04 +2092 1.92500e+03 1.22250e+04 +2093 1.82500e+03 1.21750e+04 +2094 1.82500e+03 1.24250e+04 +2095 1.82500e+03 1.25750e+04 +2096 1.82500e+03 1.26750e+04 +2097 1.82500e+03 1.28250e+04 +2098 1.56500e+03 1.27600e+04 +2099 1.56500e+03 1.26100e+04 +2100 1.56500e+03 1.24600e+04 +2101 1.56500e+03 1.23100e+04 +2102 1.56500e+03 1.21600e+04 +2103 1.56500e+03 1.20100e+04 +2104 1.72500e+03 1.19250e+04 +2105 1.56500e+03 1.18600e+04 +2106 1.56500e+03 1.17100e+04 +2107 1.67500e+03 1.16500e+04 +2108 1.75000e+03 1.17000e+04 +2109 1.75000e+03 1.16000e+04 +2110 1.67500e+03 1.15250e+04 +2111 1.62500e+03 1.14250e+04 +2112 1.72500e+03 1.14250e+04 +2113 1.95000e+03 1.13250e+04 +2114 2.05000e+03 1.14250e+04 +2115 2.15000e+03 1.13250e+04 +2116 2.05000e+03 1.12750e+04 +2117 2.07500e+03 1.11250e+04 +2118 2.07500e+03 1.10250e+04 +2119 1.97500e+03 1.11250e+04 +2120 1.90000e+03 1.10250e+04 +2121 1.77500e+03 1.10250e+04 +2122 1.62500e+03 1.10500e+04 +2123 1.60000e+03 1.08500e+04 +2124 1.60000e+03 1.07250e+04 +2125 1.60000e+03 1.06250e+04 +2126 1.60000e+03 1.05250e+04 +2127 1.60000e+03 1.04250e+04 +2128 1.72500e+03 1.01250e+04 +2129 1.87500e+03 1.00750e+04 +2130 1.64000e+03 9.80600e+03 +2131 1.63900e+03 9.70600e+03 +2132 1.63900e+03 9.60600e+03 +2133 1.64000e+03 9.50500e+03 +2134 1.64000e+03 9.40600e+03 +2135 1.63900e+03 9.30600e+03 +2136 1.92800e+03 8.82000e+03 +2137 1.82500e+03 8.82500e+03 +2138 1.62500e+03 8.82500e+03 +2139 1.57500e+03 8.47500e+03 +2140 1.57500e+03 8.37500e+03 +2141 1.57500e+03 8.27500e+03 +2142 1.57500e+03 8.17500e+03 +2143 1.57500e+03 8.07500e+03 +2144 1.57500e+03 7.97500e+03 +2145 1.57500e+03 7.87500e+03 +2146 1.67500e+03 7.82500e+03 +2147 1.57500e+03 7.71100e+03 +2148 1.57500e+03 7.71000e+03 +2149 1.57600e+03 7.56000e+03 +2150 1.57500e+03 7.56000e+03 +2151 1.57500e+03 7.41000e+03 +2152 1.57600e+03 7.40900e+03 +2153 1.57500e+03 7.26000e+03 +2154 1.57600e+03 7.25900e+03 +2155 1.57500e+03 7.07500e+03 +2156 1.57500e+03 6.87500e+03 +2157 1.57500e+03 6.67500e+03 +2158 1.72500e+03 6.67500e+03 +2159 1.72500e+03 6.52500e+03 +2160 1.57500e+03 6.52500e+03 +2161 1.57500e+03 6.37500e+03 +2162 1.97500e+03 6.00000e+03 +2163 2.07500e+03 6.02500e+03 +2164 1.97500e+03 6.20000e+03 +2165 2.07500e+03 6.42500e+03 +2166 1.92500e+03 6.67500e+03 +2167 1.92500e+03 6.82500e+03 +2168 2.07500e+03 6.77500e+03 +2169 2.22500e+03 6.77500e+03 +2170 2.07500e+03 6.97500e+03 +2171 1.97500e+03 7.07500e+03 +2172 2.17500e+03 7.07500e+03 +2173 2.27500e+03 7.27500e+03 +2174 2.32500e+03 7.42500e+03 +2175 2.37500e+03 7.52500e+03 +2176 2.17500e+03 7.47500e+03 +2177 2.07500e+03 7.57500e+03 +2178 1.97500e+03 7.47500e+03 +2179 1.92500e+03 7.62500e+03 +2180 1.77500e+03 7.62500e+03 +2181 1.82500e+03 7.72500e+03 +2182 1.97500e+03 7.72500e+03 +2183 2.17500e+03 7.82500e+03 +2184 2.35000e+03 7.77500e+03 +2185 2.35000e+03 7.87500e+03 +2186 2.47500e+03 7.97500e+03 +2187 2.62500e+03 7.97500e+03 +2188 2.57500e+03 8.12500e+03 +2189 2.50000e+03 8.22500e+03 +2190 2.60000e+03 8.22500e+03 +2191 2.60000e+03 8.37500e+03 +2192 2.60000e+03 8.47500e+03 +2193 2.45000e+03 8.57500e+03 +2194 2.37500e+03 8.72500e+03 +2195 2.19700e+03 8.70300e+03 +2196 2.22500e+03 8.82500e+03 +2197 2.42500e+03 8.82500e+03 +2198 2.52500e+03 8.72500e+03 +2199 2.60000e+03 8.62500e+03 +2200 2.82500e+03 8.77500e+03 +2201 2.92500e+03 8.77500e+03 +2202 3.02500e+03 8.77500e+03 +2203 3.12500e+03 8.77500e+03 +2204 3.27500e+03 8.77500e+03 +2205 3.22500e+03 8.62500e+03 +2206 3.32500e+03 8.57500e+03 +2207 3.22500e+03 8.52500e+03 +2208 3.32500e+03 8.22500e+03 +2209 3.42500e+03 8.22500e+03 +2210 3.52500e+03 8.32500e+03 +2211 3.62500e+03 8.32500e+03 +2212 3.62500e+03 8.42500e+03 +2213 3.52500e+03 8.47500e+03 +2214 3.70000e+03 8.77500e+03 +2215 3.80000e+03 8.67500e+03 +2216 3.70000e+03 8.57500e+03 +2217 3.77500e+03 8.37500e+03 +2218 3.77500e+03 8.22500e+03 +2219 3.62500e+03 8.17500e+03 +2220 3.67500e+03 8.07500e+03 +2221 3.77500e+03 8.07500e+03 +2222 3.77500e+03 7.92500e+03 +2223 3.67500e+03 7.87500e+03 +2224 3.52500e+03 7.82500e+03 +2225 3.52500e+03 7.72500e+03 +2226 3.52500e+03 7.62500e+03 +2227 3.52500e+03 7.47500e+03 +2228 3.42500e+03 7.42500e+03 +2229 3.42500e+03 7.57500e+03 +2230 3.37500e+03 7.72500e+03 +2231 3.37500e+03 7.82500e+03 +2232 3.27500e+03 7.97500e+03 +2233 3.12500e+03 7.82500e+03 +2234 2.92500e+03 7.82500e+03 +2235 2.87500e+03 7.92500e+03 +2236 2.97500e+03 7.97500e+03 +2237 3.07500e+03 7.97500e+03 +2238 3.07500e+03 8.07500e+03 +2239 2.97500e+03 8.12500e+03 +2240 2.87500e+03 8.07500e+03 +2241 2.77500e+03 8.12500e+03 +2242 2.77500e+03 8.02500e+03 +2243 2.77500e+03 7.87500e+03 +2244 2.65000e+03 7.75000e+03 +2245 2.80000e+03 7.75000e+03 +2246 2.87500e+03 7.57500e+03 +2247 2.87500e+03 7.42500e+03 +2248 3.02500e+03 7.42500e+03 +2249 3.12500e+03 7.42500e+03 +2250 3.07500e+03 7.57500e+03 +2251 3.17500e+03 7.60000e+03 +2252 3.27500e+03 7.42500e+03 +2253 3.22500e+03 7.32500e+03 +2254 3.32500e+03 7.15000e+03 +2255 3.47500e+03 7.15000e+03 +2256 3.75000e+03 7.15000e+03 +2257 3.67500e+03 7.07500e+03 +2258 3.72500e+03 6.97500e+03 +2259 3.52500e+03 6.97500e+03 +2260 3.32500e+03 6.87500e+03 +2261 3.42500e+03 6.77500e+03 +2262 3.32500e+03 6.67500e+03 +2263 3.37500e+03 6.45000e+03 +2264 3.52500e+03 6.57500e+03 +2265 3.75000e+03 6.57500e+03 +2266 3.75000e+03 6.37500e+03 +2267 3.75000e+03 5.97500e+03 +2268 3.57400e+03 5.90800e+03 +2269 3.37500e+03 6.05000e+03 +2270 3.17500e+03 6.02500e+03 +2271 3.02500e+03 6.12500e+03 +2272 2.87500e+03 6.12500e+03 +2273 2.87500e+03 6.02500e+03 +2274 3.02500e+03 5.45000e+03 +2275 2.92500e+03 5.45000e+03 +2276 2.82500e+03 5.45000e+03 +2277 2.67500e+03 5.45000e+03 +2278 2.52500e+03 5.45000e+03 +2279 2.37500e+03 5.45000e+03 +2280 2.40000e+03 5.35000e+03 +2281 2.40000e+03 5.25000e+03 +2282 2.32500e+03 5.17500e+03 +2283 2.47500e+03 5.17500e+03 +2284 2.57500e+03 5.07500e+03 +2285 2.52500e+03 4.97500e+03 +2286 2.67500e+03 4.87500e+03 +2287 2.82500e+03 4.97500e+03 +2288 2.77500e+03 5.07500e+03 +2289 2.67500e+03 5.02500e+03 +2290 2.67500e+03 5.17500e+03 +2291 2.87500e+03 5.17500e+03 +2292 3.15000e+03 5.17500e+03 +2293 3.25000e+03 5.37500e+03 +2294 3.25000e+03 5.27500e+03 +2295 3.30000e+03 5.17500e+03 +2296 3.27500e+03 5.07500e+03 +2297 3.32500e+03 4.97500e+03 +2298 3.45000e+03 5.02500e+03 +2299 3.47500e+03 5.17500e+03 +2300 3.52500e+03 5.27500e+03 +2301 3.52500e+03 5.37500e+03 +2302 3.67500e+03 5.37500e+03 +2303 3.67500e+03 5.27500e+03 +2304 3.77500e+03 5.32500e+03 +2305 3.77200e+03 5.20400e+03 +2306 3.80000e+03 5.07500e+03 +2307 3.80000e+03 4.92500e+03 +2308 3.67500e+03 4.92500e+03 +2309 3.67500e+03 4.77500e+03 +2310 3.67500e+03 4.67500e+03 +2311 3.67500e+03 4.57500e+03 +2312 3.52500e+03 4.72500e+03 +2313 3.40000e+03 4.67500e+03 +2314 3.37500e+03 4.77500e+03 +2315 3.22500e+03 4.77500e+03 +2316 3.02500e+03 4.57500e+03 +2317 3.12500e+03 4.57500e+03 +2318 3.20000e+03 4.52500e+03 +2319 3.30000e+03 4.50000e+03 +2320 3.30000e+03 4.40000e+03 +2321 3.20000e+03 4.42500e+03 +2322 3.20000e+03 4.32500e+03 +2323 3.12500e+03 4.27500e+03 +2324 3.02500e+03 4.27500e+03 +2325 2.92500e+03 4.17500e+03 +2326 2.90000e+03 3.92500e+03 +2327 2.90000e+03 3.72500e+03 +2328 2.90000e+03 3.32500e+03 +2329 2.45000e+03 3.32500e+03 +2330 2.45000e+03 3.72500e+03 +2331 2.45000e+03 3.92500e+03 +2332 2.72500e+03 4.17500e+03 +2333 2.62500e+03 4.17500e+03 +2334 2.42500e+03 4.17500e+03 +2335 2.32500e+03 4.27500e+03 +2336 2.22500e+03 4.27500e+03 +2337 2.15000e+03 4.32500e+03 +2338 2.15000e+03 4.42500e+03 +2339 2.05000e+03 4.42500e+03 +2340 2.05000e+03 4.52500e+03 +2341 2.15000e+03 4.52500e+03 +2342 2.22500e+03 4.60000e+03 +2343 2.32500e+03 4.60000e+03 +2344 2.12500e+03 4.77500e+03 +2345 1.97500e+03 4.77500e+03 +2346 1.95000e+03 4.67500e+03 +2347 1.87500e+03 4.77500e+03 +2348 1.92500e+03 4.92500e+03 +2349 2.02500e+03 4.97500e+03 +2350 2.07500e+03 5.07500e+03 +2351 1.92500e+03 5.07500e+03 +2352 1.82500e+03 5.02500e+03 +2353 1.82500e+03 5.27500e+03 +2354 1.82500e+03 5.42500e+03 +2355 1.82500e+03 5.52500e+03 +2356 1.82500e+03 5.67500e+03 +2357 1.56500e+03 5.61000e+03 +2358 1.56500e+03 5.46000e+03 +2359 1.56500e+03 5.31000e+03 +2360 1.56500e+03 5.16000e+03 +2361 1.56500e+03 5.01000e+03 +2362 1.56500e+03 4.86000e+03 +2363 1.72500e+03 4.77500e+03 +2364 1.56500e+03 4.71000e+03 +2365 1.56500e+03 4.56000e+03 +2366 1.67500e+03 4.50000e+03 +2367 1.75000e+03 4.55000e+03 +2368 1.75000e+03 4.45000e+03 +2369 1.67500e+03 4.37500e+03 +2370 1.62500e+03 4.27500e+03 +2371 1.72500e+03 4.27500e+03 +2372 1.95000e+03 4.17500e+03 +2373 2.05000e+03 4.27500e+03 +2374 2.15000e+03 4.17500e+03 +2375 2.05000e+03 4.12500e+03 +2376 2.07500e+03 3.97500e+03 +2377 2.07500e+03 3.87500e+03 +2378 1.97500e+03 3.97500e+03 +2379 1.90000e+03 3.87500e+03 +2380 1.77500e+03 3.87500e+03 +2381 1.62500e+03 3.90000e+03 +2382 1.60000e+03 3.70000e+03 +2383 1.60000e+03 3.57500e+03 +2384 1.60000e+03 3.47500e+03 +2385 1.60000e+03 3.37500e+03 +2386 1.60000e+03 3.27500e+03 +2387 1.72500e+03 2.97500e+03 +2388 1.64000e+03 2.65600e+03 +2389 1.63900e+03 2.55600e+03 +2390 1.63900e+03 2.45600e+03 +2391 1.64000e+03 2.35500e+03 +2392 1.64000e+03 2.25600e+03 +EOF diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/benchs/readme b/trunk/paradiseo-old-mo/tutorial/examples/tsp/benchs/readme new file mode 100644 index 000000000..6a9fb5488 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/benchs/readme @@ -0,0 +1,93 @@ +All the instances in this directory come from the TSPLIB database. All the TSPLIB instances can be downloaded at this address: +http://www.iwr.uni-heidelberg.de/groups/comopt/software/TSPLIB95/tsp/ + +The accepted format is: + +NAME: instance_name +TYPE: TSP +COMMENT: comments about the instance +DIMENSION: number of towns. +EDGE_WEIGHT_TYPE: EUC_2D +NODE_COORD_SECTION +1 565.0 575.0 +2 25.0 185.0 +3 345.0 750.0 +. +. +. +. +. +. +EOF + +Compatibility bugs with some TSPLIB instances (soon corrected): + +==> some instances have a space after a section title, for example "NAME :" instead of "NAME:". +==> several instances have the "COMMENT:" section before the "TYPE:" section. +==> several section are not yet implemented ("DISPLAY_DATA_TYPE:", ...). + +Already corrected bugs: + +==> some instances have several lines with the keyword "COMMENTS:" + +For instance, the Berlin52 instance: + +NAME: berlin52 +TYPE: TSP +COMMENT: 52 locations in Berlin (Groetschel) +DIMENSION: 52 +EDGE_WEIGHT_TYPE: EUC_2D +NODE_COORD_SECTION +1 565.0 575.0 +2 25.0 185.0 +3 345.0 750.0 +4 945.0 685.0 +5 845.0 655.0 +6 880.0 660.0 +7 25.0 230.0 +8 525.0 1000.0 +9 580.0 1175.0 +10 650.0 1130.0 +11 1605.0 620.0 +12 1220.0 580.0 +13 1465.0 200.0 +14 1530.0 5.0 +15 845.0 680.0 +16 725.0 370.0 +17 145.0 665.0 +18 415.0 635.0 +19 510.0 875.0 +20 560.0 365.0 +21 300.0 465.0 +22 520.0 585.0 +23 480.0 415.0 +24 835.0 625.0 +25 975.0 580.0 +26 1215.0 245.0 +27 1320.0 315.0 +28 1250.0 400.0 +29 660.0 180.0 +30 410.0 250.0 +31 420.0 555.0 +32 575.0 665.0 +33 1150.0 1160.0 +34 700.0 580.0 +35 685.0 595.0 +36 685.0 610.0 +37 770.0 610.0 +38 795.0 645.0 +39 720.0 635.0 +40 760.0 650.0 +41 475.0 960.0 +42 95.0 260.0 +43 875.0 920.0 +44 700.0 500.0 +45 555.0 815.0 +46 830.0 485.0 +47 1170.0 65.0 +48 830.0 610.0 +49 605.0 625.0 +50 595.0 360.0 +51 1340.0 725.0 +52 1740.0 245.0 +EOF diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/benchs/rl5915.tsp b/trunk/paradiseo-old-mo/tutorial/examples/tsp/benchs/rl5915.tsp new file mode 100644 index 000000000..86f6a24fd --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/benchs/rl5915.tsp @@ -0,0 +1,5922 @@ +NAME: rl5915 +TYPE: TSP +COMMENT: 5915-city TSP (Reinelt) +DIMENSION: 5915 +EDGE_WEIGHT_TYPE: EUC_2D +NODE_COORD_SECTION +1 1.81920e+04 8.95400e+03 +2 1.81920e+04 9.85600e+03 +3 1.81920e+04 1.13190e+04 +4 1.82720e+04 8.62400e+03 +5 1.84160e+04 7.34800e+03 +6 1.84160e+04 8.29400e+03 +7 1.20000e+03 7.37000e+03 +8 1.20000e+03 8.18400e+03 +9 1.20000e+03 1.09120e+04 +10 1.20000e+03 1.14400e+04 +11 1.79040e+04 5.72000e+02 +12 1.79040e+04 2.68400e+03 +13 1.79040e+04 6.90800e+03 +14 1.79040e+04 7.34800e+03 +15 1.79040e+04 8.62400e+03 +16 8.27200e+03 3.08000e+02 +17 8.27200e+03 2.06800e+03 +18 8.27200e+03 2.50800e+03 +19 8.27200e+03 3.08000e+03 +20 8.27200e+03 3.60800e+03 +21 8.27200e+03 5.30200e+03 +22 8.33600e+03 7.26000e+03 +23 8.46400e+03 7.26000e+03 +24 8.49600e+03 9.54800e+03 +25 8.49600e+03 1.05820e+04 +26 8.49600e+03 1.14400e+04 +27 1.58880e+04 9.06400e+03 +28 1.58880e+04 9.50400e+03 +29 1.58880e+04 1.02520e+04 +30 1.58880e+04 1.10000e+04 +31 1.59360e+04 8.18400e+03 +32 1.60480e+04 8.18400e+03 +33 1.62080e+04 8.18400e+03 +34 1.63360e+04 5.72000e+02 +35 1.63360e+04 1.01200e+03 +36 1.63360e+04 1.45200e+03 +37 1.63360e+04 2.99200e+03 +38 1.63360e+04 4.81800e+03 +39 1.63360e+04 6.02800e+03 +40 1.63360e+04 7.34800e+03 +41 1.04000e+03 7.37000e+03 +42 1.04000e+03 8.18400e+03 +43 1.04000e+03 1.09120e+04 +44 1.04000e+03 1.14400e+04 +45 4.46400e+03 3.08000e+02 +46 4.64000e+03 3.08000e+02 +47 4.81600e+03 3.08000e+02 +48 4.94400e+03 3.08000e+02 +49 5.16800e+03 3.08000e+02 +50 5.44000e+03 3.08000e+02 +51 5.61600e+03 3.08000e+02 +52 5.72800e+03 3.08000e+02 +53 5.80800e+03 3.08000e+03 +54 5.80800e+03 3.60800e+03 +55 5.80800e+03 4.66400e+03 +56 5.80800e+03 5.36800e+03 +57 5.80800e+03 6.07200e+03 +58 5.80800e+03 7.12800e+03 +59 5.93600e+03 9.65800e+03 +60 5.93600e+03 1.12860e+04 +61 1.68480e+04 5.72000e+02 +62 1.68480e+04 1.45200e+03 +63 1.68480e+04 2.99200e+03 +64 1.68480e+04 4.70800e+03 +65 1.68480e+04 6.02800e+03 +66 1.68480e+04 7.34800e+03 +67 1.68480e+04 8.51400e+03 +68 1.68480e+04 9.28400e+03 +69 1.68480e+04 9.92200e+03 +70 1.68480e+04 1.11980e+04 +71 8.24000e+03 7.48000e+03 +72 8.40000e+03 9.54800e+03 +73 8.40000e+03 1.05820e+04 +74 8.40000e+03 1.14400e+04 +75 1.52000e+03 9.15200e+03 +76 1.52000e+03 1.09120e+04 +77 1.52000e+03 1.14400e+04 +78 1.58400e+03 6.44600e+03 +79 1.58400e+03 7.59000e+03 +80 1.58400e+03 8.29400e+03 +81 5.16800e+03 1.14400e+04 +82 5.28000e+03 1.14400e+04 +83 5.45600e+03 1.14400e+04 +84 5.58400e+03 1.14400e+04 +85 5.71200e+03 1.14400e+04 +86 2.67200e+03 6.33600e+03 +87 2.78400e+03 6.55600e+03 +88 2.97600e+03 6.55600e+03 +89 3.10400e+03 6.55600e+03 +90 3.26400e+03 6.55600e+03 +91 3.36000e+03 6.55600e+03 +92 3.60000e+03 6.55600e+03 +93 3.85600e+03 6.55600e+03 +94 3.92000e+03 6.55600e+03 +95 4.01600e+03 6.55600e+03 +96 4.14400e+03 6.55600e+03 +97 4.20800e+03 6.55600e+03 +98 4.35200e+03 6.55600e+03 +99 4.46400e+03 6.55600e+03 +100 4.56000e+03 6.55600e+03 +101 4.68800e+03 6.55600e+03 +102 4.72000e+03 7.26000e+03 +103 4.72000e+03 8.14000e+03 +104 4.72000e+03 9.70200e+03 +105 4.72000e+03 1.05820e+04 +106 4.72000e+03 1.11320e+04 +107 1.70080e+04 5.72000e+02 +108 1.70080e+04 1.45200e+03 +109 1.70080e+04 2.99200e+03 +110 1.70080e+04 5.87400e+03 +111 1.70080e+04 7.34800e+03 +112 1.70720e+04 8.09600e+03 +113 1.71360e+04 8.09600e+03 +114 1.72800e+04 8.09600e+03 +115 1.74560e+04 8.09600e+03 +116 1.75200e+04 8.40400e+03 +117 1.75200e+04 8.95400e+03 +118 1.75200e+04 1.01420e+04 +119 1.75200e+04 1.13190e+04 +120 8.80000e+02 7.37000e+03 +121 8.80000e+02 8.18400e+03 +122 8.80000e+02 1.14400e+04 +123 4.14400e+03 4.84000e+03 +124 4.14400e+03 7.70000e+03 +125 4.30400e+03 8.36000e+03 +126 4.41600e+03 8.36000e+03 +127 4.57600e+03 8.36000e+03 +128 4.65600e+03 8.36000e+03 +129 4.86400e+03 8.36000e+03 +130 5.04000e+03 8.36000e+03 +131 5.29600e+03 8.36000e+03 +132 5.45600e+03 8.84400e+03 +133 5.45600e+03 9.81200e+03 +134 5.52000e+03 3.60800e+03 +135 5.52000e+03 4.66400e+03 +136 5.52000e+03 5.36800e+03 +137 5.52000e+03 5.91800e+03 +138 5.52000e+03 6.93000e+03 +139 1.65600e+04 8.95400e+03 +140 1.65600e+04 9.92200e+03 +141 1.65920e+04 5.72000e+02 +142 1.65920e+04 1.45200e+03 +143 1.65920e+04 2.99200e+03 +144 1.65920e+04 4.81800e+03 +145 1.65920e+04 6.13800e+03 +146 1.65920e+04 7.34800e+03 +147 7.72800e+03 7.74400e+03 +148 7.72800e+03 9.54800e+03 +149 7.72800e+03 1.08460e+04 +150 7.79200e+03 7.04000e+03 +151 7.85600e+03 7.04000e+03 +152 7.95200e+03 7.04000e+03 +153 8.01600e+03 3.08000e+02 +154 8.01600e+03 2.06800e+03 +155 8.01600e+03 2.50800e+03 +156 8.01600e+03 3.08000e+03 +157 8.01600e+03 3.60800e+03 +158 8.01600e+03 4.26800e+03 +159 8.01600e+03 5.85200e+03 +160 1.62720e+04 9.06400e+03 +161 1.62720e+04 9.50400e+03 +162 1.62720e+04 9.92200e+03 +163 1.62720e+04 1.10000e+04 +164 1.66400e+04 8.84400e+03 +165 1.67200e+04 8.84400e+03 +166 1.67840e+04 6.02800e+03 +167 1.67840e+04 7.34800e+03 +168 1.67840e+04 8.51400e+03 +169 4.64000e+02 1.14400e+04 +170 5.28000e+02 8.18400e+03 +171 6.40000e+02 8.18400e+03 +172 7.84000e+02 7.37000e+03 +173 7.84000e+02 7.96400e+03 +174 7.66400e+03 6.44600e+03 +175 7.66400e+03 8.07400e+03 +176 7.66400e+03 9.54800e+03 +177 7.66400e+03 1.08460e+04 +178 7.72800e+03 3.08000e+02 +179 7.72800e+03 2.06800e+03 +180 7.72800e+03 2.50800e+03 +181 7.72800e+03 3.08000e+03 +182 7.72800e+03 3.60800e+03 +183 7.72800e+03 4.04800e+03 +184 7.72800e+03 4.48800e+03 +185 5.23200e+03 3.60800e+03 +186 5.23200e+03 4.66400e+03 +187 5.23200e+03 5.36800e+03 +188 5.23200e+03 5.91800e+03 +189 5.23200e+03 6.77600e+03 +190 5.52000e+03 7.92000e+03 +191 3.85600e+03 7.48000e+03 +192 3.92000e+03 7.92000e+03 +193 4.01600e+03 7.92000e+03 +194 4.17600e+03 9.15200e+03 +195 4.17600e+03 9.92200e+03 +196 4.17600e+03 1.04720e+04 +197 4.17600e+03 1.09120e+04 +198 4.17600e+03 1.14400e+04 +199 5.98400e+03 7.48000e+02 +200 6.09600e+03 3.08000e+03 +201 6.09600e+03 3.60800e+03 +202 6.09600e+03 4.66400e+03 +203 6.16000e+03 5.36800e+03 +204 6.22400e+03 5.36800e+03 +205 6.32000e+03 5.36800e+03 +206 6.49600e+03 5.36800e+03 +207 6.60800e+03 5.69800e+03 +208 6.60800e+03 6.33600e+03 +209 6.60800e+03 7.50200e+03 +210 6.60800e+03 9.06400e+03 +211 6.60800e+03 1.01420e+04 +212 6.60800e+03 1.10220e+04 +213 1.72000e+04 5.87400e+03 +214 1.72000e+04 7.34800e+03 +215 1.72000e+04 9.28400e+03 +216 1.72000e+04 9.92200e+03 +217 1.72000e+04 1.11980e+04 +218 1.72960e+04 5.19200e+03 +219 1.74400e+04 5.19200e+03 +220 1.75680e+04 5.19200e+03 +221 1.76160e+04 5.72000e+02 +222 1.76160e+04 2.99200e+03 +223 7.24800e+03 1.03620e+04 +224 7.24800e+03 1.12860e+04 +225 7.37600e+03 3.08000e+02 +226 7.37600e+03 9.68000e+02 +227 7.37600e+03 2.06800e+03 +228 7.37600e+03 2.50800e+03 +229 7.37600e+03 3.08000e+03 +230 7.37600e+03 3.60800e+03 +231 7.37600e+03 4.48800e+03 +232 7.37600e+03 5.58800e+03 +233 7.37600e+03 6.55600e+03 +234 7.37600e+03 7.74400e+03 +235 1.80800e+03 6.44600e+03 +236 1.84000e+03 7.43600e+03 +237 1.84000e+03 8.40400e+03 +238 1.84000e+03 9.04200e+03 +239 1.84000e+03 1.09120e+04 +240 1.84000e+03 1.14400e+04 +241 1.22720e+04 9.87800e+03 +242 1.24640e+04 9.06400e+03 +243 1.25920e+04 9.06400e+03 +244 1.27360e+04 9.06400e+03 +245 1.28480e+04 9.02000e+02 +246 1.28480e+04 1.98000e+03 +247 1.28480e+04 2.64000e+03 +248 1.28480e+04 3.16800e+03 +249 1.28480e+04 3.60800e+03 +250 1.28480e+04 4.15800e+03 +251 1.28480e+04 5.36800e+03 +252 1.28480e+04 6.55600e+03 +253 1.28480e+04 6.99600e+03 +254 1.28480e+04 8.00800e+03 +255 1.28480e+04 8.84400e+03 +256 1.64800e+03 8.40400e+03 +257 1.64800e+03 9.15200e+03 +258 1.64800e+03 1.09120e+04 +259 1.64800e+03 1.14400e+04 +260 1.68000e+03 6.44600e+03 +261 1.68000e+03 7.59000e+03 +262 6.25600e+03 9.65800e+03 +263 6.25600e+03 1.10220e+04 +264 1.69760e+04 8.51400e+03 +265 1.69760e+04 9.28400e+03 +266 1.69760e+04 9.92200e+03 +267 1.69760e+04 1.11980e+04 +268 1.70720e+04 5.72000e+03 +269 1.71360e+04 5.72000e+03 +270 1.74400e+04 5.72000e+03 +271 1.76000e+04 5.72000e+03 +272 1.16000e+04 5.72000e+02 +273 1.16000e+04 1.76000e+03 +274 1.16000e+04 3.38800e+03 +275 1.16000e+04 5.25800e+03 +276 1.16000e+04 6.55600e+03 +277 1.16000e+04 6.99600e+03 +278 1.16000e+04 7.89800e+03 +279 1.16320e+04 8.60200e+03 +280 1.16320e+04 9.28400e+03 +281 1.16320e+04 1.02080e+04 +282 1.73760e+04 1.01420e+04 +283 1.77280e+04 1.01420e+04 +284 1.84160e+04 1.01420e+04 +285 1.86080e+04 1.01420e+04 +286 1.87040e+04 1.01420e+04 +287 1.88640e+04 1.01420e+04 +288 1.89920e+04 1.01420e+04 +289 1.90880e+04 1.01420e+04 +290 6.22400e+03 9.68000e+02 +291 6.22400e+03 3.08000e+03 +292 6.22400e+03 3.60800e+03 +293 6.22400e+03 4.66400e+03 +294 6.40000e+03 1.09120e+04 +295 6.76800e+03 1.09120e+04 +296 6.86400e+03 1.12860e+04 +297 1.93600e+03 6.33600e+03 +298 1.93600e+03 7.43600e+03 +299 1.96800e+03 8.40400e+03 +300 1.96800e+03 9.15200e+03 +301 1.96800e+03 1.09120e+04 +302 1.96800e+03 1.14400e+04 +303 3.98400e+03 8.71200e+03 +304 4.30400e+03 8.93200e+03 +305 4.41600e+03 8.93200e+03 +306 4.49600e+03 1.08020e+04 +307 1.54400e+04 1.23200e+03 +308 1.54400e+04 3.60800e+03 +309 1.54400e+04 4.18000e+03 +310 1.54400e+04 4.81800e+03 +311 1.55360e+04 5.80800e+03 +312 1.56480e+04 5.80800e+03 +313 1.57600e+04 5.80800e+03 +314 1.58400e+04 5.80800e+03 +315 1.59360e+04 5.80800e+03 +316 1.60480e+04 5.80800e+03 +317 1.62080e+04 5.80800e+03 +318 5.58400e+03 1.02520e+04 +319 5.72800e+03 1.02520e+04 +320 6.00000e+03 1.02520e+04 +321 6.06400e+03 1.02520e+04 +322 6.16000e+03 1.02520e+04 +323 6.32000e+03 9.68000e+02 +324 6.32000e+03 3.08000e+03 +325 6.32000e+03 3.60800e+03 +326 6.32000e+03 4.66400e+03 +327 6.38400e+03 9.54800e+03 +328 6.38400e+03 1.04720e+04 +329 1.67200e+04 1.11980e+04 +330 1.70880e+04 1.11980e+04 +331 1.73760e+04 1.11980e+04 +332 1.77280e+04 1.11980e+04 +333 1.84160e+04 1.11980e+04 +334 1.86080e+04 1.11980e+04 +335 1.87040e+04 1.11980e+04 +336 1.88480e+04 1.11980e+04 +337 1.52800e+04 5.72000e+02 +338 1.52800e+04 1.23200e+03 +339 1.52800e+04 3.60800e+03 +340 1.52800e+04 4.18000e+03 +341 1.52800e+04 4.81800e+03 +342 1.52800e+04 6.13800e+03 +343 1.52800e+04 7.34800e+03 +344 1.52800e+04 8.22800e+03 +345 1.52800e+04 9.06400e+03 +346 1.52800e+04 9.50400e+03 +347 1.52800e+04 1.02520e+04 +348 1.52800e+04 1.10000e+04 +349 3.47200e+03 7.92000e+03 +350 3.47200e+03 8.71200e+03 +351 3.47200e+03 9.37200e+03 +352 3.47200e+03 1.04720e+04 +353 3.47200e+03 1.09120e+04 +354 3.47200e+03 1.14400e+04 +355 2.08000e+02 1.14400e+04 +356 4.32000e+02 7.96400e+03 +357 9.44000e+02 7.96400e+03 +358 1.10400e+03 7.37000e+03 +359 1.42400e+03 6.44600e+03 +360 1.42400e+03 7.37000e+03 +361 1.42400e+03 8.29400e+03 +362 1.00960e+04 4.37800e+03 +363 1.00960e+04 5.47800e+03 +364 1.00960e+04 6.55600e+03 +365 1.00960e+04 7.48000e+03 +366 1.00960e+04 8.00800e+03 +367 1.00960e+04 8.60200e+03 +368 1.00960e+04 9.28400e+03 +369 1.00960e+04 1.03180e+04 +370 1.00960e+04 1.14400e+04 +371 1.02560e+04 3.60800e+03 +372 1.03360e+04 3.60800e+03 +373 1.04480e+04 3.60800e+03 +374 1.05440e+04 3.60800e+03 +375 1.06080e+04 3.60800e+03 +376 1.06720e+04 3.60800e+03 +377 1.07520e+04 3.60800e+03 +378 1.08640e+04 3.60800e+03 +379 1.09920e+04 3.60800e+03 +380 1.10880e+04 3.60800e+03 +381 1.11680e+04 3.60800e+03 +382 1.12800e+04 3.60800e+03 +383 1.14080e+04 3.60800e+03 +384 6.88000e+02 7.37000e+03 +385 6.88000e+02 1.14400e+04 +386 6.16000e+03 9.68000e+02 +387 6.49600e+03 9.68000e+02 +388 6.59200e+03 9.68000e+02 +389 6.73600e+03 9.68000e+02 +390 6.84800e+03 9.68000e+02 +391 6.94400e+03 9.68000e+02 +392 7.10400e+03 9.68000e+02 +393 7.23200e+03 9.68000e+02 +394 7.55200e+03 9.68000e+02 +395 7.60000e+03 3.08000e+02 +396 7.60000e+03 2.06800e+03 +397 7.60000e+03 2.50800e+03 +398 7.60000e+03 3.08000e+03 +399 7.60000e+03 3.60800e+03 +400 7.60000e+03 4.04800e+03 +401 7.60000e+03 4.48800e+03 +402 7.63200e+03 5.14800e+03 +403 7.79200e+03 5.14800e+03 +404 7.85600e+03 5.14800e+03 +405 7.92000e+03 5.14800e+03 +406 8.11200e+03 5.14800e+03 +407 8.38400e+03 5.14800e+03 +408 8.46400e+03 5.14800e+03 +409 8.62400e+03 5.14800e+03 +410 8.80000e+03 5.14800e+03 +411 8.91200e+03 5.14800e+03 +412 9.21600e+03 5.14800e+03 +413 9.50400e+03 5.14800e+03 +414 9.61600e+03 5.14800e+03 +415 9.74400e+03 5.14800e+03 +416 9.88800e+03 5.14800e+03 +417 9.93600e+03 6.55600e+03 +418 9.93600e+03 7.48000e+03 +419 9.93600e+03 8.38200e+03 +420 9.93600e+03 9.28400e+03 +421 9.93600e+03 1.14400e+04 +422 1.00320e+04 5.72000e+02 +423 1.00320e+04 1.45200e+03 +424 1.00320e+04 2.72800e+03 +425 6.49600e+03 7.08400e+03 +426 6.73600e+03 7.08400e+03 +427 6.76800e+03 9.06400e+03 +428 6.76800e+03 1.01420e+04 +429 9.93600e+03 5.72000e+02 +430 9.93600e+03 1.45200e+03 +431 5.20000e+03 1.00320e+04 +432 7.40800e+03 1.03620e+04 +433 7.56800e+03 1.06920e+04 +434 7.85600e+03 1.06920e+04 +435 7.93600e+03 1.06920e+04 +436 8.03200e+03 1.06920e+04 +437 8.14400e+03 1.06920e+04 +438 8.22400e+03 1.06920e+04 +439 8.32000e+03 1.06920e+04 +440 8.78400e+03 1.06920e+04 +441 8.97600e+03 1.06920e+04 +442 9.40800e+03 1.06920e+04 +443 1.02880e+04 1.06920e+04 +444 1.04000e+04 1.06920e+04 +445 1.05600e+04 1.06920e+04 +446 1.07040e+04 1.06920e+04 +447 1.08640e+04 1.06920e+04 +448 1.09600e+04 1.06920e+04 +449 1.11360e+04 1.06920e+04 +450 1.12640e+04 1.06920e+04 +451 1.13920e+04 1.06920e+04 +452 1.14720e+04 1.06920e+04 +453 1.15680e+04 1.06920e+04 +454 4.88000e+03 9.21800e+03 +455 4.88000e+03 1.00320e+04 +456 4.88000e+03 1.05820e+04 +457 4.88000e+03 1.11320e+04 +458 4.94400e+03 3.60800e+03 +459 4.94400e+03 4.66400e+03 +460 4.94400e+03 5.36800e+03 +461 4.94400e+03 5.91800e+03 +462 4.94400e+03 6.77600e+03 +463 4.94400e+03 7.43600e+03 +464 6.94400e+03 3.08000e+02 +465 7.10400e+03 3.08000e+02 +466 7.23200e+03 3.08000e+02 +467 7.79200e+03 3.08000e+02 +468 7.85600e+03 3.08000e+02 +469 7.92000e+03 3.08000e+02 +470 8.12800e+03 3.08000e+02 +471 8.38400e+03 3.08000e+02 +472 8.46400e+03 3.08000e+02 +473 8.52800e+03 3.08000e+02 +474 8.59200e+03 3.08000e+02 +475 8.68800e+03 3.08000e+02 +476 8.80000e+03 3.08000e+02 +477 8.91200e+03 3.08000e+02 +478 9.00800e+03 3.08000e+02 +479 9.10400e+03 3.08000e+02 +480 9.20000e+03 3.08000e+02 +481 9.23200e+03 1.45200e+03 +482 9.23200e+03 2.28800e+03 +483 9.23200e+03 3.38800e+03 +484 9.34400e+03 7.26000e+03 +485 9.45600e+03 8.60200e+03 +486 9.45600e+03 1.14400e+04 +487 3.56800e+03 7.92000e+03 +488 3.66400e+03 7.92000e+03 +489 3.72800e+03 7.92000e+03 +490 8.24000e+03 9.54800e+03 +491 8.24000e+03 1.14400e+04 +492 9.37600e+03 6.77600e+03 +493 9.77600e+03 5.72000e+02 +494 9.77600e+03 1.45200e+03 +495 9.77600e+03 2.50800e+03 +496 9.77600e+03 3.38800e+03 +497 6.99200e+03 7.85400e+03 +498 6.99200e+03 9.17400e+03 +499 6.99200e+03 9.81200e+03 +500 6.99200e+03 1.03620e+04 +501 7.05600e+03 2.06800e+03 +502 7.05600e+03 3.08000e+03 +503 7.05600e+03 3.60800e+03 +504 7.05600e+03 4.66400e+03 +505 7.05600e+03 5.58800e+03 +506 7.05600e+03 6.55600e+03 +507 1.45120e+04 6.82000e+02 +508 1.46400e+04 3.60800e+03 +509 1.46400e+04 4.04800e+03 +510 1.46400e+04 4.59800e+03 +511 1.46400e+04 6.13800e+03 +512 1.46400e+04 7.56800e+03 +513 1.46400e+04 8.22800e+03 +514 1.46400e+04 9.06400e+03 +515 1.46400e+04 9.50400e+03 +516 1.46400e+04 1.02520e+04 +517 1.46400e+04 1.10000e+04 +518 1.47680e+04 1.01200e+03 +519 1.48480e+04 1.01200e+03 +520 1.49600e+04 1.01200e+03 +521 1.53760e+04 1.01200e+03 +522 1.55360e+04 1.01200e+03 +523 1.56640e+04 1.01200e+03 +524 1.57600e+04 1.01200e+03 +525 1.58400e+04 1.01200e+03 +526 1.59360e+04 1.01200e+03 +527 1.60480e+04 1.01200e+03 +528 1.62080e+04 1.01200e+03 +529 1.64640e+04 1.01200e+03 +530 1.65280e+04 5.72000e+02 +531 1.47360e+04 6.13800e+03 +532 1.47360e+04 7.56800e+03 +533 1.47360e+04 8.22800e+03 +534 1.47360e+04 9.06400e+03 +535 1.47360e+04 9.50400e+03 +536 1.47360e+04 1.02520e+04 +537 1.47360e+04 1.08900e+04 +538 1.47680e+04 4.92800e+03 +539 1.48800e+04 4.92800e+03 +540 1.49760e+04 4.92800e+03 +541 1.53760e+04 4.92800e+03 +542 1.55360e+04 4.92800e+03 +543 1.56480e+04 4.92800e+03 +544 1.57600e+04 4.92800e+03 +545 1.58400e+04 4.92800e+03 +546 1.59360e+04 4.92800e+03 +547 1.60480e+04 4.92800e+03 +548 1.62080e+04 4.92800e+03 +549 1.64640e+04 4.92800e+03 +550 1.67040e+04 4.92800e+03 +551 1.38080e+04 6.02800e+03 +552 1.38080e+04 6.77600e+03 +553 1.38080e+04 7.78800e+03 +554 1.38080e+04 8.22800e+03 +555 1.38080e+04 9.50400e+03 +556 1.38080e+04 1.03620e+04 +557 1.38080e+04 1.11100e+04 +558 1.40320e+04 4.70800e+03 +559 1.41440e+04 4.70800e+03 +560 1.43200e+04 4.70800e+03 +561 1.44640e+04 4.70800e+03 +562 1.69440e+04 4.70800e+03 +563 3.66400e+03 8.71200e+03 +564 3.72800e+03 9.28400e+03 +565 3.76000e+03 9.70200e+03 +566 3.76000e+03 1.04720e+04 +567 3.76000e+03 1.09120e+04 +568 3.76000e+03 1.14400e+04 +569 3.60000e+03 8.71200e+03 +570 3.60000e+03 9.48200e+03 +571 4.04800e+03 9.81200e+03 +572 4.33600e+03 9.81200e+03 +573 4.57600e+03 9.81200e+03 +574 4.65600e+03 9.81200e+03 +575 4.97600e+03 8.84400e+03 +576 8.97600e+03 8.11800e+03 +577 8.97600e+03 9.39400e+03 +578 8.97600e+03 1.14400e+04 +579 1.01760e+04 6.55600e+03 +580 1.03040e+04 6.55600e+03 +581 1.04480e+04 6.55600e+03 +582 1.05760e+04 6.55600e+03 +583 1.07360e+04 6.55600e+03 +584 1.08320e+04 6.55600e+03 +585 1.08960e+04 6.55600e+03 +586 1.09760e+04 6.55600e+03 +587 1.10880e+04 6.55600e+03 +588 1.11680e+04 6.55600e+03 +589 1.12640e+04 6.55600e+03 +590 1.14240e+04 6.55600e+03 +591 1.15360e+04 6.55600e+03 +592 1.16640e+04 6.55600e+03 +593 1.17280e+04 6.55600e+03 +594 1.17920e+04 6.55600e+03 +595 1.18720e+04 6.55600e+03 +596 1.19680e+04 6.55600e+03 +597 1.21120e+04 6.55600e+03 +598 1.22720e+04 6.55600e+03 +599 1.24480e+04 6.55600e+03 +600 1.26080e+04 6.55600e+03 +601 1.27360e+04 6.55600e+03 +602 1.30080e+04 6.55600e+03 +603 1.30720e+04 1.01200e+03 +604 1.30720e+04 1.98000e+03 +605 1.30720e+04 2.64000e+03 +606 1.30720e+04 3.60800e+03 +607 1.30720e+04 4.26800e+03 +608 1.30720e+04 5.36800e+03 +609 1.31680e+04 5.72000e+02 +610 1.32640e+04 5.72000e+02 +611 1.34080e+04 5.72000e+02 +612 1.35680e+04 5.72000e+02 +613 1.36960e+04 5.72000e+02 +614 1.40160e+04 5.72000e+02 +615 1.41600e+04 5.72000e+02 +616 1.43200e+04 5.72000e+02 +617 1.51200e+04 5.72000e+02 +618 1.53760e+04 5.72000e+02 +619 1.04800e+04 5.72000e+02 +620 1.04800e+04 1.45200e+03 +621 1.04800e+04 6.00600e+03 +622 7.12000e+03 2.50800e+03 +623 7.12000e+03 3.08000e+03 +624 7.12000e+03 3.60800e+03 +625 7.12000e+03 4.66400e+03 +626 7.12000e+03 5.58800e+03 +627 7.12000e+03 6.55600e+03 +628 7.12000e+03 7.74400e+03 +629 7.12000e+03 9.06400e+03 +630 7.12000e+03 9.81200e+03 +631 7.12000e+03 1.03620e+04 +632 7.12000e+03 1.12860e+04 +633 3.72800e+03 8.71200e+03 +634 4.01600e+03 1.04720e+04 +635 4.01600e+03 1.09120e+04 +636 4.01600e+03 1.14400e+04 +637 6.48000e+03 9.06400e+03 +638 6.89600e+03 9.06400e+03 +639 7.24800e+03 2.06800e+03 +640 7.24800e+03 2.50800e+03 +641 7.24800e+03 3.08000e+03 +642 7.24800e+03 3.60800e+03 +643 7.24800e+03 4.66400e+03 +644 7.24800e+03 5.58800e+03 +645 7.24800e+03 6.55600e+03 +646 7.24800e+03 7.48000e+03 +647 3.92000e+03 8.71200e+03 +648 5.05600e+03 9.37200e+03 +649 3.53600e+03 9.37200e+03 +650 3.53600e+03 1.04720e+04 +651 3.53600e+03 1.09120e+04 +652 3.53600e+03 1.14400e+04 +653 8.78400e+03 8.44800e+03 +654 1.03040e+04 8.44800e+03 +655 1.05600e+04 8.44800e+03 +656 1.07040e+04 8.44800e+03 +657 1.07680e+04 8.44800e+03 +658 1.08480e+04 8.44800e+03 +659 1.09760e+04 8.44800e+03 +660 1.11200e+04 8.44800e+03 +661 1.12640e+04 8.44800e+03 +662 1.15520e+04 8.44800e+03 +663 1.17600e+04 8.44800e+03 +664 1.18880e+04 8.44800e+03 +665 1.20800e+04 8.44800e+03 +666 1.22400e+04 8.44800e+03 +667 1.27200e+04 5.72000e+02 +668 1.27200e+04 1.98000e+03 +669 1.27200e+04 3.71800e+03 +670 1.27200e+04 5.36800e+03 +671 1.27200e+04 6.99600e+03 +672 2.80000e+03 7.32600e+03 +673 2.92800e+03 7.70000e+03 +674 2.99200e+03 7.70000e+03 +675 3.10400e+03 7.70000e+03 +676 3.26400e+03 7.70000e+03 +677 4.20800e+03 7.70000e+03 +678 8.11200e+03 2.06800e+03 +679 8.11200e+03 2.50800e+03 +680 8.11200e+03 3.08000e+03 +681 8.11200e+03 3.60800e+03 +682 8.11200e+03 4.26800e+03 +683 8.11200e+03 7.48000e+03 +684 9.58400e+03 2.72800e+03 +685 9.58400e+03 3.38800e+03 +686 9.84000e+03 2.28800e+03 +687 1.14400e+04 2.28800e+03 +688 1.17280e+04 2.28800e+03 +689 1.18240e+04 2.28800e+03 +690 1.19840e+04 2.28800e+03 +691 1.21120e+04 2.28800e+03 +692 1.22560e+04 2.28800e+03 +693 1.23840e+04 2.28800e+03 +694 1.24640e+04 2.28800e+03 +695 1.24960e+04 5.72000e+02 +696 1.24960e+04 1.23200e+03 +697 1.26080e+04 1.01200e+03 +698 5.58400e+03 7.92000e+03 +699 5.68000e+03 7.92000e+03 +700 5.76000e+03 7.92000e+03 +701 6.89600e+03 7.92000e+03 +702 7.56800e+03 7.92000e+03 +703 8.14400e+03 7.92000e+03 +704 8.20800e+03 7.92000e+03 +705 9.13600e+03 7.59000e+03 +706 1.05440e+04 6.11600e+03 +707 1.10880e+04 6.11600e+03 +708 1.11680e+04 6.11600e+03 +709 1.12640e+04 6.11600e+03 +710 1.13120e+04 5.72000e+02 +711 1.13120e+04 1.49600e+03 +712 1.13120e+04 5.25800e+03 +713 1.07680e+04 5.72000e+02 +714 1.07680e+04 1.34200e+03 +715 1.07680e+04 4.48800e+03 +716 1.07680e+04 5.03800e+03 +717 1.07680e+04 5.58800e+03 +718 1.07680e+04 6.99600e+03 +719 1.07680e+04 9.28400e+03 +720 1.07680e+04 9.87800e+03 +721 5.58400e+03 8.84400e+03 +722 5.61600e+03 3.08000e+03 +723 6.16000e+03 3.08000e+03 +724 6.49600e+03 3.08000e+03 +725 6.60800e+03 3.08000e+03 +726 6.73600e+03 3.08000e+03 +727 6.84800e+03 3.08000e+03 +728 6.94400e+03 3.08000e+03 +729 7.79200e+03 3.08000e+03 +730 7.85600e+03 3.08000e+03 +731 7.92000e+03 3.08000e+03 +732 8.38400e+03 3.08000e+03 +733 8.46400e+03 3.08000e+03 +734 8.56000e+03 3.08000e+03 +735 8.68800e+03 3.08000e+03 +736 8.80000e+03 3.08000e+03 +737 8.91200e+03 3.08000e+03 +738 9.00800e+03 3.08000e+03 +739 8.68800e+03 2.28800e+03 +740 8.46400e+03 6.11600e+03 +741 8.52800e+03 2.06800e+03 +742 8.52800e+03 2.50800e+03 +743 8.52800e+03 3.60800e+03 +744 8.46400e+03 2.06800e+03 +745 8.46400e+03 2.50800e+03 +746 8.46400e+03 3.60800e+03 +747 1.74560e+04 5.72000e+02 +748 1.74560e+04 2.99200e+03 +749 1.74560e+04 7.23800e+03 +750 1.17280e+04 2.94800e+03 +751 1.18240e+04 2.94800e+03 +752 1.19840e+04 2.94800e+03 +753 1.21120e+04 2.94800e+03 +754 1.22560e+04 2.94800e+03 +755 1.23840e+04 2.94800e+03 +756 1.24640e+04 2.94800e+03 +757 1.25600e+04 5.72000e+02 +758 1.25600e+04 1.98000e+03 +759 1.25600e+04 2.72800e+03 +760 1.75520e+04 7.23800e+03 +761 1.76320e+04 8.18400e+03 +762 1.77760e+04 8.18400e+03 +763 1.80800e+04 8.18400e+03 +764 1.82560e+04 9.06400e+03 +765 1.04480e+04 1.00320e+04 +766 1.05600e+04 1.00320e+04 +767 1.07040e+04 1.00320e+04 +768 1.08640e+04 1.00320e+04 +769 1.09760e+04 1.00320e+04 +770 1.11360e+04 1.00320e+04 +771 1.17600e+04 1.00320e+04 +772 1.18880e+04 1.00320e+04 +773 1.20320e+04 1.00320e+04 +774 1.21440e+04 1.00320e+04 +775 1.28800e+04 1.00320e+04 +776 1.30080e+04 1.00320e+04 +777 1.31680e+04 1.00320e+04 +778 1.33120e+04 1.00320e+04 +779 1.34720e+04 1.00320e+04 +780 1.35840e+04 1.00320e+04 +781 1.36800e+04 3.60800e+03 +782 1.36800e+04 4.26800e+03 +783 1.36800e+04 6.02800e+03 +784 1.36800e+04 6.77600e+03 +785 1.36800e+04 8.00800e+03 +786 1.36800e+04 9.50400e+03 +787 1.77600e+04 6.90800e+03 +788 1.80480e+04 6.90800e+03 +789 1.81280e+04 7.34800e+03 +790 1.26400e+04 3.38800e+03 +791 1.27840e+04 2.64000e+03 +792 1.27840e+04 3.16800e+03 +793 1.09760e+04 8.00800e+03 +794 1.10880e+04 8.00800e+03 +795 1.12640e+04 8.00800e+03 +796 1.16640e+04 8.00800e+03 +797 1.17280e+04 8.00800e+03 +798 1.17920e+04 8.00800e+03 +799 1.18880e+04 8.00800e+03 +800 1.29120e+04 8.00800e+03 +801 1.30080e+04 8.00800e+03 +802 1.31840e+04 8.00800e+03 +803 1.33280e+04 8.00800e+03 +804 1.34560e+04 8.00800e+03 +805 1.35680e+04 8.00800e+03 +806 8.40000e+03 2.06800e+03 +807 8.40000e+03 2.50800e+03 +808 8.40000e+03 3.60800e+03 +809 9.32800e+03 1.45200e+03 +810 9.52000e+03 1.45200e+03 +811 9.63200e+03 1.45200e+03 +812 9.84000e+03 1.45200e+03 +813 1.01600e+04 1.45200e+03 +814 1.02560e+04 1.45200e+03 +815 1.03360e+04 1.45200e+03 +816 1.05440e+04 1.45200e+03 +817 1.06080e+04 1.45200e+03 +818 1.06720e+04 1.45200e+03 +819 1.08640e+04 1.45200e+03 +820 1.09920e+04 1.45200e+03 +821 1.10880e+04 1.45200e+03 +822 1.11680e+04 1.45200e+03 +823 1.23040e+04 5.72000e+02 +824 1.48640e+04 3.60800e+03 +825 1.48640e+04 4.04800e+03 +826 1.48640e+04 6.13800e+03 +827 1.48640e+04 7.56800e+03 +828 1.48640e+04 8.22800e+03 +829 1.48640e+04 9.06400e+03 +830 1.48640e+04 9.50400e+03 +831 1.48640e+04 1.02520e+04 +832 1.48640e+04 1.08900e+04 +833 7.79200e+03 2.06800e+03 +834 7.79200e+03 2.50800e+03 +835 7.79200e+03 3.60800e+03 +836 7.79200e+03 4.04800e+03 +837 7.79200e+03 4.48800e+03 +838 7.79200e+03 6.44600e+03 +839 1.53760e+04 3.60800e+03 +840 1.53760e+04 4.18000e+03 +841 1.53760e+04 6.13800e+03 +842 1.53760e+04 7.34800e+03 +843 6.86400e+03 2.06800e+03 +844 6.86400e+03 3.60800e+03 +845 6.86400e+03 4.77400e+03 +846 6.92800e+03 5.36800e+03 +847 1.05440e+04 5.36800e+03 +848 1.06720e+04 5.36800e+03 +849 1.07040e+04 9.28400e+03 +850 1.24640e+04 1.10000e+04 +851 1.25920e+04 1.10000e+04 +852 1.27360e+04 1.10000e+04 +853 1.28800e+04 1.10000e+04 +854 1.30080e+04 1.10000e+04 +855 1.31680e+04 1.10000e+04 +856 1.33120e+04 1.10000e+04 +857 1.34560e+04 1.10000e+04 +858 1.35840e+04 1.10000e+04 +859 1.41440e+04 1.10000e+04 +860 1.42240e+04 1.10000e+04 +861 1.43360e+04 1.10000e+04 +862 1.44160e+04 1.10000e+04 +863 1.49920e+04 1.10000e+04 +864 1.54400e+04 1.10000e+04 +865 1.56320e+04 1.10000e+04 +866 1.57600e+04 1.10000e+04 +867 1.58240e+04 1.10000e+04 +868 1.61600e+04 1.10000e+04 +869 1.64640e+04 1.10000e+04 +870 1.59520e+04 5.72000e+02 +871 1.59520e+04 1.45200e+03 +872 1.60480e+04 2.99200e+03 +873 1.62080e+04 2.99200e+03 +874 1.64640e+04 2.99200e+03 +875 1.67040e+04 2.99200e+03 +876 1.70720e+04 2.99200e+03 +877 1.71360e+04 2.99200e+03 +878 1.72960e+04 2.99200e+03 +879 1.56640e+04 5.72000e+02 +880 1.56640e+04 3.60800e+03 +881 1.56640e+04 4.18000e+03 +882 1.56640e+04 7.34800e+03 +883 1.56640e+04 7.78800e+03 +884 1.56640e+04 9.06400e+03 +885 1.56640e+04 9.50400e+03 +886 1.56640e+04 1.02520e+04 +887 1.64320e+04 1.45200e+03 +888 8.14400e+03 9.54800e+03 +889 8.14400e+03 1.14400e+04 +890 9.61600e+03 5.72000e+02 +891 1.21120e+04 5.72000e+02 +892 1.21120e+04 3.93800e+03 +893 1.21120e+04 5.25800e+03 +894 8.30400e+03 9.54800e+03 +895 8.30400e+03 1.14400e+04 +896 1.29120e+04 8.84400e+03 +897 1.30080e+04 8.84400e+03 +898 1.31840e+04 8.84400e+03 +899 1.33280e+04 8.84400e+03 +900 1.34560e+04 8.84400e+03 +901 1.35520e+04 3.60800e+03 +902 1.35520e+04 4.37800e+03 +903 1.35520e+04 5.36800e+03 +904 1.35520e+04 6.02800e+03 +905 1.35520e+04 6.77600e+03 +906 1.19200e+04 6.99600e+03 +907 1.19200e+04 9.28400e+03 +908 1.19520e+04 5.72000e+02 +909 1.19520e+04 3.93800e+03 +910 1.19520e+04 5.25800e+03 +911 1.03200e+04 5.72000e+02 +912 1.04480e+04 1.14400e+04 +913 1.18240e+04 5.72000e+02 +914 1.18240e+04 3.93800e+03 +915 1.18240e+04 5.25800e+03 +916 1.26560e+04 5.36800e+03 +917 5.00800e+03 1.06920e+04 +918 5.00800e+03 1.11320e+04 +919 1.31680e+04 1.98000e+03 +920 1.31680e+04 2.64000e+03 +921 1.31680e+04 3.60800e+03 +922 1.31680e+04 4.37800e+03 +923 1.31680e+04 5.47800e+03 +924 1.32320e+04 6.02800e+03 +925 1.33760e+04 6.02800e+03 +926 1.34880e+04 6.02800e+03 +927 1.40320e+04 6.02800e+03 +928 1.41440e+04 6.02800e+03 +929 1.42240e+04 6.02800e+03 +930 1.43200e+04 6.02800e+03 +931 1.44640e+04 6.02800e+03 +932 1.49760e+04 6.02800e+03 +933 1.67040e+04 6.02800e+03 +934 3.28000e+03 1.09120e+04 +935 3.28000e+03 1.14400e+04 +936 6.73600e+03 3.08000e+02 +937 6.73600e+03 2.06800e+03 +938 6.73600e+03 3.60800e+03 +939 6.73600e+03 4.77400e+03 +940 6.73600e+03 5.69800e+03 +941 6.73600e+03 6.33600e+03 +942 8.78400e+03 1.14400e+04 +943 1.02880e+04 1.14400e+04 +944 1.05120e+04 1.14400e+04 +945 1.17920e+04 6.99600e+03 +946 8.72000e+03 4.15800e+03 +947 6.80000e+03 5.80800e+03 +948 6.80000e+03 6.33600e+03 +949 6.91200e+03 6.55600e+03 +950 7.85600e+03 6.55600e+03 +951 8.89600e+03 6.55600e+03 +952 8.94400e+03 2.28800e+03 +953 8.94400e+03 3.60800e+03 +954 7.56800e+03 9.50400e+03 +955 7.85600e+03 9.50400e+03 +956 8.78400e+03 9.50400e+03 +957 1.41440e+04 8.22800e+03 +958 1.42240e+04 8.22800e+03 +959 1.43360e+04 8.22800e+03 +960 1.44160e+04 8.22800e+03 +961 1.44800e+04 8.22800e+03 +962 1.54400e+04 8.22800e+03 +963 1.55040e+04 8.22800e+03 +964 1.55360e+04 3.60800e+03 +965 1.55360e+04 4.18000e+03 +966 1.55360e+04 7.34800e+03 +967 1.55680e+04 5.72000e+02 +968 1.57600e+04 5.72000e+02 +969 1.58400e+04 5.72000e+02 +970 1.60480e+04 5.72000e+02 +971 1.62080e+04 5.72000e+02 +972 1.67040e+04 5.72000e+02 +973 1.71040e+04 5.72000e+02 +974 1.72960e+04 5.72000e+02 +975 1.80000e+04 5.72000e+02 +976 1.80800e+04 5.72000e+02 +977 1.17280e+04 5.72000e+02 +978 1.17280e+04 3.93800e+03 +979 1.17280e+04 5.25800e+03 +980 1.17280e+04 6.99600e+03 +981 1.17600e+04 9.28400e+03 +982 1.22720e+04 3.93800e+03 +983 1.22720e+04 5.25800e+03 +984 1.05120e+04 9.28400e+03 +985 7.85600e+03 4.04800e+03 +986 7.92000e+03 4.04800e+03 +987 8.78400e+03 2.28800e+03 +988 8.78400e+03 3.60800e+03 +989 8.78400e+03 4.26800e+03 +990 7.92000e+03 2.06800e+03 +991 7.92000e+03 2.50800e+03 +992 7.92000e+03 3.60800e+03 +993 7.92000e+03 4.48800e+03 +994 8.88000e+03 4.26800e+03 +995 1.05440e+04 5.72000e+02 +996 1.05440e+04 6.99600e+03 +997 1.06080e+04 4.48800e+03 +998 9.00800e+03 2.28800e+03 +999 9.31200e+03 2.28800e+03 +1000 1.14400e+04 5.72000e+02 +1001 1.14400e+04 5.25800e+03 +1002 1.14400e+04 6.99600e+03 +1003 1.15360e+04 6.99600e+03 +1004 1.58240e+04 7.34800e+03 +1005 1.58240e+04 7.78800e+03 +1006 1.58240e+04 9.06400e+03 +1007 1.58240e+04 9.50400e+03 +1008 1.58240e+04 1.02520e+04 +1009 6.60800e+03 2.06800e+03 +1010 6.60800e+03 3.60800e+03 +1011 6.60800e+03 4.66400e+03 +1012 6.89600e+03 5.80800e+03 +1013 1.12000e+02 1.11980e+04 +1014 1.06720e+04 4.48800e+03 +1015 1.08320e+04 4.48800e+03 +1016 1.08640e+04 5.72000e+02 +1017 1.08640e+04 5.03800e+03 +1018 1.10880e+04 6.99600e+03 +1019 9.52000e+03 5.72000e+02 +1020 9.52000e+03 2.06800e+03 +1021 1.22400e+04 6.99600e+03 +1022 3.28000e+03 8.71200e+03 +1023 3.28000e+03 9.15200e+03 +1024 3.63200e+03 1.04720e+04 +1025 3.63200e+03 1.09120e+04 +1026 3.63200e+03 1.14400e+04 +1027 1.15680e+04 9.28400e+03 +1028 1.41280e+04 1.04720e+04 +1029 1.41600e+04 1.34200e+03 +1030 1.41600e+04 3.60800e+03 +1031 1.41600e+04 4.04800e+03 +1032 1.41600e+04 6.77600e+03 +1033 1.41600e+04 7.67800e+03 +1034 1.41600e+04 9.50400e+03 +1035 4.08000e+03 1.04720e+04 +1036 4.33600e+03 1.04720e+04 +1037 4.57600e+03 1.04720e+04 +1038 4.97600e+03 1.00320e+04 +1039 5.28000e+02 7.37000e+03 +1040 1.60160e+04 1.45200e+03 +1041 1.60160e+04 7.34800e+03 +1042 1.60160e+04 9.06400e+03 +1043 1.60160e+04 9.50400e+03 +1044 1.61600e+04 9.92200e+03 +1045 1.64640e+04 9.92200e+03 +1046 1.66400e+04 9.92200e+03 +1047 1.67200e+04 9.92200e+03 +1048 1.70880e+04 9.92200e+03 +1049 1.74400e+03 1.09120e+04 +1050 2.11200e+03 1.09120e+04 +1051 2.36800e+03 1.09120e+04 +1052 2.54400e+03 1.09120e+04 +1053 2.94400e+03 1.09120e+04 +1054 3.05600e+03 8.71200e+03 +1055 3.05600e+03 9.15200e+03 +1056 3.08800e+03 1.09120e+04 +1057 4.08000e+03 1.09120e+04 +1058 4.33600e+03 1.09120e+04 +1059 4.43200e+03 1.09120e+04 +1060 1.34560e+04 9.50400e+03 +1061 1.42240e+04 7.78800e+03 +1062 1.43360e+04 7.78800e+03 +1063 1.44160e+04 7.78800e+03 +1064 1.44480e+04 1.34200e+03 +1065 1.44480e+04 3.60800e+03 +1066 1.44480e+04 4.04800e+03 +1067 1.28000e+03 8.40400e+03 +1068 1.74400e+03 8.40400e+03 +1069 1.90400e+03 8.40400e+03 +1070 2.16000e+03 8.40400e+03 +1071 2.22400e+03 8.40400e+03 +1072 2.36800e+03 8.40400e+03 +1073 2.54400e+03 8.40400e+03 +1074 2.70400e+03 7.54600e+03 +1075 1.40320e+04 1.34200e+03 +1076 1.40320e+04 3.60800e+03 +1077 1.40320e+04 6.77600e+03 +1078 1.49760e+04 7.56800e+03 +1079 1.43200e+04 4.04800e+03 +1080 1.47680e+04 4.04800e+03 +1081 1.33920e+04 1.98000e+03 +1082 1.33920e+04 3.60800e+03 +1083 1.33920e+04 4.37800e+03 +1084 1.33920e+04 5.36800e+03 +1085 1.66880e+04 1.45200e+03 +1086 1.33600e+04 6.77600e+03 +1087 1.62080e+04 1.45200e+03 +1088 1.62080e+04 7.34800e+03 +1089 1.50400e+03 6.33600e+03 +1090 2.06400e+03 6.33600e+03 +1091 2.16000e+03 6.33600e+03 +1092 2.22400e+03 6.33600e+03 +1093 2.38400e+03 6.33600e+03 +1094 2.54400e+03 6.33600e+03 +1095 4.56000e+03 7.37000e+03 +1096 4.30400e+03 7.26000e+03 +1097 4.38400e+03 7.26000e+03 +1098 4.46400e+03 7.26000e+03 +1099 4.81600e+03 7.26000e+03 +1100 4.88000e+03 7.26000e+03 +1101 1.43520e+04 1.34200e+03 +1102 1.43520e+04 3.60800e+03 +1103 1.43520e+04 9.50400e+03 +1104 1.43520e+04 1.02520e+04 +1105 5.74400e+03 8.84400e+03 +1106 4.33600e+03 1.14400e+04 +1107 6.16000e+03 3.60800e+03 +1108 6.16000e+03 4.66400e+03 +1109 6.16000e+03 1.11320e+04 +1110 6.51200e+03 3.60800e+03 +1111 6.51200e+03 4.66400e+03 +1112 6.92800e+03 2.06800e+03 +1113 6.92800e+03 3.60800e+03 +1114 6.92800e+03 4.66400e+03 +1115 1.12800e+04 6.99600e+03 +1116 1.25920e+04 6.99600e+03 +1117 1.34880e+04 3.60800e+03 +1118 1.47680e+04 3.60800e+03 +1119 1.49600e+04 3.60800e+03 +1120 1.57600e+04 3.60800e+03 +1121 1.58400e+04 3.60800e+03 +1122 1.59200e+04 7.34800e+03 +1123 1.23680e+04 5.72000e+02 +1124 1.23680e+04 1.23200e+03 +1125 1.23680e+04 3.93800e+03 +1126 1.23680e+04 5.25800e+03 +1127 1.16640e+04 6.99600e+03 +1128 1.77760e+04 2.68400e+03 +1129 1.24640e+04 3.93800e+03 +1130 1.34880e+04 4.26800e+03 +1131 1.32320e+04 6.66600e+03 +1132 1.01920e+04 5.72000e+02 +1133 9.44000e+02 7.37000e+03 +1134 1.08480e+04 9.28400e+03 +1135 1.70880e+04 9.28400e+03 +1136 1.73440e+04 9.28400e+03 +1137 4.59200e+03 4.84000e+03 +1138 4.59200e+03 6.02800e+03 +1139 1.10240e+04 5.72000e+02 +1140 1.10240e+04 5.03800e+03 +1141 2.38400e+03 7.43600e+03 +1142 2.38400e+03 9.15200e+03 +1143 2.38400e+03 1.14400e+04 +1144 2.92800e+03 8.71200e+03 +1145 2.92800e+03 9.15200e+03 +1146 2.92800e+03 1.14400e+04 +1147 2.54400e+03 7.54600e+03 +1148 2.54400e+03 9.15200e+03 +1149 2.54400e+03 1.14400e+04 +1150 9.64800e+03 7.48000e+03 +1151 2.04800e+03 7.17200e+03 +1152 2.16000e+03 7.17200e+03 +1153 2.22400e+03 7.17200e+03 +1154 3.44000e+03 7.17200e+03 +1155 1.74400e+03 9.04200e+03 +1156 1.74400e+03 1.14400e+04 +1157 2.09600e+03 9.15200e+03 +1158 2.09600e+03 1.14400e+04 +1159 3.05600e+03 1.14400e+04 +1160 1.09600e+04 6.99600e+03 +1161 2.99200e+03 8.71200e+03 +1162 2.99200e+03 9.15200e+03 +1163 1.08960e+04 6.99600e+03 +1164 4.08000e+03 1.14400e+04 +1165 1.61440e+04 9.06400e+03 +1166 1.61440e+04 9.50400e+03 +1167 1.42240e+04 6.77600e+03 +1168 1.42240e+04 9.50400e+03 +1169 1.42240e+04 1.02520e+04 +1170 1.71040e+04 8.62400e+03 +1171 1.71360e+04 7.34800e+03 +1172 1.54400e+04 9.06400e+03 +1173 1.54400e+04 9.50400e+03 +1174 1.54400e+04 1.02520e+04 +1175 1.57600e+04 7.78800e+03 +1176 1.58560e+04 1.45200e+03 +1177 4.20800e+03 4.84000e+03 +1178 1.83200e+04 7.34800e+03 +1179 1.57600e+04 4.18000e+03 +1180 9.71200e+03 7.48000e+03 +1181 1.70720e+04 1.45200e+03 +1182 1.70720e+04 7.34800e+03 +1183 1.64640e+04 9.50400e+03 +1184 7.85600e+03 2.06800e+03 +1185 7.85600e+03 2.50800e+03 +1186 7.85600e+03 3.60800e+03 +1187 7.85600e+03 4.48800e+03 +1188 1.67200e+04 7.34800e+03 +1189 1.55040e+04 9.06400e+03 +1190 4.36800e+03 4.84000e+03 +1191 6.00000e+03 1.11320e+04 +1192 6.06400e+03 1.11320e+04 +1193 4.68800e+03 5.80800e+03 +1194 4.81600e+03 5.80800e+03 +1195 4.88000e+03 5.80800e+03 +1196 9.00800e+03 3.60800e+03 +1197 1.57600e+04 9.06400e+03 +1198 1.74240e+04 9.06400e+03 +1199 1.85120e+04 8.29400e+03 +1200 4.88000e+03 4.66400e+03 +1201 4.88000e+03 5.36800e+03 +1202 4.88000e+03 6.77600e+03 +1203 4.68800e+03 4.48800e+03 +1204 4.75200e+03 4.48800e+03 +1205 4.81600e+03 4.48800e+03 +1206 1.86080e+04 8.86600e+03 +1207 1.44160e+04 9.50400e+03 +1208 1.44160e+04 1.02520e+04 +1209 1.57600e+04 7.34800e+03 +1210 1.82240e+04 7.34800e+03 +1211 1.34240e+04 6.77600e+03 +1212 1.87040e+04 8.86600e+03 +1213 1.10880e+04 4.92800e+03 +1214 1.11680e+04 4.92800e+03 +1215 1.24640e+04 5.36800e+03 +1216 1.57600e+04 1.45200e+03 +1217 1.57600e+04 9.50400e+03 +1218 1.57600e+04 1.02520e+04 +1219 4.32000e+02 7.48000e+03 +1220 1.11680e+04 6.99600e+03 +1221 1.34880e+04 6.77600e+03 +1222 1.35840e+04 9.50400e+03 +1223 1.34880e+04 5.36800e+03 +1224 1.11840e+04 5.72000e+02 +1225 4.46400e+03 4.84000e+03 +1226 4.52800e+03 4.84000e+03 +1227 4.81600e+03 5.36800e+03 +1228 4.81600e+03 6.77600e+03 +1229 1.10880e+04 5.72000e+02 +1230 1.06720e+04 5.72000e+02 +1231 1.02560e+04 5.72000e+02 +1232 9.84000e+03 5.72000e+02 +1233 1.81920e+04 1.06700e+04 +1234 1.83790e+04 8.62400e+03 +1235 1.84160e+04 3.61900e+03 +1236 1.84160e+04 7.76600e+03 +1237 1.20000e+03 3.57500e+03 +1238 1.20000e+03 9.65800e+03 +1239 1.79040e+04 2.31000e+02 +1240 1.79040e+04 1.62800e+03 +1241 1.79040e+04 4.79600e+03 +1242 1.79040e+04 7.76600e+03 +1243 1.79040e+04 9.43800e+03 +1244 1.79400e+04 9.57000e+03 +1245 1.82240e+04 1.06700e+04 +1246 8.27200e+03 1.18800e+03 +1247 8.27200e+03 7.02900e+03 +1248 8.41600e+03 7.26000e+03 +1249 8.49600e+03 8.86600e+03 +1250 1.58880e+04 8.50300e+03 +1251 1.58880e+04 9.87800e+03 +1252 1.58880e+04 1.06260e+04 +1253 1.58880e+04 1.14290e+04 +1254 1.59840e+04 8.18400e+03 +1255 1.61280e+04 8.18400e+03 +1256 1.62990e+04 8.18400e+03 +1257 1.63360e+04 2.22200e+03 +1258 1.63360e+04 3.85000e+03 +1259 1.63360e+04 5.36800e+03 +1260 1.63360e+04 6.79800e+03 +1261 1.63360e+04 7.88700e+03 +1262 1.04000e+03 3.57500e+03 +1263 1.04000e+03 9.65800e+03 +1264 4.43200e+03 2.20000e+02 +1265 4.49600e+03 3.08000e+02 +1266 4.78400e+03 3.08000e+02 +1267 4.84800e+03 3.08000e+02 +1268 5.04000e+03 3.08000e+02 +1269 5.29600e+03 3.08000e+02 +1270 5.58400e+03 3.08000e+02 +1271 5.64800e+03 3.08000e+02 +1272 5.80800e+03 2.20000e+02 +1273 5.80800e+03 2.02400e+03 +1274 5.80800e+03 4.04800e+03 +1275 5.93600e+03 8.38200e+03 +1276 5.93600e+03 1.08020e+04 +1277 1.68480e+04 1.01200e+03 +1278 1.68480e+04 2.22200e+03 +1279 1.68480e+04 3.85000e+03 +1280 1.68480e+04 5.36800e+03 +1281 1.68480e+04 6.68800e+03 +1282 1.68480e+04 7.87600e+03 +1283 1.68480e+04 1.05600e+04 +1284 1.68480e+04 1.15280e+04 +1285 8.24000e+03 1.18800e+03 +1286 8.24000e+03 7.01800e+03 +1287 8.26000e+03 7.70000e+03 +1288 8.40000e+03 8.75600e+03 +1289 1.52000e+03 1.00320e+04 +1290 1.55200e+03 8.93200e+03 +1291 1.58400e+03 3.11300e+03 +1292 1.58400e+03 7.01800e+03 +1293 1.58400e+03 8.78900e+03 +1294 5.13600e+03 1.15280e+04 +1295 5.20000e+03 1.14400e+04 +1296 5.36000e+03 1.14400e+04 +1297 5.55200e+03 1.15280e+04 +1298 5.61600e+03 1.14400e+04 +1299 5.80800e+03 1.14400e+04 +1300 5.96800e+03 1.15280e+04 +1301 2.67200e+03 3.11300e+03 +1302 2.73600e+03 6.55600e+03 +1303 2.88000e+03 6.55600e+03 +1304 3.02400e+03 6.55600e+03 +1305 3.20000e+03 6.55600e+03 +1306 3.31200e+03 6.55600e+03 +1307 3.40800e+03 6.55600e+03 +1308 3.80800e+03 6.55600e+03 +1309 3.88800e+03 6.55600e+03 +1310 3.95200e+03 6.55600e+03 +1311 4.09600e+03 6.55600e+03 +1312 4.17600e+03 6.55600e+03 +1313 4.25600e+03 6.55600e+03 +1314 4.43200e+03 6.55600e+03 +1315 4.49600e+03 6.55600e+03 +1316 4.64000e+03 6.55600e+03 +1317 4.72000e+03 7.59000e+03 +1318 4.72000e+03 8.86600e+03 +1319 4.72000e+03 1.14950e+04 +1320 1.70080e+04 1.01200e+03 +1321 1.70080e+04 2.22200e+03 +1322 1.70080e+04 4.35600e+03 +1323 1.70080e+04 6.68800e+03 +1324 1.70080e+04 7.84300e+03 +1325 1.70280e+04 8.09600e+03 +1326 1.71040e+04 8.09600e+03 +1327 1.71680e+04 8.09600e+03 +1328 1.74080e+04 8.09600e+03 +1329 1.74990e+04 8.09600e+03 +1330 1.75200e+04 9.60300e+03 +1331 1.75200e+04 1.06700e+04 +1332 8.80000e+02 3.57500e+03 +1333 8.80000e+02 9.92200e+03 +1334 4.14400e+03 2.36500e+03 +1335 4.14400e+03 5.43400e+03 +1336 4.14400e+03 6.90800e+03 +1337 4.27200e+03 8.36000e+03 +1338 4.33600e+03 8.36000e+03 +1339 4.51200e+03 8.36000e+03 +1340 4.62400e+03 8.36000e+03 +1341 4.68800e+03 8.36000e+03 +1342 4.78400e+03 8.36000e+03 +1343 4.94400e+03 8.36000e+03 +1344 5.13600e+03 8.36000e+03 +1345 5.48800e+03 7.30400e+03 +1346 5.45600e+03 8.48100e+03 +1347 5.45600e+03 1.06920e+04 +1348 5.52000e+03 2.17800e+03 +1349 5.52000e+03 4.04800e+03 +1350 5.52000e+03 6.40200e+03 +1351 1.65600e+04 1.08900e+04 +1352 1.65760e+04 8.18400e+03 +1353 1.65920e+04 1.01200e+03 +1354 1.65920e+04 2.22200e+03 +1355 1.65920e+04 3.85000e+03 +1356 1.65920e+04 5.47800e+03 +1357 1.65920e+04 6.79800e+03 +1358 1.65920e+04 7.88700e+03 +1359 7.72800e+03 8.75600e+03 +1360 7.74800e+03 7.04000e+03 +1361 7.82400e+03 7.04000e+03 +1362 7.88800e+03 7.04000e+03 +1363 8.01600e+03 1.18800e+03 +1364 8.01600e+03 4.81800e+03 +1365 8.01600e+03 6.91900e+03 +1366 1.62720e+04 1.04610e+04 +1367 1.62720e+04 1.14290e+04 +1368 1.64320e+04 8.84400e+03 +1369 1.65920e+04 8.84400e+03 +1370 1.66880e+04 8.84400e+03 +1371 1.67630e+04 8.84400e+03 +1372 1.67840e+04 1.01200e+03 +1373 1.67840e+04 2.22200e+03 +1374 1.67840e+04 3.85000e+03 +1375 1.67840e+04 5.47800e+03 +1376 1.67840e+04 6.68800e+03 +1377 1.67840e+04 7.87600e+03 +1378 4.64000e+02 9.69100e+03 +1379 4.84000e+02 8.18400e+03 +1380 5.60000e+02 8.18400e+03 +1381 7.47000e+02 8.18400e+03 +1382 7.84000e+02 3.57500e+03 +1383 7.66400e+03 6.90800e+03 +1384 7.66400e+03 8.75600e+03 +1385 7.72800e+03 1.18800e+03 +1386 7.72800e+03 4.81800e+03 +1387 5.23200e+03 2.17800e+03 +1388 5.23200e+03 4.04800e+03 +1389 5.23200e+03 6.40200e+03 +1390 5.23200e+03 7.31500e+03 +1391 5.49900e+03 7.61200e+03 +1392 5.52000e+03 8.38200e+03 +1393 5.52000e+03 1.06920e+04 +1394 3.85600e+03 2.95900e+03 +1395 3.85600e+03 6.90800e+03 +1396 3.87600e+03 7.92000e+03 +1397 3.95200e+03 7.92000e+03 +1398 4.09600e+03 7.92000e+03 +1399 4.78400e+03 7.48000e+02 +1400 4.84800e+03 7.48000e+02 +1401 5.04000e+03 7.48000e+02 +1402 5.29600e+03 7.48000e+02 +1403 5.58400e+03 7.48000e+02 +1404 5.64800e+03 7.48000e+02 +1405 5.87200e+03 7.48000e+02 +1406 6.09600e+03 2.64000e+02 +1407 6.09600e+03 2.02400e+03 +1408 6.09600e+03 4.04800e+03 +1409 6.09600e+03 5.22500e+03 +1410 6.11600e+03 5.36800e+03 +1411 6.19200e+03 5.36800e+03 +1412 6.25600e+03 5.36800e+03 +1413 6.41600e+03 5.36800e+03 +1414 6.57100e+03 5.36800e+03 +1415 6.09600e+03 5.94000e+02 +1416 6.60800e+03 8.64600e+03 +1417 6.60800e+03 9.43800e+03 +1418 6.60800e+03 1.14950e+04 +1419 1.72000e+04 5.33500e+03 +1420 1.72000e+04 6.68800e+03 +1421 1.72000e+04 7.72200e+03 +1422 1.72000e+04 1.05600e+04 +1423 1.72000e+04 1.15280e+04 +1424 1.73920e+04 5.19200e+03 +1425 1.75040e+04 5.19200e+03 +1426 1.76160e+04 2.31000e+02 +1427 1.76160e+04 1.78200e+03 +1428 1.76160e+04 4.21300e+03 +1429 7.24800e+03 1.08020e+04 +1430 7.37600e+03 6.38000e+02 +1431 7.37600e+03 1.51800e+03 +1432 7.37600e+03 4.04800e+03 +1433 7.37600e+03 4.92800e+03 +1434 7.37600e+03 8.75600e+03 +1435 1.80800e+03 3.11300e+03 +1436 1.82400e+03 6.86400e+03 +1437 1.84000e+03 8.05200e+03 +1438 1.84000e+03 1.00320e+04 +1439 1.22720e+04 1.11650e+04 +1440 1.23840e+04 9.06400e+03 +1441 1.25280e+04 9.06400e+03 +1442 1.26560e+04 9.06400e+03 +1443 1.28270e+04 9.06400e+03 +1444 1.28480e+04 1.60600e+03 +1445 1.28480e+04 2.31000e+03 +1446 1.28480e+04 4.70800e+03 +1447 1.28480e+04 6.07200e+03 +1448 1.28480e+04 7.39200e+03 +1449 1.28480e+04 8.53600e+03 +1450 1.64800e+03 8.77800e+03 +1451 1.64800e+03 1.00320e+04 +1452 1.66400e+03 8.18400e+03 +1453 1.68000e+03 3.11300e+03 +1454 1.68000e+03 7.01800e+03 +1455 1.68000e+03 8.06300e+03 +1456 4.78400e+03 5.28000e+02 +1457 4.84800e+03 5.28000e+02 +1458 5.04000e+03 5.28000e+02 +1459 5.29600e+03 5.28000e+02 +1460 5.58400e+03 5.28000e+02 +1461 5.64800e+03 5.28000e+02 +1462 5.87200e+03 5.28000e+02 +1463 5.93600e+03 3.30000e+02 +1464 5.93600e+03 2.02400e+03 +1465 5.93600e+03 4.04800e+03 +1466 5.93600e+03 5.32400e+03 +1467 6.09600e+03 6.55600e+03 +1468 6.19200e+03 6.55600e+03 +1469 6.25600e+03 8.38200e+03 +1470 6.25600e+03 1.14950e+04 +1471 1.69760e+04 6.68800e+03 +1472 1.69760e+04 7.87600e+03 +1473 1.69760e+04 1.05600e+04 +1474 1.69760e+04 1.15280e+04 +1475 1.70400e+04 5.72000e+03 +1476 1.71040e+04 5.72000e+03 +1477 1.71680e+04 5.72000e+03 +1478 1.73920e+04 5.72000e+03 +1479 1.75040e+04 5.72000e+03 +1480 1.76800e+04 2.31000e+02 +1481 1.76800e+04 1.78200e+03 +1482 1.76800e+04 4.24600e+03 +1483 1.16000e+04 2.31000e+02 +1484 1.16000e+04 9.02000e+02 +1485 1.16000e+04 4.48800e+03 +1486 1.16000e+04 6.07200e+03 +1487 1.16000e+04 7.39200e+03 +1488 1.16160e+04 8.22800e+03 +1489 1.16320e+04 1.12750e+04 +1490 1.72640e+04 1.05490e+04 +1491 1.72640e+04 1.15280e+04 +1492 1.72840e+04 1.01420e+04 +1493 1.74720e+04 1.01420e+04 +1494 1.75520e+04 1.01420e+04 +1495 1.79200e+04 1.01420e+04 +1496 1.83680e+04 1.01420e+04 +1497 1.85120e+04 1.01420e+04 +1498 1.86560e+04 1.01420e+04 +1499 1.87840e+04 1.01420e+04 +1500 1.89280e+04 1.01420e+04 +1501 1.90240e+04 1.01420e+04 +1502 6.22400e+03 4.29000e+02 +1503 6.22400e+03 2.02400e+03 +1504 6.22400e+03 4.04800e+03 +1505 6.22400e+03 8.38200e+03 +1506 6.22400e+03 1.08130e+04 +1507 6.35200e+03 1.09120e+04 +1508 6.46400e+03 1.09120e+04 +1509 6.67200e+03 1.09120e+04 +1510 6.84300e+03 1.09120e+04 +1511 1.93600e+03 3.11300e+03 +1512 1.93600e+03 6.75400e+03 +1513 1.93600e+03 8.06300e+03 +1514 1.95200e+03 8.18400e+03 +1515 1.96800e+03 8.77800e+03 +1516 1.96800e+03 1.00320e+04 +1517 8.16000e+02 3.57500e+03 +1518 8.16000e+02 9.92200e+03 +1519 3.98400e+03 2.95900e+03 +1520 3.98400e+03 6.90800e+03 +1521 4.12800e+03 8.93200e+03 +1522 4.27200e+03 8.93200e+03 +1523 4.33600e+03 8.93200e+03 +1524 4.49600e+03 9.03100e+03 +1525 4.49600e+03 1.14950e+04 +1526 1.54400e+04 5.83000e+02 +1527 1.54400e+04 2.53000e+03 +1528 1.54400e+04 5.48900e+03 +1529 1.54600e+04 5.80800e+03 +1530 1.56000e+04 5.80800e+03 +1531 1.57120e+04 5.80800e+03 +1532 1.57920e+04 5.80800e+03 +1533 1.58880e+04 5.80800e+03 +1534 1.59840e+04 5.80800e+03 +1535 1.61280e+04 5.80800e+03 +1536 1.62880e+04 5.80800e+03 +1537 1.64000e+04 6.79800e+03 +1538 1.64000e+04 7.87600e+03 +1539 1.64000e+04 1.04610e+04 +1540 1.64000e+04 1.14290e+04 +1541 5.36000e+03 2.17800e+03 +1542 5.36000e+03 4.04800e+03 +1543 5.36000e+03 7.19400e+03 +1544 5.55200e+03 1.02520e+04 +1545 5.63200e+03 1.02520e+04 +1546 5.80800e+03 1.02520e+04 +1547 5.96800e+03 1.02520e+04 +1548 6.03200e+03 1.02520e+04 +1549 6.11200e+03 1.02520e+04 +1550 6.19200e+03 1.02520e+04 +1551 6.30400e+03 8.53600e+03 +1552 6.28800e+03 1.14950e+04 +1553 6.32000e+03 4.29000e+02 +1554 6.32000e+03 2.02400e+03 +1555 6.32000e+03 4.04800e+03 +1556 1.16800e+03 9.65800e+03 +1557 1.23200e+03 3.57500e+03 +1558 1.23200e+03 7.84300e+03 +1559 6.35200e+03 4.29000e+02 +1560 6.35200e+03 2.02400e+03 +1561 6.35200e+03 4.04800e+03 +1562 6.35200e+03 8.65700e+03 +1563 6.36800e+03 8.84400e+03 +1564 6.38400e+03 1.14950e+04 +1565 1.66880e+04 1.14070e+04 +1566 1.67840e+04 1.11980e+04 +1567 1.69120e+04 1.11980e+04 +1568 1.70400e+04 1.11980e+04 +1569 1.71360e+04 1.11980e+04 +1570 1.72960e+04 1.11980e+04 +1571 1.74720e+04 1.11980e+04 +1572 1.75520e+04 1.11980e+04 +1573 1.79200e+04 1.11980e+04 +1574 1.83680e+04 1.11980e+04 +1575 1.85120e+04 1.11980e+04 +1576 1.86560e+04 1.11980e+04 +1577 1.87680e+04 1.11980e+04 +1578 1.89280e+04 1.11980e+04 +1579 1.52800e+04 2.53000e+03 +1580 1.52800e+04 5.47800e+03 +1581 1.52800e+04 6.79800e+03 +1582 1.52800e+04 7.78800e+03 +1583 1.52800e+04 8.64600e+03 +1584 1.52800e+04 9.87800e+03 +1585 1.52800e+04 1.06260e+04 +1586 1.52800e+04 1.14290e+04 +1587 3.47200e+03 1.00320e+04 +1588 3.48800e+03 7.48000e+03 +1589 3.50400e+03 3.11300e+03 +1590 3.50400e+03 7.13900e+03 +1591 2.08000e+02 9.58100e+03 +1592 3.08000e+02 7.96400e+03 +1593 4.80000e+02 7.96400e+03 +1594 5.60000e+02 7.96400e+03 +1595 7.36000e+02 7.96400e+03 +1596 8.48000e+02 7.96400e+03 +1597 9.12000e+02 7.96400e+03 +1598 9.76000e+02 7.96400e+03 +1599 1.08300e+03 7.96400e+03 +1600 1.10400e+03 3.57500e+03 +1601 1.10400e+03 7.84300e+03 +1602 1.39200e+03 2.90400e+03 +1603 1.39200e+03 5.85200e+03 +1604 1.40800e+03 6.02800e+03 +1605 1.42400e+03 8.77800e+03 +1606 1.42400e+03 1.00320e+04 +1607 1.02240e+04 3.60800e+03 +1608 1.02880e+04 3.60800e+03 +1609 1.03840e+04 3.60800e+03 +1610 1.05120e+04 3.60800e+03 +1611 1.05760e+04 3.60800e+03 +1612 1.06400e+04 3.60800e+03 +1613 1.07040e+04 3.60800e+03 +1614 1.08000e+04 3.60800e+03 +1615 1.09280e+04 3.60800e+03 +1616 1.10560e+04 3.60800e+03 +1617 1.11200e+04 3.60800e+03 +1618 1.12160e+04 3.60800e+03 +1619 1.13440e+04 3.60800e+03 +1620 1.14880e+04 3.60800e+03 +1621 1.16640e+04 9.02000e+02 +1622 6.88000e+02 3.57500e+03 +1623 6.88000e+02 9.92200e+03 +1624 5.87200e+03 9.68000e+02 +1625 6.12800e+03 9.68000e+02 +1626 6.19200e+03 9.68000e+02 +1627 6.25600e+03 9.68000e+02 +1628 6.41600e+03 9.68000e+02 +1629 6.54400e+03 9.68000e+02 +1630 6.67200e+03 9.68000e+02 +1631 6.78400e+03 9.68000e+02 +1632 6.89600e+03 9.68000e+02 +1633 7.00800e+03 9.68000e+02 +1634 7.18400e+03 9.68000e+02 +1635 7.31200e+03 9.68000e+02 +1636 7.50400e+03 9.68000e+02 +1637 7.60000e+03 7.59000e+02 +1638 7.60000e+03 1.39700e+03 +1639 7.60000e+03 4.93900e+03 +1640 7.66400e+03 5.14800e+03 +1641 7.76000e+03 5.14800e+03 +1642 7.82400e+03 5.14800e+03 +1643 7.88800e+03 5.14800e+03 +1644 7.95200e+03 5.14800e+03 +1645 8.04800e+03 5.14800e+03 +1646 8.17600e+03 5.14800e+03 +1647 8.33600e+03 5.14800e+03 +1648 8.43200e+03 5.14800e+03 +1649 8.49600e+03 5.14800e+03 +1650 8.75200e+03 5.14800e+03 +1651 8.84800e+03 5.14800e+03 +1652 8.99200e+03 5.14800e+03 +1653 9.44000e+03 5.14800e+03 +1654 9.55200e+03 5.14800e+03 +1655 9.68000e+03 5.14800e+03 +1656 9.82400e+03 5.14800e+03 +1657 1.00110e+04 5.14800e+03 +1658 1.00320e+04 2.31000e+02 +1659 1.00320e+04 1.01200e+03 +1660 1.00320e+04 1.76000e+03 +1661 5.48800e+03 2.17800e+03 +1662 5.48800e+03 4.04800e+03 +1663 5.48800e+03 6.40200e+03 +1664 5.64800e+03 7.08400e+03 +1665 5.93600e+03 7.08400e+03 +1666 6.09600e+03 7.08400e+03 +1667 6.19200e+03 7.08400e+03 +1668 6.41600e+03 7.08400e+03 +1669 6.54400e+03 7.08400e+03 +1670 6.67200e+03 7.08400e+03 +1671 6.76800e+03 7.16100e+03 +1672 6.76800e+03 8.64600e+03 +1673 6.76800e+03 9.43800e+03 +1674 9.93600e+03 2.31000e+02 +1675 9.93600e+03 1.01200e+03 +1676 9.93600e+03 1.76000e+03 +1677 5.20000e+03 2.17800e+03 +1678 5.20000e+03 4.04800e+03 +1679 5.20000e+03 6.40200e+03 +1680 5.20000e+03 7.45800e+03 +1681 5.20000e+03 1.05930e+04 +1682 7.40800e+03 6.38000e+02 +1683 7.40800e+03 1.51800e+03 +1684 7.40800e+03 4.04800e+03 +1685 7.40800e+03 4.92800e+03 +1686 7.40800e+03 8.75600e+03 +1687 7.53600e+03 1.06920e+04 +1688 7.60000e+03 1.06920e+04 +1689 7.69600e+03 1.06920e+04 +1690 7.82400e+03 1.06920e+04 +1691 7.88800e+03 1.06920e+04 +1692 7.98400e+03 1.06920e+04 +1693 8.09600e+03 1.06920e+04 +1694 8.17600e+03 1.06920e+04 +1695 8.27200e+03 1.06920e+04 +1696 8.36800e+03 1.06920e+04 +1697 8.43200e+03 1.06920e+04 +1698 8.72000e+03 1.06920e+04 +1699 8.84800e+03 1.06920e+04 +1700 9.10400e+03 1.06920e+04 +1701 9.72800e+03 1.06920e+04 +1702 1.00320e+04 1.06920e+04 +1703 1.02560e+04 1.06920e+04 +1704 1.03200e+04 1.06920e+04 +1705 1.04800e+04 1.06920e+04 +1706 1.06560e+04 1.06920e+04 +1707 1.07680e+04 1.06920e+04 +1708 1.09280e+04 1.06920e+04 +1709 1.10240e+04 1.06920e+04 +1710 1.12160e+04 1.06920e+04 +1711 1.13280e+04 1.06920e+04 +1712 1.14400e+04 1.06920e+04 +1713 1.15200e+04 1.06920e+04 +1714 1.16000e+04 1.06920e+04 +1715 1.17070e+04 1.06920e+04 +1716 1.17280e+04 1.13300e+04 +1717 1.17280e+04 1.08680e+04 +1718 4.88000e+03 1.14950e+04 +1719 4.94400e+03 2.17800e+03 +1720 4.94400e+03 4.04800e+03 +1721 4.94400e+03 6.40200e+03 +1722 6.89600e+03 2.20000e+02 +1723 7.00800e+03 3.08000e+02 +1724 7.18400e+03 3.08000e+02 +1725 7.31200e+03 3.08000e+02 +1726 7.50400e+03 3.08000e+02 +1727 7.66400e+03 3.08000e+02 +1728 7.76000e+03 3.08000e+02 +1729 7.82400e+03 3.08000e+02 +1730 7.88800e+03 3.08000e+02 +1731 7.95200e+03 3.08000e+02 +1732 8.04800e+03 3.08000e+02 +1733 8.20800e+03 3.08000e+02 +1734 8.33600e+03 3.08000e+02 +1735 8.43200e+03 3.08000e+02 +1736 8.49600e+03 3.08000e+02 +1737 8.56000e+03 3.08000e+02 +1738 8.62400e+03 3.08000e+02 +1739 8.75200e+03 3.08000e+02 +1740 8.84800e+03 3.08000e+02 +1741 8.97600e+03 3.08000e+02 +1742 9.04000e+03 3.08000e+02 +1743 9.16800e+03 3.08000e+02 +1744 9.23200e+03 2.20000e+02 +1745 9.23200e+03 7.59000e+02 +1746 9.23200e+03 1.76000e+03 +1747 9.23200e+03 2.94800e+03 +1748 9.23200e+03 7.02900e+03 +1749 3.44000e+03 1.00320e+04 +1750 3.50400e+03 7.92000e+03 +1751 3.63200e+03 7.92000e+03 +1752 3.69600e+03 7.92000e+03 +1753 3.76000e+03 3.11300e+03 +1754 3.76000e+03 6.90800e+03 +1755 8.24000e+03 8.89900e+03 +1756 8.27200e+03 8.75600e+03 +1757 8.30400e+03 1.18800e+03 +1758 8.30400e+03 6.90800e+03 +1759 8.30400e+03 8.61300e+03 +1760 9.29600e+03 6.89700e+03 +1761 9.29600e+03 9.87800e+03 +1762 9.45600e+03 6.77600e+03 +1763 9.55200e+03 6.77600e+03 +1764 9.68000e+03 6.77600e+03 +1765 9.77600e+03 2.31000e+02 +1766 9.77600e+03 1.01200e+03 +1767 9.77600e+03 1.76000e+03 +1768 6.99200e+03 8.64600e+03 +1769 6.99200e+03 1.08020e+04 +1770 7.02400e+03 7.26000e+03 +1771 7.05600e+03 6.38000e+02 +1772 7.05600e+03 1.51800e+03 +1773 7.05600e+03 2.57400e+03 +1774 7.05600e+03 4.04800e+03 +1775 7.05600e+03 7.13900e+03 +1776 1.46400e+04 2.53000e+03 +1777 1.46400e+04 5.36800e+03 +1778 1.46400e+04 6.79800e+03 +1779 1.46400e+04 8.64600e+03 +1780 1.46400e+04 9.87800e+03 +1781 1.46400e+04 1.15390e+04 +1782 1.47360e+04 1.01200e+03 +1783 1.48000e+04 1.01200e+03 +1784 1.49120e+04 1.01200e+03 +1785 1.51200e+04 1.01200e+03 +1786 1.53280e+04 1.01200e+03 +1787 1.54080e+04 1.01200e+03 +1788 1.54720e+04 1.01200e+03 +1789 1.56000e+04 1.01200e+03 +1790 1.57280e+04 1.01200e+03 +1791 1.57920e+04 1.01200e+03 +1792 1.58880e+04 1.01200e+03 +1793 1.59840e+04 1.01200e+03 +1794 1.61280e+04 1.01200e+03 +1795 1.62720e+04 1.01200e+03 +1796 1.64000e+04 1.01200e+03 +1797 1.65280e+04 9.13000e+02 +1798 1.47040e+04 2.53000e+03 +1799 1.47200e+04 4.92800e+03 +1800 1.47360e+04 5.35700e+03 +1801 1.47360e+04 6.79800e+03 +1802 1.47360e+04 8.64600e+03 +1803 1.47360e+04 9.87800e+03 +1804 1.47360e+04 1.14290e+04 +1805 1.48160e+04 4.92800e+03 +1806 1.49280e+04 4.92800e+03 +1807 1.51360e+04 4.92800e+03 +1808 1.53280e+04 4.92800e+03 +1809 1.54080e+04 4.92800e+03 +1810 1.54720e+04 4.92800e+03 +1811 1.56000e+04 4.92800e+03 +1812 1.57120e+04 4.92800e+03 +1813 1.57920e+04 4.92800e+03 +1814 1.58880e+04 4.92800e+03 +1815 1.59840e+04 4.92800e+03 +1816 1.61280e+04 4.92800e+03 +1817 1.62880e+04 4.92800e+03 +1818 1.64000e+04 4.92800e+03 +1819 1.65440e+04 4.92800e+03 +1820 1.66560e+04 4.92800e+03 +1821 1.67520e+04 4.92800e+03 +1822 1.68160e+04 1.01200e+03 +1823 1.68160e+04 2.22200e+03 +1824 1.68160e+04 3.85000e+03 +1825 1.38080e+04 5.13700e+03 +1826 1.38080e+04 7.28200e+03 +1827 1.38080e+04 8.86600e+03 +1828 1.38080e+04 9.87800e+03 +1829 1.38080e+04 1.15390e+04 +1830 1.39080e+04 4.70800e+03 +1831 1.40800e+04 4.70800e+03 +1832 1.42240e+04 4.70800e+03 +1833 1.44000e+04 4.70800e+03 +1834 1.45120e+04 4.70800e+03 +1835 1.47360e+04 4.70800e+03 +1836 1.48160e+04 4.70800e+03 +1837 1.49280e+04 4.70800e+03 +1838 1.51360e+04 4.70800e+03 +1839 1.53280e+04 4.70800e+03 +1840 1.54080e+04 4.70800e+03 +1841 1.54720e+04 4.70800e+03 +1842 1.56000e+04 4.70800e+03 +1843 1.57120e+04 4.70800e+03 +1844 1.57920e+04 4.70800e+03 +1845 1.58880e+04 4.70800e+03 +1846 1.59840e+04 4.70800e+03 +1847 1.61280e+04 4.70800e+03 +1848 1.62880e+04 4.70800e+03 +1849 1.64000e+04 4.70800e+03 +1850 1.65440e+04 4.70800e+03 +1851 1.66560e+04 4.70800e+03 +1852 1.67520e+04 4.70800e+03 +1853 1.69120e+04 4.70800e+03 +1854 1.69760e+04 1.01200e+03 +1855 1.69760e+04 2.22200e+03 +1856 1.69760e+04 3.97100e+03 +1857 3.66400e+03 3.11300e+03 +1858 3.66400e+03 7.01800e+03 +1859 3.66400e+03 9.11900e+03 +1860 3.68400e+03 9.28400e+03 +1861 3.76000e+03 1.01420e+04 +1862 3.60000e+03 3.11300e+03 +1863 3.60000e+03 7.12800e+03 +1864 3.60000e+03 9.04200e+03 +1865 3.71200e+03 9.81200e+03 +1866 3.88800e+03 9.81200e+03 +1867 4.12800e+03 9.81200e+03 +1868 4.27200e+03 9.81200e+03 +1869 4.40000e+03 9.81200e+03 +1870 4.52800e+03 9.81200e+03 +1871 4.62400e+03 9.81200e+03 +1872 4.68800e+03 9.81200e+03 +1873 4.79500e+03 9.81200e+03 +1874 4.95500e+03 9.15200e+03 +1875 4.81600e+03 1.14950e+04 +1876 4.97600e+03 2.17800e+03 +1877 4.97600e+03 4.04800e+03 +1878 4.97600e+03 6.40200e+03 +1879 8.97600e+03 6.89700e+03 +1880 8.97600e+03 9.87800e+03 +1881 8.99600e+03 6.55600e+03 +1882 9.29600e+03 6.55600e+03 +1883 9.45600e+03 6.55600e+03 +1884 9.55200e+03 6.55600e+03 +1885 9.68000e+03 6.55600e+03 +1886 9.80800e+03 6.55600e+03 +1887 1.00160e+04 6.55600e+03 +1888 1.01280e+04 6.55600e+03 +1889 1.02240e+04 6.55600e+03 +1890 1.03840e+04 6.55600e+03 +1891 1.05120e+04 6.55600e+03 +1892 1.06560e+04 6.55600e+03 +1893 1.08000e+04 6.55600e+03 +1894 1.08640e+04 6.55600e+03 +1895 1.09280e+04 6.55600e+03 +1896 1.10400e+04 6.55600e+03 +1897 1.11200e+04 6.55600e+03 +1898 1.12160e+04 6.55600e+03 +1899 1.13280e+04 6.55600e+03 +1900 1.15040e+04 6.55600e+03 +1901 1.15680e+04 6.55600e+03 +1902 1.16320e+04 6.55600e+03 +1903 1.16960e+04 6.55600e+03 +1904 1.17600e+04 6.55600e+03 +1905 1.18240e+04 6.55600e+03 +1906 1.19200e+04 6.55600e+03 +1907 1.20320e+04 6.55600e+03 +1908 1.21760e+04 6.55600e+03 +1909 1.23840e+04 6.55600e+03 +1910 1.25120e+04 6.55600e+03 +1911 1.26880e+04 6.55600e+03 +1912 1.28000e+04 6.55600e+03 +1913 1.29120e+04 6.55600e+03 +1914 1.30720e+04 4.84000e+02 +1915 1.30720e+04 1.60600e+03 +1916 1.30720e+04 2.31000e+03 +1917 1.30720e+04 3.12400e+03 +1918 1.30720e+04 3.93800e+03 +1919 1.30720e+04 4.70800e+03 +1920 1.30720e+04 6.19300e+03 +1921 1.31080e+04 5.72000e+02 +1922 1.32000e+04 5.72000e+02 +1923 1.33440e+04 5.72000e+02 +1924 1.34880e+04 5.72000e+02 +1925 1.36320e+04 5.72000e+02 +1926 1.38560e+04 5.72000e+02 +1927 1.40960e+04 5.72000e+02 +1928 1.42240e+04 5.72000e+02 +1929 1.44000e+04 5.72000e+02 +1930 1.46400e+04 5.72000e+02 +1931 1.47360e+04 5.72000e+02 +1932 1.48000e+04 5.72000e+02 +1933 1.49120e+04 5.72000e+02 +1934 1.50400e+04 5.72000e+02 +1935 1.52000e+04 5.72000e+02 +1936 1.53280e+04 5.72000e+02 +1937 1.54080e+04 4.84000e+02 +1938 1.00160e+04 6.77600e+03 +1939 1.01280e+04 6.77600e+03 +1940 1.02240e+04 6.77600e+03 +1941 1.03840e+04 6.77600e+03 +1942 1.04800e+04 2.31000e+02 +1943 1.04800e+04 1.01200e+03 +1944 1.04800e+04 1.76000e+03 +1945 7.12000e+03 6.38000e+02 +1946 7.12000e+03 1.51800e+03 +1947 7.12000e+03 4.04800e+03 +1948 7.12000e+03 8.53600e+03 +1949 7.12000e+03 1.08020e+04 +1950 3.72800e+03 3.11300e+03 +1951 3.72800e+03 6.90800e+03 +1952 3.89900e+03 9.59200e+03 +1953 4.01600e+03 1.01420e+04 +1954 5.77600e+03 1.08020e+04 +1955 5.79600e+03 9.06400e+03 +1956 5.96800e+03 9.06400e+03 +1957 6.03200e+03 9.06400e+03 +1958 6.11200e+03 9.06400e+03 +1959 6.19200e+03 9.06400e+03 +1960 6.35200e+03 9.06400e+03 +1961 6.43200e+03 9.06400e+03 +1962 6.51200e+03 9.06400e+03 +1963 6.67200e+03 9.06400e+03 +1964 6.86400e+03 9.06400e+03 +1965 6.92800e+03 9.06400e+03 +1966 7.02400e+03 9.06400e+03 +1967 7.21100e+03 9.06400e+03 +1968 7.24800e+03 6.38000e+02 +1969 7.24800e+03 1.51800e+03 +1970 7.24800e+03 4.04800e+03 +1971 7.24800e+03 7.12800e+03 +1972 7.24800e+03 8.76700e+03 +1973 3.92000e+03 2.95900e+03 +1974 3.92000e+03 6.90800e+03 +1975 3.92000e+03 9.16300e+03 +1976 3.97200e+03 9.37200e+03 +1977 4.12800e+03 9.37200e+03 +1978 4.27200e+03 9.37200e+03 +1979 4.52800e+03 9.37200e+03 +1980 4.62400e+03 9.37200e+03 +1981 4.68800e+03 9.37200e+03 +1982 4.78400e+03 9.37200e+03 +1983 4.96000e+03 9.37200e+03 +1984 5.13600e+03 9.37200e+03 +1985 5.55200e+03 9.37200e+03 +1986 5.63200e+03 9.37200e+03 +1987 5.80800e+03 9.37200e+03 +1988 5.96800e+03 9.37200e+03 +1989 6.03200e+03 9.37200e+03 +1990 6.11200e+03 9.37200e+03 +1991 6.19200e+03 9.37200e+03 +1992 6.35200e+03 9.37200e+03 +1993 6.43200e+03 9.37200e+03 +1994 6.51200e+03 9.47100e+03 +1995 6.51200e+03 1.14950e+04 +1996 1.63680e+04 2.22200e+03 +1997 1.63680e+04 3.85000e+03 +1998 1.63680e+04 5.36800e+03 +1999 1.63680e+04 6.79800e+03 +2000 1.63680e+04 7.87600e+03 +2001 1.63680e+04 1.04610e+04 +2002 1.63680e+04 1.14290e+04 +2003 3.53600e+03 3.11300e+03 +2004 3.53600e+03 7.12800e+03 +2005 3.53600e+03 1.00320e+04 +2006 8.46400e+03 8.74500e+03 +2007 8.72000e+03 8.44800e+03 +2008 8.84800e+03 8.44800e+03 +2009 9.10400e+03 8.44800e+03 +2010 9.72800e+03 8.44800e+03 +2011 1.00000e+04 8.44800e+03 +2012 1.02560e+04 8.44800e+03 +2013 1.03520e+04 8.44800e+03 +2014 1.04640e+04 8.44800e+03 +2015 1.06560e+04 8.44800e+03 +2016 1.07360e+04 8.44800e+03 +2017 1.08000e+04 8.44800e+03 +2018 1.09120e+04 8.44800e+03 +2019 1.10400e+04 8.44800e+03 +2020 1.12000e+04 8.44800e+03 +2021 1.13440e+04 8.44800e+03 +2022 1.15040e+04 8.44800e+03 +2023 1.16000e+04 8.44800e+03 +2024 1.17120e+04 8.44800e+03 +2025 1.17920e+04 8.44800e+03 +2026 1.19840e+04 8.44800e+03 +2027 1.21920e+04 8.44800e+03 +2028 1.22720e+04 8.44800e+03 +2029 1.23840e+04 8.44800e+03 +2030 1.25280e+04 8.44800e+03 +2031 1.26560e+04 8.44800e+03 +2032 1.27200e+04 1.60600e+03 +2033 1.27200e+04 2.57400e+03 +2034 1.27200e+04 4.70800e+03 +2035 1.27200e+04 6.07200e+03 +2036 1.27200e+04 7.39200e+03 +2037 1.28160e+04 7.92000e+02 +2038 1.29440e+04 7.92000e+02 +2039 1.31200e+04 7.92000e+02 +2040 1.32000e+04 7.92000e+02 +2041 1.33440e+04 7.92000e+02 +2042 1.34880e+04 7.92000e+02 +2043 1.36320e+04 7.92000e+02 +2044 1.38560e+04 7.92000e+02 +2045 1.40960e+04 7.92000e+02 +2046 1.42240e+04 7.92000e+02 +2047 1.44000e+04 7.92000e+02 +2048 1.46400e+04 7.92000e+02 +2049 1.47360e+04 7.92000e+02 +2050 1.48000e+04 7.92000e+02 +2051 1.49120e+04 7.92000e+02 +2052 1.50510e+04 7.92000e+02 +2053 2.80000e+03 3.11300e+03 +2054 2.80000e+03 6.86400e+03 +2055 2.85200e+03 7.70000e+03 +2056 2.96000e+03 7.70000e+03 +2057 3.02400e+03 7.70000e+03 +2058 3.20000e+03 7.70000e+03 +2059 3.31200e+03 7.70000e+03 +2060 3.42400e+03 7.70000e+03 +2061 3.50400e+03 7.70000e+03 +2062 3.63200e+03 7.70000e+03 +2063 3.69600e+03 7.70000e+03 +2064 3.80800e+03 7.70000e+03 +2065 3.88800e+03 7.70000e+03 +2066 3.95200e+03 7.70000e+03 +2067 4.09600e+03 7.70000e+03 +2068 4.17600e+03 7.70000e+03 +2069 4.24000e+03 7.79900e+03 +2070 8.04800e+03 8.75600e+03 +2071 8.08000e+03 7.70000e+03 +2072 8.11200e+03 1.18800e+03 +2073 8.11200e+03 4.81800e+03 +2074 8.11200e+03 7.01800e+03 +2075 1.32800e+03 3.22300e+03 +2076 1.32800e+03 6.91900e+03 +2077 1.45600e+03 8.77800e+03 +2078 1.45600e+03 1.00320e+04 +2079 9.68000e+03 2.28800e+03 +2080 9.80800e+03 2.28800e+03 +2081 9.87200e+03 2.28800e+03 +2082 1.00000e+04 2.28800e+03 +2083 1.00960e+04 2.28800e+03 +2084 1.02240e+04 2.28800e+03 +2085 1.02880e+04 2.28800e+03 +2086 1.03840e+04 2.28800e+03 +2087 1.05120e+04 2.28800e+03 +2088 1.05760e+04 2.28800e+03 +2089 1.06400e+04 2.28800e+03 +2090 1.07040e+04 2.28800e+03 +2091 1.08000e+04 2.28800e+03 +2092 1.09280e+04 2.28800e+03 +2093 1.10560e+04 2.28800e+03 +2094 1.11200e+04 2.28800e+03 +2095 1.12160e+04 2.28800e+03 +2096 1.13440e+04 2.28800e+03 +2097 1.14080e+04 2.28800e+03 +2098 1.14880e+04 2.28800e+03 +2099 1.16960e+04 2.28800e+03 +2100 1.17600e+04 2.28800e+03 +2101 1.19040e+04 2.28800e+03 +2102 1.20480e+04 2.28800e+03 +2103 1.21760e+04 2.28800e+03 +2104 1.23360e+04 2.28800e+03 +2105 1.24320e+04 2.28800e+03 +2106 1.24960e+04 9.13000e+02 +2107 1.24960e+04 1.60600e+03 +2108 1.25160e+04 1.01200e+03 +2109 1.26880e+04 1.01200e+03 +2110 1.28160e+04 1.01200e+03 +2111 1.29440e+04 1.01200e+03 +2112 1.31200e+04 1.01200e+03 +2113 1.32000e+04 1.01200e+03 +2114 1.33440e+04 1.01200e+03 +2115 1.34880e+04 1.01200e+03 +2116 1.36320e+04 1.01200e+03 +2117 1.38670e+04 1.01200e+03 +2118 5.23200e+03 1.04720e+04 +2119 5.48800e+03 7.92000e+03 +2120 5.55200e+03 7.92000e+03 +2121 5.63200e+03 7.92000e+03 +2122 5.71200e+03 7.92000e+03 +2123 5.80800e+03 7.92000e+03 +2124 5.96800e+03 7.92000e+03 +2125 6.09600e+03 7.92000e+03 +2126 6.19200e+03 7.92000e+03 +2127 6.41600e+03 7.92000e+03 +2128 6.54400e+03 7.92000e+03 +2129 6.67200e+03 7.92000e+03 +2130 6.86400e+03 7.92000e+03 +2131 6.92800e+03 7.92000e+03 +2132 7.04000e+03 7.92000e+03 +2133 7.18400e+03 7.92000e+03 +2134 7.53600e+03 7.92000e+03 +2135 7.60000e+03 7.92000e+03 +2136 7.69600e+03 7.92000e+03 +2137 7.76000e+03 7.92000e+03 +2138 7.82400e+03 7.92000e+03 +2139 7.88800e+03 7.92000e+03 +2140 8.09600e+03 7.92000e+03 +2141 8.17600e+03 7.92000e+03 +2142 8.25600e+03 7.92000e+03 +2143 8.44800e+03 7.92000e+03 +2144 8.72000e+03 7.92000e+03 +2145 8.84800e+03 7.92000e+03 +2146 9.11500e+03 7.92000e+03 +2147 9.13600e+03 1.18800e+03 +2148 9.13600e+03 2.94800e+03 +2149 9.13600e+03 5.96200e+03 +2150 9.13600e+03 7.01800e+03 +2151 9.44400e+03 6.11600e+03 +2152 9.55200e+03 6.11600e+03 +2153 9.68000e+03 6.11600e+03 +2154 9.80800e+03 6.11600e+03 +2155 1.00160e+04 6.11600e+03 +2156 1.01440e+04 6.11600e+03 +2157 1.02240e+04 6.11600e+03 +2158 1.03840e+04 6.11600e+03 +2159 1.05120e+04 6.11600e+03 +2160 1.05760e+04 6.11600e+03 +2161 1.06560e+04 6.11600e+03 +2162 1.08000e+04 6.11600e+03 +2163 1.08640e+04 6.11600e+03 +2164 1.09280e+04 6.11600e+03 +2165 1.10560e+04 6.11600e+03 +2166 1.11200e+04 6.11600e+03 +2167 1.12160e+04 6.11600e+03 +2168 1.13120e+04 2.31000e+02 +2169 1.13120e+04 9.02000e+02 +2170 1.13120e+04 4.48800e+03 +2171 1.13120e+04 5.97300e+03 +2172 9.00800e+03 9.87800e+03 +2173 9.10400e+03 1.18800e+03 +2174 9.10400e+03 2.94800e+03 +2175 9.10400e+03 5.96200e+03 +2176 9.10400e+03 7.02900e+03 +2177 5.64800e+03 1.06810e+04 +2178 5.80800e+03 1.04720e+04 +2179 5.96800e+03 1.04720e+04 +2180 6.03200e+03 1.04720e+04 +2181 6.11200e+03 1.04720e+04 +2182 6.19200e+03 1.04720e+04 +2183 6.35200e+03 1.04720e+04 +2184 6.46400e+03 1.04720e+04 +2185 6.67200e+03 1.04720e+04 +2186 6.84800e+03 1.04720e+04 +2187 7.02400e+03 1.04720e+04 +2188 7.20000e+03 1.04720e+04 +2189 7.37600e+03 1.04720e+04 +2190 7.53600e+03 1.04720e+04 +2191 7.60000e+03 1.04720e+04 +2192 7.69600e+03 1.04720e+04 +2193 7.82400e+03 1.04720e+04 +2194 7.88800e+03 1.04720e+04 +2195 7.98400e+03 1.04720e+04 +2196 8.09600e+03 1.04720e+04 +2197 8.17600e+03 1.04720e+04 +2198 8.27200e+03 1.04720e+04 +2199 8.36800e+03 1.04720e+04 +2200 8.43200e+03 1.04720e+04 +2201 8.72000e+03 1.04720e+04 +2202 8.84800e+03 1.04720e+04 +2203 9.10400e+03 1.04720e+04 +2204 9.72800e+03 1.04720e+04 +2205 1.00320e+04 1.04720e+04 +2206 1.02560e+04 1.04720e+04 +2207 1.03200e+04 1.04720e+04 +2208 1.04800e+04 1.04720e+04 +2209 1.06560e+04 1.04720e+04 +2210 1.07470e+04 1.04720e+04 +2211 1.07680e+04 2.31000e+02 +2212 1.07680e+04 9.02000e+02 +2213 1.07680e+04 1.76000e+03 +2214 1.07680e+04 7.39200e+03 +2215 1.07680e+04 1.03730e+04 +2216 1.00160e+04 9.06400e+03 +2217 1.00640e+04 2.31000e+02 +2218 1.00640e+04 1.01200e+03 +2219 1.00640e+04 1.76000e+03 +2220 5.58400e+03 3.22300e+03 +2221 5.58400e+03 4.04800e+03 +2222 5.58400e+03 6.40200e+03 +2223 5.58400e+03 8.38200e+03 +2224 5.58400e+03 1.06920e+04 +2225 5.66400e+03 3.08000e+03 +2226 5.87200e+03 3.08000e+03 +2227 6.12800e+03 3.08000e+03 +2228 6.19200e+03 3.08000e+03 +2229 6.25600e+03 3.08000e+03 +2230 6.41600e+03 3.08000e+03 +2231 6.56000e+03 3.08000e+03 +2232 6.67200e+03 3.08000e+03 +2233 6.78400e+03 3.08000e+03 +2234 6.89600e+03 3.08000e+03 +2235 7.00800e+03 3.08000e+03 +2236 7.08800e+03 3.08000e+03 +2237 7.18400e+03 3.08000e+03 +2238 7.31200e+03 3.08000e+03 +2239 7.50400e+03 3.08000e+03 +2240 7.66400e+03 3.08000e+03 +2241 7.76000e+03 3.08000e+03 +2242 7.82400e+03 3.08000e+03 +2243 7.88800e+03 3.08000e+03 +2244 7.95200e+03 3.08000e+03 +2245 8.04800e+03 3.08000e+03 +2246 8.20800e+03 3.08000e+03 +2247 8.33600e+03 3.08000e+03 +2248 8.43200e+03 3.08000e+03 +2249 8.49600e+03 3.08000e+03 +2250 8.62400e+03 3.08000e+03 +2251 8.75200e+03 3.08000e+03 +2252 8.84800e+03 3.08000e+03 +2253 8.97600e+03 3.08000e+03 +2254 9.05100e+03 3.08000e+03 +2255 9.07200e+03 1.18800e+03 +2256 9.07200e+03 2.91500e+03 +2257 8.62400e+03 5.96200e+03 +2258 8.62400e+03 8.86600e+03 +2259 8.68800e+03 1.18800e+03 +2260 8.59200e+03 8.86600e+03 +2261 8.65600e+03 1.18800e+03 +2262 8.65600e+03 5.96200e+03 +2263 7.95200e+03 8.75600e+03 +2264 8.04800e+03 6.11600e+03 +2265 8.17600e+03 6.11600e+03 +2266 8.43200e+03 6.11600e+03 +2267 8.50700e+03 6.11600e+03 +2268 8.52800e+03 1.18800e+03 +2269 8.52800e+03 5.97300e+03 +2270 8.46400e+03 1.18800e+03 +2271 8.65600e+03 8.86600e+03 +2272 7.05600e+03 1.08020e+04 +2273 7.19500e+03 8.84400e+03 +2274 7.21600e+03 6.38000e+02 +2275 7.21600e+03 1.51800e+03 +2276 7.21600e+03 4.04800e+03 +2277 7.21600e+03 7.12800e+03 +2278 7.21600e+03 8.65700e+03 +2279 1.74560e+04 1.78200e+03 +2280 1.74560e+04 4.09200e+03 +2281 1.74560e+04 6.57800e+03 +2282 1.74560e+04 7.72200e+03 +2283 1.74560e+04 8.74500e+03 +2284 1.74760e+04 8.84400e+03 +2285 1.75520e+04 8.84400e+03 +2286 1.77120e+04 9.60300e+03 +2287 1.77120e+04 1.06700e+04 +2288 9.42800e+03 2.94800e+03 +2289 9.68000e+03 2.94800e+03 +2290 9.80800e+03 2.94800e+03 +2291 9.87200e+03 2.94800e+03 +2292 1.00000e+04 2.94800e+03 +2293 1.00960e+04 2.94800e+03 +2294 1.02240e+04 2.94800e+03 +2295 1.02880e+04 2.94800e+03 +2296 1.03840e+04 2.94800e+03 +2297 1.05120e+04 2.94800e+03 +2298 1.05760e+04 2.94800e+03 +2299 1.06400e+04 2.94800e+03 +2300 1.07040e+04 2.94800e+03 +2301 1.08000e+04 2.94800e+03 +2302 1.09280e+04 2.94800e+03 +2303 1.10560e+04 2.94800e+03 +2304 1.11200e+04 2.94800e+03 +2305 1.12160e+04 2.94800e+03 +2306 1.13440e+04 2.94800e+03 +2307 1.14880e+04 2.94800e+03 +2308 1.16960e+04 2.94800e+03 +2309 1.17600e+04 2.94800e+03 +2310 1.19040e+04 2.94800e+03 +2311 1.20480e+04 2.94800e+03 +2312 1.21760e+04 2.94800e+03 +2313 1.23360e+04 2.94800e+03 +2314 1.24320e+04 2.94800e+03 +2315 1.25230e+04 2.94800e+03 +2316 1.25600e+04 1.60600e+03 +2317 1.25600e+04 2.35400e+03 +2318 1.75520e+04 1.78200e+03 +2319 1.75520e+04 4.09200e+03 +2320 1.75520e+04 6.57800e+03 +2321 1.75520e+04 7.88700e+03 +2322 1.77120e+04 8.18400e+03 +2323 1.78560e+04 8.18400e+03 +2324 1.79680e+04 8.18400e+03 +2325 1.81920e+04 8.18400e+03 +2326 1.82560e+04 9.42700e+03 +2327 1.82560e+04 1.06700e+04 +2328 9.72800e+03 1.00320e+04 +2329 1.00320e+04 1.00320e+04 +2330 1.02560e+04 1.00320e+04 +2331 1.03200e+04 1.00320e+04 +2332 1.04160e+04 1.00320e+04 +2333 1.04800e+04 1.00320e+04 +2334 1.06560e+04 1.00320e+04 +2335 1.07360e+04 1.00320e+04 +2336 1.08000e+04 1.00320e+04 +2337 1.09280e+04 1.00320e+04 +2338 1.10400e+04 1.00320e+04 +2339 1.12160e+04 1.00320e+04 +2340 1.13120e+04 1.00320e+04 +2341 1.14400e+04 1.00320e+04 +2342 1.15200e+04 1.00320e+04 +2343 1.16000e+04 1.00320e+04 +2344 1.17120e+04 1.00320e+04 +2345 1.17920e+04 1.00320e+04 +2346 1.19840e+04 1.00320e+04 +2347 1.20800e+04 1.00320e+04 +2348 1.22080e+04 1.00320e+04 +2349 1.23840e+04 1.00320e+04 +2350 1.25280e+04 1.00320e+04 +2351 1.26560e+04 1.00320e+04 +2352 1.28160e+04 1.00320e+04 +2353 1.29440e+04 1.00320e+04 +2354 1.30880e+04 1.00320e+04 +2355 1.32320e+04 1.00320e+04 +2356 1.34080e+04 1.00320e+04 +2357 1.35360e+04 1.00320e+04 +2358 1.36430e+04 1.00320e+04 +2359 1.36800e+04 2.53000e+03 +2360 1.36800e+04 5.14800e+03 +2361 1.36800e+04 7.28200e+03 +2362 1.36800e+04 8.86600e+03 +2363 1.36800e+04 9.88900e+03 +2364 1.77120e+04 2.31000e+02 +2365 1.77120e+04 1.78200e+03 +2366 1.77120e+04 4.24600e+03 +2367 1.77120e+04 6.32500e+03 +2368 1.78400e+04 6.90800e+03 +2369 1.79680e+04 6.90800e+03 +2370 1.81280e+04 7.00700e+03 +2371 1.81280e+04 7.76600e+03 +2372 1.81280e+04 1.06700e+04 +2373 9.07200e+03 3.48700e+03 +2374 9.07200e+03 5.96200e+03 +2375 9.07200e+03 6.90800e+03 +2376 9.07200e+03 9.87800e+03 +2377 9.44000e+03 3.38800e+03 +2378 9.52000e+03 3.38800e+03 +2379 9.68000e+03 3.38800e+03 +2380 9.84000e+03 3.38800e+03 +2381 1.00000e+04 3.38800e+03 +2382 1.00960e+04 3.38800e+03 +2383 1.02240e+04 3.38800e+03 +2384 1.02880e+04 3.38800e+03 +2385 1.03840e+04 3.38800e+03 +2386 1.05120e+04 3.38800e+03 +2387 1.05760e+04 3.38800e+03 +2388 1.06400e+04 3.38800e+03 +2389 1.07040e+04 3.38800e+03 +2390 1.08000e+04 3.38800e+03 +2391 1.09280e+04 3.38800e+03 +2392 1.10560e+04 3.38800e+03 +2393 1.11200e+04 3.38800e+03 +2394 1.12160e+04 3.38800e+03 +2395 1.13440e+04 3.38800e+03 +2396 1.14880e+04 3.38800e+03 +2397 1.16960e+04 3.38800e+03 +2398 1.17600e+04 3.38800e+03 +2399 1.19040e+04 3.38800e+03 +2400 1.20480e+04 3.38800e+03 +2401 1.21760e+04 3.38800e+03 +2402 1.23360e+04 3.38800e+03 +2403 1.24320e+04 3.38800e+03 +2404 1.25440e+04 3.38800e+03 +2405 1.26880e+04 3.38800e+03 +2406 1.27630e+04 3.38800e+03 +2407 1.27840e+04 1.60600e+03 +2408 1.27840e+04 2.31000e+03 +2409 9.23200e+03 8.10700e+03 +2410 9.23200e+03 9.87800e+03 +2411 9.64800e+03 8.00800e+03 +2412 9.74400e+03 8.00800e+03 +2413 9.90400e+03 8.00800e+03 +2414 1.00160e+04 8.00800e+03 +2415 1.01920e+04 8.00800e+03 +2416 1.02560e+04 8.00800e+03 +2417 1.03840e+04 8.00800e+03 +2418 1.04960e+04 8.00800e+03 +2419 1.06560e+04 8.00800e+03 +2420 1.08160e+04 8.00800e+03 +2421 1.09280e+04 8.00800e+03 +2422 1.10400e+04 8.00800e+03 +2423 1.11200e+04 8.00800e+03 +2424 1.12160e+04 8.00800e+03 +2425 1.13280e+04 8.00800e+03 +2426 1.15040e+04 8.00800e+03 +2427 1.15680e+04 8.00800e+03 +2428 1.16320e+04 8.00800e+03 +2429 1.16960e+04 8.00800e+03 +2430 1.17600e+04 8.00800e+03 +2431 1.18240e+04 8.00800e+03 +2432 1.19680e+04 8.00800e+03 +2433 1.21920e+04 8.00800e+03 +2434 1.22720e+04 8.00800e+03 +2435 1.23840e+04 8.00800e+03 +2436 1.25280e+04 8.00800e+03 +2437 1.26560e+04 8.00800e+03 +2438 1.28000e+04 8.00800e+03 +2439 1.28800e+04 8.00800e+03 +2440 1.29440e+04 8.00800e+03 +2441 1.30880e+04 8.00800e+03 +2442 1.32640e+04 8.00800e+03 +2443 1.33920e+04 8.00800e+03 +2444 1.35200e+04 8.00800e+03 +2445 1.36320e+04 8.00800e+03 +2446 1.37120e+04 2.53000e+03 +2447 1.37120e+04 5.14800e+03 +2448 1.37120e+04 7.28200e+03 +2449 8.40000e+03 1.18800e+03 +2450 8.40000e+03 6.91900e+03 +2451 8.42000e+03 7.04000e+03 +2452 8.50700e+03 7.04000e+03 +2453 8.52800e+03 7.13900e+03 +2454 8.52800e+03 8.86600e+03 +2455 9.16800e+03 1.63900e+03 +2456 9.16800e+03 2.94800e+03 +2457 9.16800e+03 5.96200e+03 +2458 9.16800e+03 7.01800e+03 +2459 9.16800e+03 8.07400e+03 +2460 9.16800e+03 9.87800e+03 +2461 9.26400e+03 1.45200e+03 +2462 9.42400e+03 1.45200e+03 +2463 9.58400e+03 1.45200e+03 +2464 9.68000e+03 1.45200e+03 +2465 9.80800e+03 1.45200e+03 +2466 9.87200e+03 1.45200e+03 +2467 1.00000e+04 1.45200e+03 +2468 1.00960e+04 1.45200e+03 +2469 1.02240e+04 1.45200e+03 +2470 1.02880e+04 1.45200e+03 +2471 1.03840e+04 1.45200e+03 +2472 1.05120e+04 1.45200e+03 +2473 1.05760e+04 1.45200e+03 +2474 1.06400e+04 1.45200e+03 +2475 1.07040e+04 1.45200e+03 +2476 1.08000e+04 1.45200e+03 +2477 1.09280e+04 1.45200e+03 +2478 1.10560e+04 1.45200e+03 +2479 1.11200e+04 1.45200e+03 +2480 1.12160e+04 1.45200e+03 +2481 1.13440e+04 1.45200e+03 +2482 1.14880e+04 1.45200e+03 +2483 1.16960e+04 1.45200e+03 +2484 1.17600e+04 1.45200e+03 +2485 1.19040e+04 1.45200e+03 +2486 1.20480e+04 1.45200e+03 +2487 1.21760e+04 1.45200e+03 +2488 1.23040e+04 9.02000e+02 +2489 9.36000e+03 2.82700e+03 +2490 9.41200e+03 2.72800e+03 +2491 9.68000e+03 2.72800e+03 +2492 9.80800e+03 2.72800e+03 +2493 9.87200e+03 2.72800e+03 +2494 1.00000e+04 2.72800e+03 +2495 1.00960e+04 2.72800e+03 +2496 1.02240e+04 2.72800e+03 +2497 1.02880e+04 2.72800e+03 +2498 1.03840e+04 2.72800e+03 +2499 1.05120e+04 2.72800e+03 +2500 1.05760e+04 2.72800e+03 +2501 1.06400e+04 2.72800e+03 +2502 1.07040e+04 2.72800e+03 +2503 1.08000e+04 2.72800e+03 +2504 1.09280e+04 2.72800e+03 +2505 1.10560e+04 2.72800e+03 +2506 1.11200e+04 2.72800e+03 +2507 1.12160e+04 2.72800e+03 +2508 1.13440e+04 2.72800e+03 +2509 1.14880e+04 2.72800e+03 +2510 1.16960e+04 2.72800e+03 +2511 1.17600e+04 2.72800e+03 +2512 1.19040e+04 2.72800e+03 +2513 1.20480e+04 2.72800e+03 +2514 1.21760e+04 2.72800e+03 +2515 1.23360e+04 2.72800e+03 +2516 1.24320e+04 2.72800e+03 +2517 1.25120e+04 2.72800e+03 +2518 1.25920e+04 1.60600e+03 +2519 1.25920e+04 2.47500e+03 +2520 1.48640e+04 2.53000e+03 +2521 1.48640e+04 4.37800e+03 +2522 1.48640e+04 5.47800e+03 +2523 1.48640e+04 6.79800e+03 +2524 1.48640e+04 8.64600e+03 +2525 1.48640e+04 9.87800e+03 +2526 1.48640e+04 1.14290e+04 +2527 7.76000e+03 8.74500e+03 +2528 7.77600e+03 8.44800e+03 +2529 7.79200e+03 1.18800e+03 +2530 7.79200e+03 4.81800e+03 +2531 1.53120e+04 7.88700e+03 +2532 1.53120e+04 8.64600e+03 +2533 1.53120e+04 9.87800e+03 +2534 1.53120e+04 1.06260e+04 +2535 1.53120e+04 1.14290e+04 +2536 1.53440e+04 7.78800e+03 +2537 1.53760e+04 2.53000e+03 +2538 1.53760e+04 5.47800e+03 +2539 1.53760e+04 6.79800e+03 +2540 1.53760e+04 7.68900e+03 +2541 6.86400e+03 4.29000e+02 +2542 6.86400e+03 1.51800e+03 +2543 6.86400e+03 2.57400e+03 +2544 6.86400e+03 4.04800e+03 +2545 7.00800e+03 5.36800e+03 +2546 7.08800e+03 5.36800e+03 +2547 7.18400e+03 5.36800e+03 +2548 7.32800e+03 5.36800e+03 +2549 7.58400e+03 5.36800e+03 +2550 7.66400e+03 5.36800e+03 +2551 7.76000e+03 5.36800e+03 +2552 7.82400e+03 5.36800e+03 +2553 7.88800e+03 5.36800e+03 +2554 7.95200e+03 5.36800e+03 +2555 8.04800e+03 5.36800e+03 +2556 8.17600e+03 5.36800e+03 +2557 8.33600e+03 5.36800e+03 +2558 8.43200e+03 5.36800e+03 +2559 8.49600e+03 5.36800e+03 +2560 8.75200e+03 5.36800e+03 +2561 8.84800e+03 5.36800e+03 +2562 8.99200e+03 5.36800e+03 +2563 9.44000e+03 5.36800e+03 +2564 9.55200e+03 5.36800e+03 +2565 9.68000e+03 5.36800e+03 +2566 9.82400e+03 5.36800e+03 +2567 1.00160e+04 5.36800e+03 +2568 1.01600e+04 5.36800e+03 +2569 1.02240e+04 5.36800e+03 +2570 1.02880e+04 5.36800e+03 +2571 1.03840e+04 5.36800e+03 +2572 1.05120e+04 5.36800e+03 +2573 1.06080e+04 5.36800e+03 +2574 1.07040e+04 7.39200e+03 +2575 1.07040e+04 1.14950e+04 +2576 1.24000e+04 1.14840e+04 +2577 1.25280e+04 1.10000e+04 +2578 1.26560e+04 1.10000e+04 +2579 1.28160e+04 1.10000e+04 +2580 1.29440e+04 1.10000e+04 +2581 1.30880e+04 1.10000e+04 +2582 1.32320e+04 1.10000e+04 +2583 1.33920e+04 1.10000e+04 +2584 1.35360e+04 1.10000e+04 +2585 1.36960e+04 1.10000e+04 +2586 1.39680e+04 1.10000e+04 +2587 1.41920e+04 1.10000e+04 +2588 1.42720e+04 1.10000e+04 +2589 1.43840e+04 1.10000e+04 +2590 1.44480e+04 1.10000e+04 +2591 1.24000e+04 1.11760e+04 +2592 1.45760e+04 2.53000e+03 +2593 1.45760e+04 5.36800e+03 +2594 1.45760e+04 6.79800e+03 +2595 1.45760e+04 8.64600e+03 +2596 1.45760e+04 9.87800e+03 +2597 1.47040e+04 1.10000e+04 +2598 1.47840e+04 1.10000e+04 +2599 1.49600e+04 1.10000e+04 +2600 1.51200e+04 1.10000e+04 +2601 1.53920e+04 1.10000e+04 +2602 1.55200e+04 1.10000e+04 +2603 1.57120e+04 1.10000e+04 +2604 1.57920e+04 1.10000e+04 +2605 1.58560e+04 1.10000e+04 +2606 1.60480e+04 1.10000e+04 +2607 1.62240e+04 1.10000e+04 +2608 1.64320e+04 1.10000e+04 +2609 1.64960e+04 1.14840e+04 +2610 1.64960e+04 1.11760e+04 +2611 7.08800e+03 8.53600e+03 +2612 7.08800e+03 1.08020e+04 +2613 7.15200e+03 6.38000e+02 +2614 7.15200e+03 1.51800e+03 +2615 7.15200e+03 4.04800e+03 +2616 7.15200e+03 7.13900e+03 +2617 1.59520e+04 2.34300e+03 +2618 1.59720e+04 2.99200e+03 +2619 1.61280e+04 2.99200e+03 +2620 1.62720e+04 2.99200e+03 +2621 1.64000e+04 2.99200e+03 +2622 1.65440e+04 2.99200e+03 +2623 1.66560e+04 2.99200e+03 +2624 1.67520e+04 2.99200e+03 +2625 1.69120e+04 2.99200e+03 +2626 1.70400e+04 2.99200e+03 +2627 1.71040e+04 2.99200e+03 +2628 1.71840e+04 2.99200e+03 +2629 1.73920e+04 2.99200e+03 +2630 1.75040e+04 2.99200e+03 +2631 1.77440e+04 4.12500e+03 +2632 1.77440e+04 6.20400e+03 +2633 1.77440e+04 7.76600e+03 +2634 1.77440e+04 8.73400e+03 +2635 1.77440e+04 9.60300e+03 +2636 1.77440e+04 1.06700e+04 +2637 1.56640e+04 2.53000e+03 +2638 1.56640e+04 5.36800e+03 +2639 1.56640e+04 6.79800e+03 +2640 1.56640e+04 8.42600e+03 +2641 1.56640e+04 9.87800e+03 +2642 1.56640e+04 1.06260e+04 +2643 1.56640e+04 1.14290e+04 +2644 1.75840e+04 2.31000e+02 +2645 1.75840e+04 1.78200e+03 +2646 1.75840e+04 4.09200e+03 +2647 1.75840e+04 6.57800e+03 +2648 1.75840e+04 7.76600e+03 +2649 1.75840e+04 9.60300e+03 +2650 1.75840e+04 1.06700e+04 +2651 1.64320e+04 2.22200e+03 +2652 1.64320e+04 3.85000e+03 +2653 1.64320e+04 5.47800e+03 +2654 1.64320e+04 6.79800e+03 +2655 1.64320e+04 7.88700e+03 +2656 1.65280e+04 1.08900e+04 +2657 8.14400e+03 1.18800e+03 +2658 8.14400e+03 4.81800e+03 +2659 8.14400e+03 7.01800e+03 +2660 8.14400e+03 8.75600e+03 +2661 9.61600e+03 2.31000e+02 +2662 9.61600e+03 1.01200e+03 +2663 9.61600e+03 1.76000e+03 +2664 9.61600e+03 7.13900e+03 +2665 1.21120e+04 9.02000e+02 +2666 1.21120e+04 4.48800e+03 +2667 1.21120e+04 5.96200e+03 +2668 1.21120e+04 7.39200e+03 +2669 8.36800e+03 1.18800e+03 +2670 8.36800e+03 6.90800e+03 +2671 8.36800e+03 8.76700e+03 +2672 1.27840e+04 1.14290e+04 +2673 1.28040e+04 8.84400e+03 +2674 1.28800e+04 8.84400e+03 +2675 1.29440e+04 8.84400e+03 +2676 1.30880e+04 8.84400e+03 +2677 1.32640e+04 8.84400e+03 +2678 1.33920e+04 8.84400e+03 +2679 1.35310e+04 8.84400e+03 +2680 1.35520e+04 2.53000e+03 +2681 1.35520e+04 3.93800e+03 +2682 1.35520e+04 4.92800e+03 +2683 1.35520e+04 7.28200e+03 +2684 1.35520e+04 8.65700e+03 +2685 1.88640e+04 1.08460e+04 +2686 1.88640e+04 1.15280e+04 +2687 1.89160e+04 9.08600e+03 +2688 1.90240e+04 9.08600e+03 +2689 1.19200e+04 7.39200e+03 +2690 1.19200e+04 1.11650e+04 +2691 1.19360e+04 6.77600e+03 +2692 1.19520e+04 9.02000e+02 +2693 1.19520e+04 4.48800e+03 +2694 1.19520e+04 6.07200e+03 +2695 1.03200e+04 2.31000e+02 +2696 1.03200e+04 1.01200e+03 +2697 1.03200e+04 1.76000e+03 +2698 1.03200e+04 7.39200e+03 +2699 1.04270e+04 9.50400e+03 +2700 1.18240e+04 9.02000e+02 +2701 1.18240e+04 4.48800e+03 +2702 1.18240e+04 6.08300e+03 +2703 1.18400e+04 6.33600e+03 +2704 1.18560e+04 7.39200e+03 +2705 1.18560e+04 1.11650e+04 +2706 1.26560e+04 1.60600e+03 +2707 1.26560e+04 2.57400e+03 +2708 1.26560e+04 4.70800e+03 +2709 1.26560e+04 6.07200e+03 +2710 1.26720e+04 6.77600e+03 +2711 1.26880e+04 7.39200e+03 +2712 1.26880e+04 1.14290e+04 +2713 5.00800e+03 1.14950e+04 +2714 5.07200e+03 2.17800e+03 +2715 5.07200e+03 4.04800e+03 +2716 5.07200e+03 6.40200e+03 +2717 5.07200e+03 7.19400e+03 +2718 1.31680e+04 1.60600e+03 +2719 1.31680e+04 2.31000e+03 +2720 1.31680e+04 3.12400e+03 +2721 1.31680e+04 3.93800e+03 +2722 1.31680e+04 4.92800e+03 +2723 1.31680e+04 5.92900e+03 +2724 1.32960e+04 6.02800e+03 +2725 1.34560e+04 6.02800e+03 +2726 1.35200e+04 6.02800e+03 +2727 1.36320e+04 6.02800e+03 +2728 1.37600e+04 6.02800e+03 +2729 1.39200e+04 6.02800e+03 +2730 1.40800e+04 6.02800e+03 +2731 1.41920e+04 6.02800e+03 +2732 1.42560e+04 6.02800e+03 +2733 1.44000e+04 6.02800e+03 +2734 1.45120e+04 6.02800e+03 +2735 1.47040e+04 6.02800e+03 +2736 1.48160e+04 6.02800e+03 +2737 1.49280e+04 6.02800e+03 +2738 1.51360e+04 6.02800e+03 +2739 1.53280e+04 6.02800e+03 +2740 1.54400e+04 6.02800e+03 +2741 1.56000e+04 6.02800e+03 +2742 1.57120e+04 6.02800e+03 +2743 1.57920e+04 6.02800e+03 +2744 1.58880e+04 6.02800e+03 +2745 1.59840e+04 6.02800e+03 +2746 1.61280e+04 6.02800e+03 +2747 1.62880e+04 6.02800e+03 +2748 1.65440e+04 6.02800e+03 +2749 1.66560e+04 6.02800e+03 +2750 1.67520e+04 6.02800e+03 +2751 1.68160e+04 6.02800e+03 +2752 1.69120e+04 6.02800e+03 +2753 1.70400e+04 6.02800e+03 +2754 1.71040e+04 6.02800e+03 +2755 1.71680e+04 6.02800e+03 +2756 1.73920e+04 6.02800e+03 +2757 1.75040e+04 6.02800e+03 +2758 1.76800e+04 6.45700e+03 +2759 1.76800e+04 7.76600e+03 +2760 1.76800e+04 9.60300e+03 +2761 1.76800e+04 1.06700e+04 +2762 3.31200e+03 1.06920e+04 +2763 3.34400e+03 3.11300e+03 +2764 3.34400e+03 6.86400e+03 +2765 3.34400e+03 1.01530e+04 +2766 1.45440e+04 2.53000e+03 +2767 1.45440e+04 5.36800e+03 +2768 1.45440e+04 6.79800e+03 +2769 1.45440e+04 8.64600e+03 +2770 1.45440e+04 9.87800e+03 +2771 1.45440e+04 1.15390e+04 +2772 6.73600e+03 6.38000e+02 +2773 6.73600e+03 1.51800e+03 +2774 6.73600e+03 2.57400e+03 +2775 6.73600e+03 4.04800e+03 +2776 6.73600e+03 8.64600e+03 +2777 6.73600e+03 9.43800e+03 +2778 6.83200e+03 1.14400e+04 +2779 7.02400e+03 1.14400e+04 +2780 7.20000e+03 1.14400e+04 +2781 7.44000e+03 1.14400e+04 +2782 7.53600e+03 1.14400e+04 +2783 7.60000e+03 1.14400e+04 +2784 7.69600e+03 1.14400e+04 +2785 7.82400e+03 1.14400e+04 +2786 7.88800e+03 1.14400e+04 +2787 8.09600e+03 1.14400e+04 +2788 8.17600e+03 1.14400e+04 +2789 8.27200e+03 1.14400e+04 +2790 8.36800e+03 1.14400e+04 +2791 8.43200e+03 1.14400e+04 +2792 8.72000e+03 1.14400e+04 +2793 8.84800e+03 1.14400e+04 +2794 9.10400e+03 1.14400e+04 +2795 9.72800e+03 1.14400e+04 +2796 1.00320e+04 1.14400e+04 +2797 1.02560e+04 1.14400e+04 +2798 1.03200e+04 1.14400e+04 +2799 1.04800e+04 1.14400e+04 +2800 1.05440e+04 1.15280e+04 +2801 1.17920e+04 9.02000e+02 +2802 1.17920e+04 4.48800e+03 +2803 1.17920e+04 6.07200e+03 +2804 1.17920e+04 7.39200e+03 +2805 1.18080e+04 8.22800e+03 +2806 1.18240e+04 1.11650e+04 +2807 8.72000e+03 1.18800e+03 +2808 8.72000e+03 5.96200e+03 +2809 8.84800e+03 7.70000e+03 +2810 9.10400e+03 7.70000e+03 +2811 9.23200e+03 7.70000e+03 +2812 6.06400e+03 3.19000e+02 +2813 6.06400e+03 2.02400e+03 +2814 6.06400e+03 4.04800e+03 +2815 6.06400e+03 5.33500e+03 +2816 6.10000e+03 5.58800e+03 +2817 6.19200e+03 5.58800e+03 +2818 6.25600e+03 5.58800e+03 +2819 6.41600e+03 5.58800e+03 +2820 6.56000e+03 5.58800e+03 +2821 6.67200e+03 5.58800e+03 +2822 6.77900e+03 5.58800e+03 +2823 6.80000e+03 7.12800e+03 +2824 6.80000e+03 8.64600e+03 +2825 6.80000e+03 9.43800e+03 +2826 6.86400e+03 6.55600e+03 +2827 6.99200e+03 6.55600e+03 +2828 7.08800e+03 6.55600e+03 +2829 7.18400e+03 6.55600e+03 +2830 7.32800e+03 6.55600e+03 +2831 7.61600e+03 6.55600e+03 +2832 7.74400e+03 6.55600e+03 +2833 7.82400e+03 6.55600e+03 +2834 7.88800e+03 6.55600e+03 +2835 8.04800e+03 6.55600e+03 +2836 8.17600e+03 6.55600e+03 +2837 8.43200e+03 6.55600e+03 +2838 8.51200e+03 6.55600e+03 +2839 8.83200e+03 6.55600e+03 +2840 8.94400e+03 1.18800e+03 +2841 8.94400e+03 5.96200e+03 +2842 8.94400e+03 6.89700e+03 +2843 8.94400e+03 9.87800e+03 +2844 5.96800e+03 3.19000e+02 +2845 5.96800e+03 2.02400e+03 +2846 5.96800e+03 4.04800e+03 +2847 5.96800e+03 5.32400e+03 +2848 6.09600e+03 7.70000e+03 +2849 6.19200e+03 7.70000e+03 +2850 6.41600e+03 7.70000e+03 +2851 6.54400e+03 7.70000e+03 +2852 6.67200e+03 7.70000e+03 +2853 6.86400e+03 7.70000e+03 +2854 6.92800e+03 7.70000e+03 +2855 7.04000e+03 7.70000e+03 +2856 7.15200e+03 8.53600e+03 +2857 7.15200e+03 1.08020e+04 +2858 7.20400e+03 9.50400e+03 +2859 7.53600e+03 9.50400e+03 +2860 7.60000e+03 9.50400e+03 +2861 7.69600e+03 9.50400e+03 +2862 7.82400e+03 9.50400e+03 +2863 7.90400e+03 9.50400e+03 +2864 8.09600e+03 9.50400e+03 +2865 8.17600e+03 9.50400e+03 +2866 8.27200e+03 9.50400e+03 +2867 8.36800e+03 9.50400e+03 +2868 8.43200e+03 9.50400e+03 +2869 8.72000e+03 9.50400e+03 +2870 8.86400e+03 9.50400e+03 +2871 9.10400e+03 9.50400e+03 +2872 9.72800e+03 9.50400e+03 +2873 9.96800e+03 2.31000e+02 +2874 9.96800e+03 1.01200e+03 +2875 9.96800e+03 1.76000e+03 +2876 1.19520e+04 1.11650e+04 +2877 1.19720e+04 8.22800e+03 +2878 1.21920e+04 8.22800e+03 +2879 1.22720e+04 8.22800e+03 +2880 1.23840e+04 8.22800e+03 +2881 1.25280e+04 8.22800e+03 +2882 1.26560e+04 8.22800e+03 +2883 1.28000e+04 8.22800e+03 +2884 1.28800e+04 8.22800e+03 +2885 1.29440e+04 8.22800e+03 +2886 1.30880e+04 8.22800e+03 +2887 1.32640e+04 8.22800e+03 +2888 1.33920e+04 8.22800e+03 +2889 1.35200e+04 8.22800e+03 +2890 1.36320e+04 8.22800e+03 +2891 1.37440e+04 8.22800e+03 +2892 1.39680e+04 8.22800e+03 +2893 1.41920e+04 8.22800e+03 +2894 1.42720e+04 8.22800e+03 +2895 1.43840e+04 8.22800e+03 +2896 1.44480e+04 8.22800e+03 +2897 1.45120e+04 8.22800e+03 +2898 1.47040e+04 8.22800e+03 +2899 1.47840e+04 8.22800e+03 +2900 1.51200e+04 8.22800e+03 +2901 1.53920e+04 8.22800e+03 +2902 1.54720e+04 8.22800e+03 +2903 1.55360e+04 4.84000e+02 +2904 1.55360e+04 6.71000e+02 +2905 1.55360e+04 2.53000e+03 +2906 1.55360e+04 5.36800e+03 +2907 1.55360e+04 6.79800e+03 +2908 1.56000e+04 5.72000e+02 +2909 1.57280e+04 5.72000e+02 +2910 1.57920e+04 5.72000e+02 +2911 1.58880e+04 5.72000e+02 +2912 1.59840e+04 5.72000e+02 +2913 1.61280e+04 5.72000e+02 +2914 1.62720e+04 5.72000e+02 +2915 1.64000e+04 5.72000e+02 +2916 1.65600e+04 5.72000e+02 +2917 1.66560e+04 5.72000e+02 +2918 1.67520e+04 5.72000e+02 +2919 1.69120e+04 5.72000e+02 +2920 1.70400e+04 5.72000e+02 +2921 1.71840e+04 5.72000e+02 +2922 1.73920e+04 5.72000e+02 +2923 1.75040e+04 5.72000e+02 +2924 1.78240e+04 5.72000e+02 +2925 1.79680e+04 5.72000e+02 +2926 1.80320e+04 5.72000e+02 +2927 1.81280e+04 3.52000e+02 +2928 7.56800e+03 8.75600e+03 +2929 7.60000e+03 6.11600e+03 +2930 7.63200e+03 1.18800e+03 +2931 7.63200e+03 4.81800e+03 +2932 1.17280e+04 9.02000e+02 +2933 1.17280e+04 4.48800e+03 +2934 1.17280e+04 6.07200e+03 +2935 1.17280e+04 7.39200e+03 +2936 1.17440e+04 8.22800e+03 +2937 1.17600e+04 1.11650e+04 +2938 1.90240e+04 1.15280e+04 +2939 1.22720e+04 9.02000e+02 +2940 1.22720e+04 4.48800e+03 +2941 1.22720e+04 5.96200e+03 +2942 1.23840e+04 6.77600e+03 +2943 1.24960e+04 7.39200e+03 +2944 1.24960e+04 1.14290e+04 +2945 1.06560e+04 8.22800e+03 +2946 1.07360e+04 2.31000e+02 +2947 1.07360e+04 9.02000e+02 +2948 1.07360e+04 1.76000e+03 +2949 1.07360e+04 7.39200e+03 +2950 7.50400e+03 8.75600e+03 +2951 7.56800e+03 6.38000e+02 +2952 7.56800e+03 1.51800e+03 +2953 7.56800e+03 3.94900e+03 +2954 7.56800e+03 4.14700e+03 +2955 7.56800e+03 4.93900e+03 +2956 7.66400e+03 4.04800e+03 +2957 7.76000e+03 4.04800e+03 +2958 7.82400e+03 4.04800e+03 +2959 7.88800e+03 4.04800e+03 +2960 7.95200e+03 4.04800e+03 +2961 8.04800e+03 4.04800e+03 +2962 8.20800e+03 4.04800e+03 +2963 8.33600e+03 4.04800e+03 +2964 8.43200e+03 4.04800e+03 +2965 8.49600e+03 4.04800e+03 +2966 8.68800e+03 4.04800e+03 +2967 8.76300e+03 4.04800e+03 +2968 8.78400e+03 1.18800e+03 +2969 8.78400e+03 3.94900e+03 +2970 8.78400e+03 8.86600e+03 +2971 7.88800e+03 9.06400e+03 +2972 7.92000e+03 1.18800e+03 +2973 7.92000e+03 4.81800e+03 +2974 7.92000e+03 8.76700e+03 +2975 7.94000e+03 4.26800e+03 +2976 8.04800e+03 4.26800e+03 +2977 8.20800e+03 4.26800e+03 +2978 8.33600e+03 4.26800e+03 +2979 8.43200e+03 4.26800e+03 +2980 8.49600e+03 4.26800e+03 +2981 8.68800e+03 4.26800e+03 +2982 8.75200e+03 4.26800e+03 +2983 8.84800e+03 4.26800e+03 +2984 8.91200e+03 4.26800e+03 +2985 8.99200e+03 4.26800e+03 +2986 9.44000e+03 4.26800e+03 +2987 9.55200e+03 4.26800e+03 +2988 9.68000e+03 4.26800e+03 +2989 9.82400e+03 4.26800e+03 +2990 9.93600e+03 4.26800e+03 +2991 1.00000e+04 4.26800e+03 +2992 1.02240e+04 4.26800e+03 +2993 1.02880e+04 4.26800e+03 +2994 1.03840e+04 4.26800e+03 +2995 1.05230e+04 4.26800e+03 +2996 1.05440e+04 2.31000e+02 +2997 1.05440e+04 1.01200e+03 +2998 1.05440e+04 1.76000e+03 +2999 1.05440e+04 7.39200e+03 +3000 1.06560e+04 1.11320e+04 +3001 1.07680e+04 1.11320e+04 +3002 1.09280e+04 1.11320e+04 +3003 1.09920e+04 1.15500e+04 +3004 1.09920e+04 1.13080e+04 +3005 8.20800e+03 7.01800e+03 +3006 8.20800e+03 8.75600e+03 +3007 8.33600e+03 4.70800e+03 +3008 8.43200e+03 4.70800e+03 +3009 8.49600e+03 4.70800e+03 +3010 8.75200e+03 4.70800e+03 +3011 8.84800e+03 4.70800e+03 +3012 8.99200e+03 4.70800e+03 +3013 9.44000e+03 4.70800e+03 +3014 9.55200e+03 4.70800e+03 +3015 9.68000e+03 4.70800e+03 +3016 9.82400e+03 4.70800e+03 +3017 9.93600e+03 4.70800e+03 +3018 1.00000e+04 4.70800e+03 +3019 1.02240e+04 4.70800e+03 +3020 1.02880e+04 4.70800e+03 +3021 1.03840e+04 4.70800e+03 +3022 1.05120e+04 4.70800e+03 +3023 1.05870e+04 4.70800e+03 +3024 1.06080e+04 2.31000e+02 +3025 1.06080e+04 9.02000e+02 +3026 1.06080e+04 1.76000e+03 +3027 1.19840e+04 9.02000e+02 +3028 1.19840e+04 4.48800e+03 +3029 1.19840e+04 6.07200e+03 +3030 1.20000e+04 6.77600e+03 +3031 1.20160e+04 7.39200e+03 +3032 1.20160e+04 1.11650e+04 +3033 8.56000e+03 5.96200e+03 +3034 8.56000e+03 7.01800e+03 +3035 8.56000e+03 8.86600e+03 +3036 8.62400e+03 2.28800e+03 +3037 8.75200e+03 2.28800e+03 +3038 8.84800e+03 2.28800e+03 +3039 8.97600e+03 2.28800e+03 +3040 9.04000e+03 2.28800e+03 +3041 9.26400e+03 2.28800e+03 +3042 9.36000e+03 6.71000e+02 +3043 9.36000e+03 1.76000e+03 +3044 1.13760e+04 1.13850e+04 +3045 1.14400e+04 2.31000e+02 +3046 1.14400e+04 9.02000e+02 +3047 1.14400e+04 4.48800e+03 +3048 1.14400e+04 6.07200e+03 +3049 1.14400e+04 7.39200e+03 +3050 1.02560e+04 8.22800e+03 +3051 1.03520e+04 2.31000e+02 +3052 1.03520e+04 1.01200e+03 +3053 1.03520e+04 1.76000e+03 +3054 1.03520e+04 7.39200e+03 +3055 1.14720e+04 7.39200e+03 +3056 1.14720e+04 1.12750e+04 +3057 1.14920e+04 6.33600e+03 +3058 1.15680e+04 2.31000e+02 +3059 1.15680e+04 9.02000e+02 +3060 1.15680e+04 4.48800e+03 +3061 1.15680e+04 6.08300e+03 +3062 1.11840e+04 1.13850e+04 +3063 1.12040e+04 9.06400e+03 +3064 1.13440e+04 9.06400e+03 +3065 1.15150e+04 9.06400e+03 +3066 1.15360e+04 2.31000e+02 +3067 1.15360e+04 9.02000e+02 +3068 1.15360e+04 4.48800e+03 +3069 1.15360e+04 5.96200e+03 +3070 1.15360e+04 7.39200e+03 +3071 6.56000e+02 3.57500e+03 +3072 6.56000e+02 9.92200e+03 +3073 1.58240e+04 5.36800e+03 +3074 1.58240e+04 6.79800e+03 +3075 1.58240e+04 8.42600e+03 +3076 1.58240e+04 9.87800e+03 +3077 1.58240e+04 1.06260e+04 +3078 1.58240e+04 1.14290e+04 +3079 1.58880e+04 4.48800e+03 +3080 1.59840e+04 4.48800e+03 +3081 1.61280e+04 4.48800e+03 +3082 1.62830e+04 4.48800e+03 +3083 1.63040e+04 2.22200e+03 +3084 1.63040e+04 3.86100e+03 +3085 6.60800e+03 4.29000e+02 +3086 6.60800e+03 1.51800e+03 +3087 6.60800e+03 2.57400e+03 +3088 6.60800e+03 4.04800e+03 +3089 6.66000e+03 5.06000e+03 +3090 6.78400e+03 5.06000e+03 +3091 6.89600e+03 7.12800e+03 +3092 6.89600e+03 8.64600e+03 +3093 6.89600e+03 1.08020e+04 +3094 1.20480e+04 7.39200e+03 +3095 1.20480e+04 1.11650e+04 +3096 1.21870e+04 6.77600e+03 +3097 1.22080e+04 9.02000e+02 +3098 1.22080e+04 4.48800e+03 +3099 1.22080e+04 5.96200e+03 +3100 1.55000e+02 1.11980e+04 +3101 8.91200e+03 5.96200e+03 +3102 8.91200e+03 7.01800e+03 +3103 8.91200e+03 9.87800e+03 +3104 8.99200e+03 4.48800e+03 +3105 9.44000e+03 4.48800e+03 +3106 9.55200e+03 4.48800e+03 +3107 9.68000e+03 4.48800e+03 +3108 9.82400e+03 4.48800e+03 +3109 9.93600e+03 4.48800e+03 +3110 1.00000e+04 4.48800e+03 +3111 1.02240e+04 4.48800e+03 +3112 1.02880e+04 4.48800e+03 +3113 1.03840e+04 4.48800e+03 +3114 1.05120e+04 4.48800e+03 +3115 1.05760e+04 4.48800e+03 +3116 1.06400e+04 4.48800e+03 +3117 1.07040e+04 4.48800e+03 +3118 1.08000e+04 4.48800e+03 +3119 1.08640e+04 2.31000e+02 +3120 1.08640e+04 9.02000e+02 +3121 1.08640e+04 1.76000e+03 +3122 1.08640e+04 4.38900e+03 +3123 1.08640e+04 4.58700e+03 +3124 1.09280e+04 5.89600e+03 +3125 1.10670e+04 5.89600e+03 +3126 1.10880e+04 7.39200e+03 +3127 1.10880e+04 1.13850e+04 +3128 9.26400e+03 6.90800e+03 +3129 9.26400e+03 9.87800e+03 +3130 9.44000e+03 3.16800e+03 +3131 9.52000e+03 2.31000e+02 +3132 9.52000e+03 1.01200e+03 +3133 9.52000e+03 1.76000e+03 +3134 1.22400e+04 9.02000e+02 +3135 1.22400e+04 4.48800e+03 +3136 1.22400e+04 5.96200e+03 +3137 1.22400e+04 7.39200e+03 +3138 1.22400e+04 1.11650e+04 +3139 7.31200e+03 8.75600e+03 +3140 7.31200e+03 1.08020e+04 +3141 7.53600e+03 6.38000e+02 +3142 7.53600e+03 1.51800e+03 +3143 7.53600e+03 4.04800e+03 +3144 7.53600e+03 4.81800e+03 +3145 3.28000e+03 3.11300e+03 +3146 3.28000e+03 6.86400e+03 +3147 3.30000e+03 9.37200e+03 +3148 3.50400e+03 9.37200e+03 +3149 3.56800e+03 9.37200e+03 +3150 3.63200e+03 1.01420e+04 +3151 1.13760e+04 2.31000e+02 +3152 1.13760e+04 9.02000e+02 +3153 1.13760e+04 4.48800e+03 +3154 1.13760e+04 6.07200e+03 +3155 1.13760e+04 7.39200e+03 +3156 1.15040e+04 8.22800e+03 +3157 1.15680e+04 1.12750e+04 +3158 1.12800e+04 1.13850e+04 +3159 1.13160e+04 1.04720e+04 +3160 1.14400e+04 1.04720e+04 +3161 1.15200e+04 1.04720e+04 +3162 1.16000e+04 1.04720e+04 +3163 1.17120e+04 1.04720e+04 +3164 1.17920e+04 1.04720e+04 +3165 1.19840e+04 1.04720e+04 +3166 1.20800e+04 1.04720e+04 +3167 1.22080e+04 1.04720e+04 +3168 1.23840e+04 1.04720e+04 +3169 1.25280e+04 1.04720e+04 +3170 1.26560e+04 1.04720e+04 +3171 1.28160e+04 1.04720e+04 +3172 1.29440e+04 1.04720e+04 +3173 1.30880e+04 1.04720e+04 +3174 1.32320e+04 1.04720e+04 +3175 1.33920e+04 1.04720e+04 +3176 1.35360e+04 1.04720e+04 +3177 1.36960e+04 1.04720e+04 +3178 1.39680e+04 1.04720e+04 +3179 1.41600e+04 2.53000e+03 +3180 1.41600e+04 5.25800e+03 +3181 1.41600e+04 7.17200e+03 +3182 1.41600e+04 8.86600e+03 +3183 1.41600e+04 9.87800e+03 +3184 3.15200e+03 3.11300e+03 +3185 3.15200e+03 6.86400e+03 +3186 3.18800e+03 7.92000e+03 +3187 3.31200e+03 7.92000e+03 +3188 3.40800e+03 1.01530e+04 +3189 3.40800e+03 1.05710e+04 +3190 3.50400e+03 1.04720e+04 +3191 3.58400e+03 1.04720e+04 +3192 3.71200e+03 1.04720e+04 +3193 3.88800e+03 1.04720e+04 +3194 4.04800e+03 1.04720e+04 +3195 4.12800e+03 1.04720e+04 +3196 4.27200e+03 1.04720e+04 +3197 4.40000e+03 1.04720e+04 +3198 4.52800e+03 1.04720e+04 +3199 4.62400e+03 1.04720e+04 +3200 4.68800e+03 1.04720e+04 +3201 4.78400e+03 1.04720e+04 +3202 4.95500e+03 1.04720e+04 +3203 4.97600e+03 1.03730e+04 +3204 4.99200e+03 9.81200e+03 +3205 4.97600e+03 1.14950e+04 +3206 5.00800e+03 2.17800e+03 +3207 5.00800e+03 4.04800e+03 +3208 5.00800e+03 6.40200e+03 +3209 5.28000e+02 3.57500e+03 +3210 5.28000e+02 9.81200e+03 +3211 1.60160e+04 2.22200e+03 +3212 1.60160e+04 3.74000e+03 +3213 1.60160e+04 5.36800e+03 +3214 1.60160e+04 6.79800e+03 +3215 1.60160e+04 7.76600e+03 +3216 1.60160e+04 8.62400e+03 +3217 1.60160e+04 9.83400e+03 +3218 1.60680e+04 9.92200e+03 +3219 1.62080e+04 9.92200e+03 +3220 1.64320e+04 9.92200e+03 +3221 1.64960e+04 9.92200e+03 +3222 1.65920e+04 9.92200e+03 +3223 1.66880e+04 9.92200e+03 +3224 1.67840e+04 9.92200e+03 +3225 1.69120e+04 9.92200e+03 +3226 1.70400e+04 9.92200e+03 +3227 1.71360e+04 9.92200e+03 +3228 1.72800e+04 9.92200e+03 +3229 1.73600e+04 1.06700e+04 +3230 1.73600e+04 1.15280e+04 +3231 5.87200e+03 8.38200e+03 +3232 5.87200e+03 1.08020e+04 +3233 5.88800e+03 5.06000e+03 +3234 5.90400e+03 2.09000e+02 +3235 5.90400e+03 2.02400e+03 +3236 5.90400e+03 4.04800e+03 +3237 9.76000e+02 1.10550e+04 +3238 1.10400e+03 1.09120e+04 +3239 1.23200e+03 1.09120e+04 +3240 1.58400e+03 1.09120e+04 +3241 1.71200e+03 1.09120e+04 +3242 1.77600e+03 1.09120e+04 +3243 1.90400e+03 1.09120e+04 +3244 2.06400e+03 1.09120e+04 +3245 2.24000e+03 1.09120e+04 +3246 2.46400e+03 1.09120e+04 +3247 2.73600e+03 1.09120e+04 +3248 3.01900e+03 1.09120e+04 +3249 3.05600e+03 3.11300e+03 +3250 3.05600e+03 6.86400e+03 +3251 3.05600e+03 1.01530e+04 +3252 3.16800e+03 1.09120e+04 +3253 3.34400e+03 1.09120e+04 +3254 3.50400e+03 1.09120e+04 +3255 3.58400e+03 1.09120e+04 +3256 3.71200e+03 1.09120e+04 +3257 3.88800e+03 1.09120e+04 +3258 4.04800e+03 1.09120e+04 +3259 4.12800e+03 1.09120e+04 +3260 4.27200e+03 1.09120e+04 +3261 4.40000e+03 1.09120e+04 +3262 4.46400e+03 1.09120e+04 +3263 4.52800e+03 1.09120e+04 +3264 4.62400e+03 1.09120e+04 +3265 4.68800e+03 1.14950e+04 +3266 1.34560e+04 8.53600e+03 +3267 1.34560e+04 9.17400e+03 +3268 1.34560e+04 1.14290e+04 +3269 1.35200e+04 7.78800e+03 +3270 1.36320e+04 7.78800e+03 +3271 1.37600e+04 7.78800e+03 +3272 1.39680e+04 7.78800e+03 +3273 1.41920e+04 7.78800e+03 +3274 1.42720e+04 7.78800e+03 +3275 1.43840e+04 7.78800e+03 +3276 1.44480e+04 2.53000e+03 +3277 1.44480e+04 5.36800e+03 +3278 1.44480e+04 6.79800e+03 +3279 1.45120e+04 7.78800e+03 +3280 1.47040e+04 7.78800e+03 +3281 1.48160e+04 7.78800e+03 +3282 1.49280e+04 7.88700e+03 +3283 1.49280e+04 8.64600e+03 +3284 1.49280e+04 9.87800e+03 +3285 1.49280e+04 1.14290e+04 +3286 1.60480e+04 2.22200e+03 +3287 1.60480e+04 3.74000e+03 +3288 1.60480e+04 5.36800e+03 +3289 1.60480e+04 6.79800e+03 +3290 1.60480e+04 7.76600e+03 +3291 1.61280e+04 8.40400e+03 +3292 1.63040e+04 8.40400e+03 +3293 1.64320e+04 8.40400e+03 +3294 1.65920e+04 8.40400e+03 +3295 1.66880e+04 8.40400e+03 +3296 1.67520e+04 8.40400e+03 +3297 1.68160e+04 8.40400e+03 +3298 1.69120e+04 8.40400e+03 +3299 1.70080e+04 1.05600e+04 +3300 1.70080e+04 1.15280e+04 +3301 5.60000e+02 9.80100e+03 +3302 7.52000e+02 8.40400e+03 +3303 9.12000e+02 8.40400e+03 +3304 9.76000e+02 8.40400e+03 +3305 1.10400e+03 8.40400e+03 +3306 1.23200e+03 8.40400e+03 +3307 1.32800e+03 8.40400e+03 +3308 1.53600e+03 8.40400e+03 +3309 1.61600e+03 8.40400e+03 +3310 1.69600e+03 8.40400e+03 +3311 1.77600e+03 8.40400e+03 +3312 1.87200e+03 8.40400e+03 +3313 1.93600e+03 8.40400e+03 +3314 2.11200e+03 8.40400e+03 +3315 2.19200e+03 8.40400e+03 +3316 2.28800e+03 8.40400e+03 +3317 2.46400e+03 8.40400e+03 +3318 2.63500e+03 8.40400e+03 +3319 2.70400e+03 3.11300e+03 +3320 2.70400e+03 6.86400e+03 +3321 2.80400e+03 8.14000e+03 +3322 2.96000e+03 8.14000e+03 +3323 3.02400e+03 8.14000e+03 +3324 3.16800e+03 8.14000e+03 +3325 3.31200e+03 8.14000e+03 +3326 3.50400e+03 8.14000e+03 +3327 3.63200e+03 8.14000e+03 +3328 3.69600e+03 8.14000e+03 +3329 3.82400e+03 8.14000e+03 +3330 3.95200e+03 8.14000e+03 +3331 4.09600e+03 8.14000e+03 +3332 4.27200e+03 8.14000e+03 +3333 4.33600e+03 8.14000e+03 +3334 2.70400e+03 8.25000e+03 +3335 4.43200e+03 1.14950e+04 +3336 1.40320e+04 2.53000e+03 +3337 1.40320e+04 5.25800e+03 +3338 1.40320e+04 7.29300e+03 +3339 1.40680e+04 7.56800e+03 +3340 1.41920e+04 7.56800e+03 +3341 1.42720e+04 7.56800e+03 +3342 1.43840e+04 7.56800e+03 +3343 1.45120e+04 7.56800e+03 +3344 1.47040e+04 7.56800e+03 +3345 1.48160e+04 7.56800e+03 +3346 1.49280e+04 7.56800e+03 +3347 1.51310e+04 7.56800e+03 +3348 1.52480e+04 7.77700e+03 +3349 1.52480e+04 8.64600e+03 +3350 1.52480e+04 9.87800e+03 +3351 1.52480e+04 1.06260e+04 +3352 1.52480e+04 1.14290e+04 +3353 1.35840e+04 2.53000e+03 +3354 1.35840e+04 3.94900e+03 +3355 1.36200e+04 4.04800e+03 +3356 1.38720e+04 4.04800e+03 +3357 1.40960e+04 4.04800e+03 +3358 1.42240e+04 4.04800e+03 +3359 1.44000e+04 4.04800e+03 +3360 1.45120e+04 4.04800e+03 +3361 1.47360e+04 4.04800e+03 +3362 1.48000e+04 4.04800e+03 +3363 1.48960e+04 4.25700e+03 +3364 1.48960e+04 5.47800e+03 +3365 1.48960e+04 6.79800e+03 +3366 1.48960e+04 8.64600e+03 +3367 1.48960e+04 9.87800e+03 +3368 1.48960e+04 1.14290e+04 +3369 1.46080e+04 2.53000e+03 +3370 1.46080e+04 5.36800e+03 +3371 1.46080e+04 6.79800e+03 +3372 1.46080e+04 8.64600e+03 +3373 1.46080e+04 9.87800e+03 +3374 1.46080e+04 1.15390e+04 +3375 1.33920e+04 1.60600e+03 +3376 1.33920e+04 2.79400e+03 +3377 1.33920e+04 3.93800e+03 +3378 1.33920e+04 4.92800e+03 +3379 1.34560e+04 6.24800e+03 +3380 1.35200e+04 6.24800e+03 +3381 1.36320e+04 6.24800e+03 +3382 1.37600e+04 6.24800e+03 +3383 1.39200e+04 6.24800e+03 +3384 1.40800e+04 6.24800e+03 +3385 1.41920e+04 6.24800e+03 +3386 1.42560e+04 6.24800e+03 +3387 1.44000e+04 6.24800e+03 +3388 1.45120e+04 6.24800e+03 +3389 1.47040e+04 6.24800e+03 +3390 1.48160e+04 6.24800e+03 +3391 1.49280e+04 6.24800e+03 +3392 1.51360e+04 6.24800e+03 +3393 1.53280e+04 6.24800e+03 +3394 1.54400e+04 6.24800e+03 +3395 1.56000e+04 6.24800e+03 +3396 1.57120e+04 6.24800e+03 +3397 1.57920e+04 6.24800e+03 +3398 1.58880e+04 6.24800e+03 +3399 1.59840e+04 6.24800e+03 +3400 1.61280e+04 6.24800e+03 +3401 1.62880e+04 6.24800e+03 +3402 1.65440e+04 6.24800e+03 +3403 1.66560e+04 6.67700e+03 +3404 1.66560e+04 7.87600e+03 +3405 1.66560e+04 1.08900e+04 +3406 1.66720e+04 6.24800e+03 +3407 1.66880e+04 1.01200e+03 +3408 1.66880e+04 2.22200e+03 +3409 1.66880e+04 3.85000e+03 +3410 1.66880e+04 5.47800e+03 +3411 1.27520e+04 1.60600e+03 +3412 1.27520e+04 2.43100e+03 +3413 1.28160e+04 2.64000e+03 +3414 1.29440e+04 2.64000e+03 +3415 1.31200e+04 2.64000e+03 +3416 1.33390e+04 2.64000e+03 +3417 1.33600e+04 3.00300e+03 +3418 1.33600e+04 3.93800e+03 +3419 1.33600e+04 4.92800e+03 +3420 1.33600e+04 6.40200e+03 +3421 1.33600e+04 7.39200e+03 +3422 1.33600e+04 8.53600e+03 +3423 1.33600e+04 9.17400e+03 +3424 1.33600e+04 1.14290e+04 +3425 1.62080e+04 2.22200e+03 +3426 1.62080e+04 3.74000e+03 +3427 1.62080e+04 5.36800e+03 +3428 1.62080e+04 6.79800e+03 +3429 1.62080e+04 7.76600e+03 +3430 1.62830e+04 8.62400e+03 +3431 1.63040e+04 1.04610e+04 +3432 1.63040e+04 1.14290e+04 +3433 1.39200e+03 8.77800e+03 +3434 1.39200e+03 1.00320e+04 +3435 1.45600e+03 6.33600e+03 +3436 1.55200e+03 6.33600e+03 +3437 1.64800e+03 6.33600e+03 +3438 1.76000e+03 6.33600e+03 +3439 1.87200e+03 6.33600e+03 +3440 2.00000e+03 6.33600e+03 +3441 2.11200e+03 6.33600e+03 +3442 2.19200e+03 6.33600e+03 +3443 2.28800e+03 6.33600e+03 +3444 2.48000e+03 6.33600e+03 +3445 2.60800e+03 6.33600e+03 +3446 2.73600e+03 6.33600e+03 +3447 2.88000e+03 6.33600e+03 +3448 3.02400e+03 6.33600e+03 +3449 3.20000e+03 6.33600e+03 +3450 3.31200e+03 6.33600e+03 +3451 3.40800e+03 3.05800e+03 +3452 3.40800e+03 6.16000e+03 +3453 3.80800e+03 6.33600e+03 +3454 3.88800e+03 6.33600e+03 +3455 3.95200e+03 6.33600e+03 +3456 4.09600e+03 6.33600e+03 +3457 4.17600e+03 6.33600e+03 +3458 4.25600e+03 6.33600e+03 +3459 4.43200e+03 6.33600e+03 +3460 4.49600e+03 6.33600e+03 +3461 4.56000e+03 7.81000e+03 +3462 4.56000e+03 8.86600e+03 +3463 4.56000e+03 1.14950e+04 +3464 3.69600e+03 3.11300e+03 +3465 3.69600e+03 7.02900e+03 +3466 3.80800e+03 7.26000e+03 +3467 3.88800e+03 7.26000e+03 +3468 3.95200e+03 7.26000e+03 +3469 4.09600e+03 7.26000e+03 +3470 4.17600e+03 7.26000e+03 +3471 4.25600e+03 7.26000e+03 +3472 4.33600e+03 7.26000e+03 +3473 4.43200e+03 7.26000e+03 +3474 4.49600e+03 7.26000e+03 +3475 4.64000e+03 7.26000e+03 +3476 4.76800e+03 7.26000e+03 +3477 4.84800e+03 7.26000e+03 +3478 4.91200e+03 7.26000e+03 +3479 5.04000e+03 1.14950e+04 +3480 4.91200e+03 1.14950e+04 +3481 5.10400e+03 2.17800e+03 +3482 5.10400e+03 4.04800e+03 +3483 5.10400e+03 6.40200e+03 +3484 5.10400e+03 7.31500e+03 +3485 1.43520e+04 2.53000e+03 +3486 1.43520e+04 5.36800e+03 +3487 1.43520e+04 6.90800e+03 +3488 1.43520e+04 8.86600e+03 +3489 1.43520e+04 9.87800e+03 +3490 1.43520e+04 1.15390e+04 +3491 5.32800e+03 6.39100e+03 +3492 5.32800e+03 7.19400e+03 +3493 5.32800e+03 1.05820e+04 +3494 5.39200e+03 2.17800e+03 +3495 5.39200e+03 4.04800e+03 +3496 5.74400e+03 1.08020e+04 +3497 5.76000e+03 8.62400e+03 +3498 5.77600e+03 2.02400e+03 +3499 5.77600e+03 4.04800e+03 +3500 5.77600e+03 8.39300e+03 +3501 1.48800e+03 3.11300e+03 +3502 1.48800e+03 6.90800e+03 +3503 1.48800e+03 8.77800e+03 +3504 1.48800e+03 1.00320e+04 +3505 4.01600e+03 2.95900e+03 +3506 4.01600e+03 6.90800e+03 +3507 4.12800e+03 9.15200e+03 +3508 4.27200e+03 9.15200e+03 +3509 7.98400e+03 1.18800e+03 +3510 7.98400e+03 4.81800e+03 +3511 7.98400e+03 8.75600e+03 +3512 6.16000e+03 4.29000e+02 +3513 6.16000e+03 2.02400e+03 +3514 6.16000e+03 4.04800e+03 +3515 6.16000e+03 8.38200e+03 +3516 6.16000e+03 1.08020e+04 +3517 6.16000e+03 1.14950e+04 +3518 5.26400e+03 2.17800e+03 +3519 5.26400e+03 4.04800e+03 +3520 5.26400e+03 6.40200e+03 +3521 5.26400e+03 7.19400e+03 +3522 5.55200e+03 9.81200e+03 +3523 5.63200e+03 9.81200e+03 +3524 5.80800e+03 9.81200e+03 +3525 5.96800e+03 9.81200e+03 +3526 6.03200e+03 9.81200e+03 +3527 6.11200e+03 9.81200e+03 +3528 6.19200e+03 9.81200e+03 +3529 6.35200e+03 9.81200e+03 +3530 6.44800e+03 9.81200e+03 +3531 6.67200e+03 9.81200e+03 +3532 6.84800e+03 9.81200e+03 +3533 6.92800e+03 9.81200e+03 +3534 7.02400e+03 9.81200e+03 +3535 7.21600e+03 9.81200e+03 +3536 7.53600e+03 9.81200e+03 +3537 7.60000e+03 9.81200e+03 +3538 7.69600e+03 9.81200e+03 +3539 7.82400e+03 9.81200e+03 +3540 7.90400e+03 9.81200e+03 +3541 8.09600e+03 9.81200e+03 +3542 8.17600e+03 9.81200e+03 +3543 8.27200e+03 9.81200e+03 +3544 8.36800e+03 9.81200e+03 +3545 8.43200e+03 9.81200e+03 +3546 8.72000e+03 9.81200e+03 +3547 8.85900e+03 9.81200e+03 +3548 8.88000e+03 9.91100e+03 +3549 9.20000e+03 7.01800e+03 +3550 9.20000e+03 8.07400e+03 +3551 9.20000e+03 9.87800e+03 +3552 9.29600e+03 6.71000e+02 +3553 9.29600e+03 1.76000e+03 +3554 9.29600e+03 2.83800e+03 +3555 6.51200e+03 4.29000e+02 +3556 6.51200e+03 2.02400e+03 +3557 6.51200e+03 4.04800e+03 +3558 6.51200e+03 8.65700e+03 +3559 6.52800e+03 8.84400e+03 +3560 6.54400e+03 9.43800e+03 +3561 6.54400e+03 1.14950e+04 +3562 9.90400e+03 2.31000e+02 +3563 9.90400e+03 1.01200e+03 +3564 9.90400e+03 1.76000e+03 +3565 6.92800e+03 6.38000e+02 +3566 6.92800e+03 1.51800e+03 +3567 6.92800e+03 2.57400e+03 +3568 6.92800e+03 4.04800e+03 +3569 6.92800e+03 7.13900e+03 +3570 6.94400e+03 7.26000e+03 +3571 6.96000e+03 8.64600e+03 +3572 6.96000e+03 1.08020e+04 +3573 1.08960e+04 1.03620e+04 +3574 1.08960e+04 1.14950e+04 +3575 1.09160e+04 9.50400e+03 +3576 1.10400e+04 9.50400e+03 +3577 1.12160e+04 9.50400e+03 +3578 1.12800e+04 2.31000e+02 +3579 1.12800e+04 9.02000e+02 +3580 1.12800e+04 4.48800e+03 +3581 1.12800e+04 7.39200e+03 +3582 7.40800e+03 1.09120e+04 +3583 7.44000e+03 6.38000e+02 +3584 7.44000e+03 1.51800e+03 +3585 7.44000e+03 4.04800e+03 +3586 7.44000e+03 4.92800e+03 +3587 7.44000e+03 8.75600e+03 +3588 1.25920e+04 4.70800e+03 +3589 1.25920e+04 6.07200e+03 +3590 1.25920e+04 7.39200e+03 +3591 1.25920e+04 1.14290e+04 +3592 1.26080e+04 3.60800e+03 +3593 1.26240e+04 1.60600e+03 +3594 1.26240e+04 2.57400e+03 +3595 1.26880e+04 3.60800e+03 +3596 1.27840e+04 3.60800e+03 +3597 1.29280e+04 3.60800e+03 +3598 1.31200e+04 3.60800e+03 +3599 1.33280e+04 3.60800e+03 +3600 1.34560e+04 3.60800e+03 +3601 1.35200e+04 3.60800e+03 +3602 1.36320e+04 3.60800e+03 +3603 1.38720e+04 3.60800e+03 +3604 1.40960e+04 3.60800e+03 +3605 1.42240e+04 3.60800e+03 +3606 1.44000e+04 3.60800e+03 +3607 1.45120e+04 3.60800e+03 +3608 1.47360e+04 3.60800e+03 +3609 1.48000e+04 3.60800e+03 +3610 1.49120e+04 3.60800e+03 +3611 1.51200e+04 3.60800e+03 +3612 1.53280e+04 3.60800e+03 +3613 1.54080e+04 3.60800e+03 +3614 1.54720e+04 3.60800e+03 +3615 1.56000e+04 3.60800e+03 +3616 1.57120e+04 3.60800e+03 +3617 1.57920e+04 3.60800e+03 +3618 1.58990e+04 3.60800e+03 +3619 1.59200e+04 3.92700e+03 +3620 1.59200e+04 5.36800e+03 +3621 1.59200e+04 6.79800e+03 +3622 1.59200e+04 7.76600e+03 +3623 1.59200e+04 8.62400e+03 +3624 1.59200e+04 9.87800e+03 +3625 1.59200e+04 1.06260e+04 +3626 1.59200e+04 1.14290e+04 +3627 1.23360e+04 7.39200e+03 +3628 1.23360e+04 1.11650e+04 +3629 1.23520e+04 6.11600e+03 +3630 1.23680e+04 9.02000e+02 +3631 1.23680e+04 1.60600e+03 +3632 1.23680e+04 4.48800e+03 +3633 1.23680e+04 5.97300e+03 +3634 1.76160e+04 6.57800e+03 +3635 1.76160e+04 7.76600e+03 +3636 1.76160e+04 9.60300e+03 +3637 1.76160e+04 1.06700e+04 +3638 1.78350e+04 5.50000e+03 +3639 1.78720e+04 2.31000e+02 +3640 1.78720e+04 1.62800e+03 +3641 1.78720e+04 4.21300e+03 +3642 1.16320e+04 9.02000e+02 +3643 1.16320e+04 4.48800e+03 +3644 1.16320e+04 6.08300e+03 +3645 1.16480e+04 6.33600e+03 +3646 1.16640e+04 7.39200e+03 +3647 1.16640e+04 1.12750e+04 +3648 1.44800e+04 2.53000e+03 +3649 1.44800e+04 5.36800e+03 +3650 1.44800e+04 6.79800e+03 +3651 1.44800e+04 8.86600e+03 +3652 1.44800e+04 9.87800e+03 +3653 1.44800e+04 1.15390e+04 +3654 1.76480e+04 2.31000e+02 +3655 1.76480e+04 1.78200e+03 +3656 1.76480e+04 4.24600e+03 +3657 1.76480e+04 6.57800e+03 +3658 1.76480e+04 7.76600e+03 +3659 1.76480e+04 9.60300e+03 +3660 1.76480e+04 1.06700e+04 +3661 6.24000e+02 3.57500e+03 +3662 6.24000e+02 9.92200e+03 +3663 1.24000e+04 9.02000e+02 +3664 1.24000e+04 1.60600e+03 +3665 1.24000e+04 4.48800e+03 +3666 1.24000e+04 5.97300e+03 +3667 1.24160e+04 6.11600e+03 +3668 1.24320e+04 7.39200e+03 +3669 1.24320e+04 1.14290e+04 +3670 1.20800e+04 9.02000e+02 +3671 1.20800e+04 4.48800e+03 +3672 1.20800e+04 5.96200e+03 +3673 1.20800e+04 7.39200e+03 +3674 1.20960e+04 9.50400e+03 +3675 1.21120e+04 1.11650e+04 +3676 1.77760e+04 2.31000e+02 +3677 1.77760e+04 1.62800e+03 +3678 1.77760e+04 4.09200e+03 +3679 1.77760e+04 6.20400e+03 +3680 1.77760e+04 7.76600e+03 +3681 1.77760e+04 8.73400e+03 +3682 1.77760e+04 9.60300e+03 +3683 1.77760e+04 1.06700e+04 +3684 1.24640e+04 9.02000e+02 +3685 1.24640e+04 1.60600e+03 +3686 1.25160e+04 4.26800e+03 +3687 1.26880e+04 4.26800e+03 +3688 1.28000e+04 4.26800e+03 +3689 1.29120e+04 4.26800e+03 +3690 1.31200e+04 4.26800e+03 +3691 1.33280e+04 4.26800e+03 +3692 1.34560e+04 4.26800e+03 +3693 1.35200e+04 4.26800e+03 +3694 1.36160e+04 4.26800e+03 +3695 1.38720e+04 4.26800e+03 +3696 1.40910e+04 4.26800e+03 +3697 1.41280e+04 5.25800e+03 +3698 1.41280e+04 7.17200e+03 +3699 1.41280e+04 8.86600e+03 +3700 1.41280e+04 9.87800e+03 +3701 1.41280e+04 1.15390e+04 +3702 1.77440e+04 2.31000e+02 +3703 1.77440e+04 1.74900e+03 +3704 1.78240e+04 2.68400e+03 +3705 1.79790e+04 2.68400e+03 +3706 1.80000e+04 4.67500e+03 +3707 1.80000e+04 7.76600e+03 +3708 1.80000e+04 1.06700e+04 +3709 1.66240e+04 1.01200e+03 +3710 1.66240e+04 2.22200e+03 +3711 1.66240e+04 3.85000e+03 +3712 1.66240e+04 5.47800e+03 +3713 1.66240e+04 6.79800e+03 +3714 1.66240e+04 7.87600e+03 +3715 1.66240e+04 1.08900e+04 +3716 1.32320e+04 1.60600e+03 +3717 1.32320e+04 2.31000e+03 +3718 1.32320e+04 3.12400e+03 +3719 1.32320e+04 3.93800e+03 +3720 1.32320e+04 4.92800e+03 +3721 1.32320e+04 7.28200e+03 +3722 1.32320e+04 8.53600e+03 +3723 1.32320e+04 9.18500e+03 +3724 1.32480e+04 9.28400e+03 +3725 1.32640e+04 1.14290e+04 +3726 1.01920e+04 2.31000e+02 +3727 1.01920e+04 1.01200e+03 +3728 1.01920e+04 1.76000e+03 +3729 1.84160e+04 1.06700e+04 +3730 1.85000e+04 9.43800e+03 +3731 1.86560e+04 9.43800e+03 +3732 1.87840e+04 9.43800e+03 +3733 1.89280e+04 9.43800e+03 +3734 1.90240e+04 9.43800e+03 +3735 9.12000e+02 3.41000e+03 +3736 9.12000e+02 6.86400e+03 +3737 9.28000e+02 7.04000e+03 +3738 9.44000e+02 9.92200e+03 +3739 1.43200e+04 2.53000e+03 +3740 1.43200e+04 5.36800e+03 +3741 1.43200e+04 6.90800e+03 +3742 1.43200e+04 8.86600e+03 +3743 1.43200e+04 9.87800e+03 +3744 1.43200e+04 1.15390e+04 +3745 7.69600e+03 1.18800e+03 +3746 7.69600e+03 4.81800e+03 +3747 7.69600e+03 6.90800e+03 +3748 7.76000e+03 7.70000e+03 +3749 7.82400e+03 7.70000e+03 +3750 7.88800e+03 7.70000e+03 +3751 8.01600e+03 8.75600e+03 +3752 1.88320e+04 1.07250e+04 +3753 1.88320e+04 1.15280e+04 +3754 1.89280e+04 1.04940e+04 +3755 1.90240e+04 1.04940e+04 +3756 1.47680e+04 2.53000e+03 +3757 1.47680e+04 5.47800e+03 +3758 1.47680e+04 6.79800e+03 +3759 1.48000e+04 8.00800e+03 +3760 1.48320e+04 8.64600e+03 +3761 1.48320e+04 9.87800e+03 +3762 1.48320e+04 1.14290e+04 +3763 6.64000e+03 2.20000e+02 +3764 6.67600e+03 3.08000e+02 +3765 6.79500e+03 3.08000e+02 +3766 6.83200e+03 2.20000e+02 +3767 6.83200e+03 5.17000e+02 +3768 6.83200e+03 1.51800e+03 +3769 6.83200e+03 2.57400e+03 +3770 6.83200e+03 4.04800e+03 +3771 6.83200e+03 5.43400e+03 +3772 6.83200e+03 7.12800e+03 +3773 6.83200e+03 8.64600e+03 +3774 6.85200e+03 9.28400e+03 +3775 6.92800e+03 9.28400e+03 +3776 7.02400e+03 9.28400e+03 +3777 7.21600e+03 9.28400e+03 +3778 7.53600e+03 9.28400e+03 +3779 7.60000e+03 9.28400e+03 +3780 7.69600e+03 9.28400e+03 +3781 7.82400e+03 9.28400e+03 +3782 7.90400e+03 9.28400e+03 +3783 8.09600e+03 9.28400e+03 +3784 8.17600e+03 9.28400e+03 +3785 8.27200e+03 9.28400e+03 +3786 8.36800e+03 9.28400e+03 +3787 8.43200e+03 9.28400e+03 +3788 8.72000e+03 9.28400e+03 +3789 8.86400e+03 9.28400e+03 +3790 9.10400e+03 9.28400e+03 +3791 9.72800e+03 9.28400e+03 +3792 1.00320e+04 9.28400e+03 +3793 1.02560e+04 9.28400e+03 +3794 1.04480e+04 9.28400e+03 +3795 1.06560e+04 9.28400e+03 +3796 1.07360e+04 9.28400e+03 +3797 1.08000e+04 9.28400e+03 +3798 1.09120e+04 9.28400e+03 +3799 1.10400e+04 9.28400e+03 +3800 1.12160e+04 9.28400e+03 +3801 1.13440e+04 9.28400e+03 +3802 1.15200e+04 9.28400e+03 +3803 1.16000e+04 9.28400e+03 +3804 1.17120e+04 9.28400e+03 +3805 1.17920e+04 9.28400e+03 +3806 1.19840e+04 9.28400e+03 +3807 1.21280e+04 9.28400e+03 +3808 1.22080e+04 9.28400e+03 +3809 1.23840e+04 9.28400e+03 +3810 1.25280e+04 9.28400e+03 +3811 1.26560e+04 9.28400e+03 +3812 1.28430e+04 9.28400e+03 +3813 1.28800e+04 1.14290e+04 +3814 7.34400e+03 8.75600e+03 +3815 7.34400e+03 1.08020e+04 +3816 7.60000e+03 7.26000e+03 +3817 7.76000e+03 7.26000e+03 +3818 7.82400e+03 7.26000e+03 +3819 7.88800e+03 7.26000e+03 +3820 8.04300e+03 7.26000e+03 +3821 8.08000e+03 1.18800e+03 +3822 8.08000e+03 4.81800e+03 +3823 8.08000e+03 7.02900e+03 +3824 1.01280e+04 2.31000e+02 +3825 1.01280e+04 1.01200e+03 +3826 1.01280e+04 1.76000e+03 +3827 1.01480e+04 5.89600e+03 +3828 1.02240e+04 5.89600e+03 +3829 1.03840e+04 5.89600e+03 +3830 1.05120e+04 5.89600e+03 +3831 1.05870e+04 5.89600e+03 +3832 1.06080e+04 7.39200e+03 +3833 1.06080e+04 1.14950e+04 +3834 1.64960e+04 2.22200e+03 +3835 1.64960e+04 3.85000e+03 +3836 1.64960e+04 5.47800e+03 +3837 1.64960e+04 6.79800e+03 +3838 1.64960e+04 7.76600e+03 +3839 1.65920e+04 9.28400e+03 +3840 1.66880e+04 9.28400e+03 +3841 1.67840e+04 9.28400e+03 +3842 1.69120e+04 9.28400e+03 +3843 1.70400e+04 9.28400e+03 +3844 1.71360e+04 9.28400e+03 +3845 1.72800e+04 9.28400e+03 +3846 1.73920e+04 9.59200e+03 +3847 1.73920e+04 1.06700e+04 +3848 1.73920e+04 1.15280e+04 +3849 4.59200e+03 2.68400e+03 +3850 4.59200e+03 5.43400e+03 +3851 4.59200e+03 7.81000e+03 +3852 4.59200e+03 8.86600e+03 +3853 4.59200e+03 1.14950e+04 +3854 1.05760e+04 7.39200e+03 +3855 1.05760e+04 1.14950e+04 +3856 1.06560e+04 6.33600e+03 +3857 1.08000e+04 6.33600e+03 +3858 1.08640e+04 6.33600e+03 +3859 1.09280e+04 6.33600e+03 +3860 1.10240e+04 2.31000e+02 +3861 1.10240e+04 9.02000e+02 +3862 1.10240e+04 1.76000e+03 +3863 1.10240e+04 4.48800e+03 +3864 2.38400e+03 3.11300e+03 +3865 2.38400e+03 6.64400e+03 +3866 2.38400e+03 1.00320e+04 +3867 2.92800e+03 1.00320e+04 +3868 2.94400e+03 6.95200e+03 +3869 2.96000e+03 3.11300e+03 +3870 2.96000e+03 6.87500e+03 +3871 5.16800e+03 2.17800e+03 +3872 5.16800e+03 4.04800e+03 +3873 5.16800e+03 6.40200e+03 +3874 5.16800e+03 7.45800e+03 +3875 5.16800e+03 1.05820e+04 +3876 2.54400e+03 3.11300e+03 +3877 2.54400e+03 6.75400e+03 +3878 2.54400e+03 1.00320e+04 +3879 9.64800e+03 2.31000e+02 +3880 9.64800e+03 1.01200e+03 +3881 9.64800e+03 1.76000e+03 +3882 9.64800e+03 7.12800e+03 +3883 9.66400e+03 7.78800e+03 +3884 1.80800e+03 8.05200e+03 +3885 1.80800e+03 1.00320e+04 +3886 1.87200e+03 7.17200e+03 +3887 1.98400e+03 7.17200e+03 +3888 2.11200e+03 7.17200e+03 +3889 2.19200e+03 7.17200e+03 +3890 2.28800e+03 7.17200e+03 +3891 2.46400e+03 7.17200e+03 +3892 2.62400e+03 7.17200e+03 +3893 2.73600e+03 7.17200e+03 +3894 2.86400e+03 7.17200e+03 +3895 2.96000e+03 7.17200e+03 +3896 3.02400e+03 7.17200e+03 +3897 3.20000e+03 7.17200e+03 +3898 3.31200e+03 7.17200e+03 +3899 3.40800e+03 7.17200e+03 +3900 3.47200e+03 3.11300e+03 +3901 3.47200e+03 6.98500e+03 +3902 9.48800e+03 2.31000e+02 +3903 9.48800e+03 1.01200e+03 +3904 9.48800e+03 1.76000e+03 +3905 9.48800e+03 7.12800e+03 +3906 2.00000e+03 8.04100e+03 +3907 2.00000e+03 8.77800e+03 +3908 2.00000e+03 1.00320e+04 +3909 2.11200e+03 7.92000e+03 +3910 2.19200e+03 7.92000e+03 +3911 2.28800e+03 7.92000e+03 +3912 2.46400e+03 7.92000e+03 +3913 2.62400e+03 7.92000e+03 +3914 2.81600e+03 7.92000e+03 +3915 2.96000e+03 7.92000e+03 +3916 3.02400e+03 7.92000e+03 +3917 3.12000e+03 3.11300e+03 +3918 3.12000e+03 6.86400e+03 +3919 8.75200e+03 8.86600e+03 +3920 8.81600e+03 1.18800e+03 +3921 8.81600e+03 3.93800e+03 +3922 8.81600e+03 5.97300e+03 +3923 1.00800e+03 3.57500e+03 +3924 1.00800e+03 9.65800e+03 +3925 1.29600e+03 7.82100e+03 +3926 1.29600e+03 9.65800e+03 +3927 1.31600e+03 7.70000e+03 +3928 1.53600e+03 7.70000e+03 +3929 1.64800e+03 7.70000e+03 +3930 1.76000e+03 7.70000e+03 +3931 1.87200e+03 7.70000e+03 +3932 1.98400e+03 7.70000e+03 +3933 2.11200e+03 7.70000e+03 +3934 2.19200e+03 7.70000e+03 +3935 2.28800e+03 7.70000e+03 +3936 2.46400e+03 7.70000e+03 +3937 2.62400e+03 7.70000e+03 +3938 2.74700e+03 7.70000e+03 +3939 2.76800e+03 3.11300e+03 +3940 2.76800e+03 6.86400e+03 +3941 1.36000e+03 3.22300e+03 +3942 1.36000e+03 8.77800e+03 +3943 1.36000e+03 1.00320e+04 +3944 2.03200e+03 8.77800e+03 +3945 2.03200e+03 1.00320e+04 +3946 2.11200e+03 6.95200e+03 +3947 2.19200e+03 6.95200e+03 +3948 2.28800e+03 6.95200e+03 +3949 2.41600e+03 3.11300e+03 +3950 2.41600e+03 6.76500e+03 +3951 5.60000e+02 3.41000e+03 +3952 5.60000e+02 6.86400e+03 +3953 5.76000e+02 7.04000e+03 +3954 5.92000e+02 9.92200e+03 +3955 1.71200e+03 3.11300e+03 +3956 1.71200e+03 7.01800e+03 +3957 1.71200e+03 8.06300e+03 +3958 1.72800e+03 8.18400e+03 +3959 1.74400e+03 1.00320e+04 +3960 5.10400e+03 1.05820e+04 +3961 5.10400e+03 1.14950e+04 +3962 5.12000e+03 7.92000e+03 +3963 5.13600e+03 2.17800e+03 +3964 5.13600e+03 4.04800e+03 +3965 5.13600e+03 6.40200e+03 +3966 5.13600e+03 7.46900e+03 +3967 2.06400e+03 3.11300e+03 +3968 2.06400e+03 6.64400e+03 +3969 2.06400e+03 8.78900e+03 +3970 2.08000e+03 8.93200e+03 +3971 2.09600e+03 1.00320e+04 +3972 3.07200e+03 1.12200e+04 +3973 3.08800e+03 3.11300e+03 +3974 3.08800e+03 6.86400e+03 +3975 3.08800e+03 1.00320e+04 +3976 3.24800e+03 3.11300e+03 +3977 3.24800e+03 6.86400e+03 +3978 3.24800e+03 1.00320e+04 +3979 1.09600e+04 2.31000e+02 +3980 1.09600e+04 9.02000e+02 +3981 1.09600e+04 1.76000e+03 +3982 1.09600e+04 4.48800e+03 +3983 1.09600e+04 7.39200e+03 +3984 1.09600e+04 1.03620e+04 +3985 1.09600e+04 1.14950e+04 +3986 2.97600e+03 1.06920e+04 +3987 2.99200e+03 3.11300e+03 +3988 2.99200e+03 6.86400e+03 +3989 2.99200e+03 1.00430e+04 +3990 1.08320e+04 1.03620e+04 +3991 1.08320e+04 1.14950e+04 +3992 1.08960e+04 2.31000e+02 +3993 1.08960e+04 9.02000e+02 +3994 1.08960e+04 1.76000e+03 +3995 1.08960e+04 4.48800e+03 +3996 1.08960e+04 7.39200e+03 +3997 1.08320e+04 2.31000e+02 +3998 1.08320e+04 9.02000e+02 +3999 1.08320e+04 1.76000e+03 +4000 1.08480e+04 6.77600e+03 +4001 1.08640e+04 7.39200e+03 +4002 1.08640e+04 1.03620e+04 +4003 1.08640e+04 1.14950e+04 +4004 1.79680e+04 1.06700e+04 +4005 1.83680e+04 9.79000e+03 +4006 1.85120e+04 9.79000e+03 +4007 1.86560e+04 9.79000e+03 +4008 1.87840e+04 9.79000e+03 +4009 1.89280e+04 9.79000e+03 +4010 1.90240e+04 9.79000e+03 +4011 3.37600e+03 3.11300e+03 +4012 3.37600e+03 6.86400e+03 +4013 3.50400e+03 9.59200e+03 +4014 3.56800e+03 9.59200e+03 +4015 3.66400e+03 1.01420e+04 +4016 2.22400e+03 3.11300e+03 +4017 2.22400e+03 6.64400e+03 +4018 2.27600e+03 8.71200e+03 +4019 2.46400e+03 8.71200e+03 +4020 2.73600e+03 8.71200e+03 +4021 2.96000e+03 8.71200e+03 +4022 3.02400e+03 8.71200e+03 +4023 3.16800e+03 8.71200e+03 +4024 3.31200e+03 8.71200e+03 +4025 3.50400e+03 8.71200e+03 +4026 3.63200e+03 8.71200e+03 +4027 3.69600e+03 8.71200e+03 +4028 3.82400e+03 8.71200e+03 +4029 3.95200e+03 8.71200e+03 +4030 8.84800e+03 9.06400e+03 +4031 8.88000e+03 1.18800e+03 +4032 8.88000e+03 3.93800e+03 +4033 8.88000e+03 5.96200e+03 +4034 8.88000e+03 7.01800e+03 +4035 1.60800e+04 2.22200e+03 +4036 1.60800e+04 3.74000e+03 +4037 1.60800e+04 5.36800e+03 +4038 1.60800e+04 6.79800e+03 +4039 1.60800e+04 7.76600e+03 +4040 1.60800e+04 8.74500e+03 +4041 1.61120e+04 8.84400e+03 +4042 1.61440e+04 1.06260e+04 +4043 1.61440e+04 1.14290e+04 +4044 1.32960e+04 1.60600e+03 +4045 1.32960e+04 2.31000e+03 +4046 1.32960e+04 3.12400e+03 +4047 1.32960e+04 3.93800e+03 +4048 1.32960e+04 4.92800e+03 +4049 1.34560e+04 5.80800e+03 +4050 1.35200e+04 5.80800e+03 +4051 1.36320e+04 5.80800e+03 +4052 1.37600e+04 5.80800e+03 +4053 1.39200e+04 5.80800e+03 +4054 1.40800e+04 5.80800e+03 +4055 1.42030e+04 5.80800e+03 +4056 1.42240e+04 7.17200e+03 +4057 1.42240e+04 8.86600e+03 +4058 1.42240e+04 9.87800e+03 +4059 1.42240e+04 1.15390e+04 +4060 1.41600e+04 1.15390e+04 +4061 1.41800e+04 1.07800e+04 +4062 1.42720e+04 1.07800e+04 +4063 1.43840e+04 1.07800e+04 +4064 1.44480e+04 1.07800e+04 +4065 1.47040e+04 1.07800e+04 +4066 1.47840e+04 1.07800e+04 +4067 1.49600e+04 2.53000e+03 +4068 1.49600e+04 4.15800e+03 +4069 1.49600e+04 5.47800e+03 +4070 1.49600e+04 6.79800e+03 +4071 1.49600e+04 7.89800e+03 +4072 1.49600e+04 8.64600e+03 +4073 1.49600e+04 9.87800e+03 +4074 1.49600e+04 1.06370e+04 +4075 1.71040e+04 1.05600e+04 +4076 1.71040e+04 1.15280e+04 +4077 1.71200e+04 8.40400e+03 +4078 1.71360e+04 1.78200e+03 +4079 1.71360e+04 4.35600e+03 +4080 1.71360e+04 6.68800e+03 +4081 1.71360e+04 7.72200e+03 +4082 1.54400e+04 8.64600e+03 +4083 1.54400e+04 9.87800e+03 +4084 1.54400e+04 1.06260e+04 +4085 1.54400e+04 1.14290e+04 +4086 1.54600e+04 7.78800e+03 +4087 1.56000e+04 7.78800e+03 +4088 1.57120e+04 7.78800e+03 +4089 1.57920e+04 7.78800e+03 +4090 1.58560e+04 2.53000e+03 +4091 1.58560e+04 4.04800e+03 +4092 1.58560e+04 5.36800e+03 +4093 1.58560e+04 6.79800e+03 +4094 1.58560e+04 7.68900e+03 +4095 1.53440e+04 8.64600e+03 +4096 1.53440e+04 9.87800e+03 +4097 1.53440e+04 1.06260e+04 +4098 1.53440e+04 1.14290e+04 +4099 1.53800e+04 8.00800e+03 +4100 1.54720e+04 8.00800e+03 +4101 1.55680e+04 2.53000e+03 +4102 1.55680e+04 5.36800e+03 +4103 1.55680e+04 6.79800e+03 +4104 4.20800e+03 2.36500e+03 +4105 4.20800e+03 5.43400e+03 +4106 4.20800e+03 6.90800e+03 +4107 1.83200e+04 3.61900e+03 +4108 1.83200e+04 7.87600e+03 +4109 1.83200e+04 9.42700e+03 +4110 1.83200e+04 1.06700e+04 +4111 1.21440e+04 9.02000e+02 +4112 1.21440e+04 4.48800e+03 +4113 1.21440e+04 5.96200e+03 +4114 1.21440e+04 7.39200e+03 +4115 1.21600e+04 9.06400e+03 +4116 1.21760e+04 1.11650e+04 +4117 1.49920e+04 4.32300e+03 +4118 1.49920e+04 5.47800e+03 +4119 1.49920e+04 6.79800e+03 +4120 1.49920e+04 7.89800e+03 +4121 1.49920e+04 8.64600e+03 +4122 1.49920e+04 9.87800e+03 +4123 1.49920e+04 1.06260e+04 +4124 1.49920e+04 1.14290e+04 +4125 1.51240e+04 4.18000e+03 +4126 1.53280e+04 4.18000e+03 +4127 1.54080e+04 4.18000e+03 +4128 1.54720e+04 4.18000e+03 +4129 1.56000e+04 4.18000e+03 +4130 1.57120e+04 4.18000e+03 +4131 1.58030e+04 4.18000e+03 +4132 1.58240e+04 2.53000e+03 +4133 1.58240e+04 4.01500e+03 +4134 1.63360e+04 1.04610e+04 +4135 1.63360e+04 1.14290e+04 +4136 1.64320e+04 8.62400e+03 +4137 1.65920e+04 8.62400e+03 +4138 1.66880e+04 8.62400e+03 +4139 1.67520e+04 8.62400e+03 +4140 1.68160e+04 8.62400e+03 +4141 1.69120e+04 8.62400e+03 +4142 1.70400e+04 8.62400e+03 +4143 1.71360e+04 8.62400e+03 +4144 1.72430e+04 8.62400e+03 +4145 1.72640e+04 1.78200e+03 +4146 1.72640e+04 4.09200e+03 +4147 1.72640e+04 6.68800e+03 +4148 1.72640e+04 7.72200e+03 +4149 1.72640e+04 8.48100e+03 +4150 9.71200e+03 2.31000e+02 +4151 9.71200e+03 1.01200e+03 +4152 9.71200e+03 1.76000e+03 +4153 9.71200e+03 7.12800e+03 +4154 1.70720e+04 1.01200e+03 +4155 1.70720e+04 2.22200e+03 +4156 1.70720e+04 4.35600e+03 +4157 1.70720e+04 6.68800e+03 +4158 1.70720e+04 7.72200e+03 +4159 1.70720e+04 1.05600e+04 +4160 1.70720e+04 1.15280e+04 +4161 1.35520e+04 1.14180e+04 +4162 1.36960e+04 1.12200e+04 +4163 1.39680e+04 1.12200e+04 +4164 1.41920e+04 1.12200e+04 +4165 1.42720e+04 1.12200e+04 +4166 1.43840e+04 1.12200e+04 +4167 1.44480e+04 1.12200e+04 +4168 1.45760e+04 1.12200e+04 +4169 1.46720e+04 2.53000e+03 +4170 1.46720e+04 5.36800e+03 +4171 1.46720e+04 6.79800e+03 +4172 1.46720e+04 8.64600e+03 +4173 1.46720e+04 9.87800e+03 +4174 1.46880e+04 1.12200e+04 +4175 1.47040e+04 1.14180e+04 +4176 1.64640e+04 2.22200e+03 +4177 1.64640e+04 3.85000e+03 +4178 1.64640e+04 5.47800e+03 +4179 1.64640e+04 6.79800e+03 +4180 1.64640e+04 7.76600e+03 +4181 1.64640e+04 1.04610e+04 +4182 1.64640e+04 1.14290e+04 +4183 1.44000e+02 1.15280e+04 +4184 3.20000e+02 1.14400e+04 +4185 4.96000e+02 1.14400e+04 +4186 7.52000e+02 1.14400e+04 +4187 9.12000e+02 1.14400e+04 +4188 1.10400e+03 1.14400e+04 +4189 1.23200e+03 1.14400e+04 +4190 1.58400e+03 1.14400e+04 +4191 1.71200e+03 1.14400e+04 +4192 1.77600e+03 1.14400e+04 +4193 1.90400e+03 1.14400e+04 +4194 2.06400e+03 1.14400e+04 +4195 2.25100e+03 1.14400e+04 +4196 2.35200e+03 3.11300e+03 +4197 2.35200e+03 6.64400e+03 +4198 2.35200e+03 1.00320e+04 +4199 2.35200e+03 1.12970e+04 +4200 2.46400e+03 1.14400e+04 +4201 2.73600e+03 1.14400e+04 +4202 3.00800e+03 1.14400e+04 +4203 3.15200e+03 1.14400e+04 +4204 3.34400e+03 1.14400e+04 +4205 3.50400e+03 1.14400e+04 +4206 3.58400e+03 1.14400e+04 +4207 3.71200e+03 1.14400e+04 +4208 3.88800e+03 1.14400e+04 +4209 4.04800e+03 1.14400e+04 +4210 4.12800e+03 1.14400e+04 +4211 4.27200e+03 1.14400e+04 +4212 4.36800e+03 1.15280e+04 +4213 1.31680e+04 7.28200e+03 +4214 1.31680e+04 8.53600e+03 +4215 1.31680e+04 9.17400e+03 +4216 1.31680e+04 1.14290e+04 +4217 1.32640e+04 1.60600e+03 +4218 1.32640e+04 2.31000e+03 +4219 1.32640e+04 3.12400e+03 +4220 1.32640e+04 3.93800e+03 +4221 1.32640e+04 4.92800e+03 +4222 1.32640e+04 6.41300e+03 +4223 7.79200e+03 8.89900e+03 +4224 7.82400e+03 8.75600e+03 +4225 7.85600e+03 1.18800e+03 +4226 7.85600e+03 4.81800e+03 +4227 7.85600e+03 8.61300e+03 +4228 1.67200e+04 1.01200e+03 +4229 1.67200e+04 2.22200e+03 +4230 1.67200e+04 3.85000e+03 +4231 1.67200e+04 5.47800e+03 +4232 1.67200e+04 6.68800e+03 +4233 1.67200e+04 7.87600e+03 +4234 1.67200e+04 1.05600e+04 +4235 1.67200e+04 1.15280e+04 +4236 1.90560e+04 1.15280e+04 +4237 1.29760e+04 3.93800e+03 +4238 1.29760e+04 4.70800e+03 +4239 1.29760e+04 6.07200e+03 +4240 1.29760e+04 7.28200e+03 +4241 1.29760e+04 8.53600e+03 +4242 1.29760e+04 9.17400e+03 +4243 1.29760e+04 1.14290e+04 +4244 1.30400e+04 4.73000e+02 +4245 1.30400e+04 1.60600e+03 +4246 1.30400e+04 2.31000e+03 +4247 1.59200e+04 2.49700e+03 +4248 1.59360e+04 3.30000e+03 +4249 1.59520e+04 3.77300e+03 +4250 1.59520e+04 5.36800e+03 +4251 1.59520e+04 6.79800e+03 +4252 1.59520e+04 7.76600e+03 +4253 1.59520e+04 8.62400e+03 +4254 1.59520e+04 9.87800e+03 +4255 1.59520e+04 1.06260e+04 +4256 1.59520e+04 1.14290e+04 +4257 5.29600e+03 6.40200e+03 +4258 5.29600e+03 7.19400e+03 +4259 5.29600e+03 1.05820e+04 +4260 5.31200e+03 5.58800e+03 +4261 5.32800e+03 2.17800e+03 +4262 5.32800e+03 4.04800e+03 +4263 1.18560e+04 9.02000e+02 +4264 1.18560e+04 4.48800e+03 +4265 1.18560e+04 5.92900e+03 +4266 1.18720e+04 6.02800e+03 +4267 1.18880e+04 6.17100e+03 +4268 1.18880e+04 7.39200e+03 +4269 1.18880e+04 1.11650e+04 +4270 1.55040e+04 5.83000e+02 +4271 1.55040e+04 2.53000e+03 +4272 1.55040e+04 5.36800e+03 +4273 1.55040e+04 6.79800e+03 +4274 1.55040e+04 8.64600e+03 +4275 1.55520e+04 9.28400e+03 +4276 1.56000e+04 9.87800e+03 +4277 1.56000e+04 1.06260e+04 +4278 1.56000e+04 1.14290e+04 +4279 5.84000e+03 2.09000e+02 +4280 5.84000e+03 2.02400e+03 +4281 5.84000e+03 4.04800e+03 +4282 5.84000e+03 8.38200e+03 +4283 5.84000e+03 1.08020e+04 +4284 4.36800e+03 2.36500e+03 +4285 4.36800e+03 5.43400e+03 +4286 4.36800e+03 7.81000e+03 +4287 4.38800e+03 1.11320e+04 +4288 4.46400e+03 1.11320e+04 +4289 4.52800e+03 1.11320e+04 +4290 4.62400e+03 1.11320e+04 +4291 4.78400e+03 1.11320e+04 +4292 4.94400e+03 1.11320e+04 +4293 5.13600e+03 1.11320e+04 +4294 5.20000e+03 1.11320e+04 +4295 5.36000e+03 1.11320e+04 +4296 5.55200e+03 1.11320e+04 +4297 5.61600e+03 1.11320e+04 +4298 5.80800e+03 1.11320e+04 +4299 5.96800e+03 1.11320e+04 +4300 6.03200e+03 1.11320e+04 +4301 6.11200e+03 1.11320e+04 +4302 6.20800e+03 1.11320e+04 +4303 6.35200e+03 1.11320e+04 +4304 6.46400e+03 1.11320e+04 +4305 6.67200e+03 1.11320e+04 +4306 6.83200e+03 1.11320e+04 +4307 7.02400e+03 1.11320e+04 +4308 7.20000e+03 1.11320e+04 +4309 7.44000e+03 1.11320e+04 +4310 7.53600e+03 1.11320e+04 +4311 7.60000e+03 1.11320e+04 +4312 7.69600e+03 1.11320e+04 +4313 7.82400e+03 1.11320e+04 +4314 7.88800e+03 1.11320e+04 +4315 6.28800e+03 4.29000e+02 +4316 6.28800e+03 2.02400e+03 +4317 6.28800e+03 4.04800e+03 +4318 6.41600e+03 8.22800e+03 +4319 6.54400e+03 8.22800e+03 +4320 6.67200e+03 8.22800e+03 +4321 6.86400e+03 8.22800e+03 +4322 6.92800e+03 8.22800e+03 +4323 7.04000e+03 8.22800e+03 +4324 7.18400e+03 8.22800e+03 +4325 7.53600e+03 8.22800e+03 +4326 7.60000e+03 8.22800e+03 +4327 7.69600e+03 8.22800e+03 +4328 7.76000e+03 8.22800e+03 +4329 7.82400e+03 8.22800e+03 +4330 7.88800e+03 8.22800e+03 +4331 8.09600e+03 8.22800e+03 +4332 8.17600e+03 8.22800e+03 +4333 8.25600e+03 8.22800e+03 +4334 8.44800e+03 8.22800e+03 +4335 8.72000e+03 8.22800e+03 +4336 8.84800e+03 8.22800e+03 +4337 9.11500e+03 8.22800e+03 +4338 9.13600e+03 9.87800e+03 +4339 4.62400e+03 2.68400e+03 +4340 4.62400e+03 5.44500e+03 +4341 4.64400e+03 5.80800e+03 +4342 4.75200e+03 5.80800e+03 +4343 4.84800e+03 5.80800e+03 +4344 4.91200e+03 5.80800e+03 +4345 5.04000e+03 5.80800e+03 +4346 5.32800e+03 5.80800e+03 +4347 5.66400e+03 5.80800e+03 +4348 6.09600e+03 5.80800e+03 +4349 6.19200e+03 5.80800e+03 +4350 6.25600e+03 5.80800e+03 +4351 6.41600e+03 5.80800e+03 +4352 6.56000e+03 5.80800e+03 +4353 6.67200e+03 5.80800e+03 +4354 6.76800e+03 5.80800e+03 +4355 6.86400e+03 5.80800e+03 +4356 6.99200e+03 5.80800e+03 +4357 7.08800e+03 5.80800e+03 +4358 7.18400e+03 5.80800e+03 +4359 7.32800e+03 5.80800e+03 +4360 7.58400e+03 5.80800e+03 +4361 7.66400e+03 5.80800e+03 +4362 7.76000e+03 5.80800e+03 +4363 7.82400e+03 5.80800e+03 +4364 7.88800e+03 5.80800e+03 +4365 7.95200e+03 5.80800e+03 +4366 8.04800e+03 5.80800e+03 +4367 8.17600e+03 5.80800e+03 +4368 8.33600e+03 6.90800e+03 +4369 8.33600e+03 8.64600e+03 +4370 9.00800e+03 1.18800e+03 +4371 9.44000e+03 3.82800e+03 +4372 9.55200e+03 3.82800e+03 +4373 9.68000e+03 3.82800e+03 +4374 9.82400e+03 3.82800e+03 +4375 9.93600e+03 3.82800e+03 +4376 1.00000e+04 3.82800e+03 +4377 1.02240e+04 3.82800e+03 +4378 1.02880e+04 3.82800e+03 +4379 1.03840e+04 3.82800e+03 +4380 1.05120e+04 3.82800e+03 +4381 1.05760e+04 3.82800e+03 +4382 1.06400e+04 3.82800e+03 +4383 1.07040e+04 3.82800e+03 +4384 1.08000e+04 3.82800e+03 +4385 1.09280e+04 3.82800e+03 +4386 1.10560e+04 3.82800e+03 +4387 1.11200e+04 3.82800e+03 +4388 1.12160e+04 3.82800e+03 +4389 1.13440e+04 3.82800e+03 +4390 1.14880e+04 3.82800e+03 +4391 1.16800e+04 3.82800e+03 +4392 1.17600e+04 3.82800e+03 +4393 1.19040e+04 3.82800e+03 +4394 1.20480e+04 3.82800e+03 +4395 1.21760e+04 3.82800e+03 +4396 1.23360e+04 3.82800e+03 +4397 1.24320e+04 3.82800e+03 +4398 1.25280e+04 3.82800e+03 +4399 1.26240e+04 3.82800e+03 +4400 1.26880e+04 3.82800e+03 +4401 1.27520e+04 4.70800e+03 +4402 1.27520e+04 6.07200e+03 +4403 1.27520e+04 7.39200e+03 +4404 1.27520e+04 8.64600e+03 +4405 1.27520e+04 1.14290e+04 +4406 1.45120e+04 9.16300e+03 +4407 1.45120e+04 9.87800e+03 +4408 1.45120e+04 1.15390e+04 +4409 1.47040e+04 9.06400e+03 +4410 1.47840e+04 9.06400e+03 +4411 1.51200e+04 9.06400e+03 +4412 1.53920e+04 9.06400e+03 +4413 1.54720e+04 9.06400e+03 +4414 1.55680e+04 9.06400e+03 +4415 1.57120e+04 9.06400e+03 +4416 1.57920e+04 9.06400e+03 +4417 1.58560e+04 9.06400e+03 +4418 1.59840e+04 9.06400e+03 +4419 1.60800e+04 9.06400e+03 +4420 1.62080e+04 9.06400e+03 +4421 1.64320e+04 9.06400e+03 +4422 1.65920e+04 9.06400e+03 +4423 1.66880e+04 9.06400e+03 +4424 1.67840e+04 9.06400e+03 +4425 1.69120e+04 9.06400e+03 +4426 1.70400e+04 9.06400e+03 +4427 1.71360e+04 9.06400e+03 +4428 1.72800e+04 9.06400e+03 +4429 1.73920e+04 9.06400e+03 +4430 1.74720e+04 9.06400e+03 +4431 1.75520e+04 9.06400e+03 +4432 1.79520e+04 9.06400e+03 +4433 1.82240e+04 9.06400e+03 +4434 1.84270e+04 9.06400e+03 +4435 1.85120e+04 4.03700e+03 +4436 1.85120e+04 8.85500e+03 +4437 6.48000e+03 4.29000e+02 +4438 6.48000e+03 2.02400e+03 +4439 6.48000e+03 4.04800e+03 +4440 6.48000e+03 8.64600e+03 +4441 6.67200e+03 1.02520e+04 +4442 6.84800e+03 1.02520e+04 +4443 7.02400e+03 1.02520e+04 +4444 7.20000e+03 1.02520e+04 +4445 7.37600e+03 1.02520e+04 +4446 7.53600e+03 1.02520e+04 +4447 7.60000e+03 1.02520e+04 +4448 7.69600e+03 1.02520e+04 +4449 7.82400e+03 1.02520e+04 +4450 7.88800e+03 1.02520e+04 +4451 7.98400e+03 1.02520e+04 +4452 8.09600e+03 1.02520e+04 +4453 8.17600e+03 1.02520e+04 +4454 8.27200e+03 1.02520e+04 +4455 8.36800e+03 1.02520e+04 +4456 8.43200e+03 1.02520e+04 +4457 8.72000e+03 1.02520e+04 +4458 8.84800e+03 1.02520e+04 +4459 9.10400e+03 1.02520e+04 +4460 9.72800e+03 1.02520e+04 +4461 1.00320e+04 1.02520e+04 +4462 1.02560e+04 1.02520e+04 +4463 1.03200e+04 1.02520e+04 +4464 7.47200e+03 6.38000e+02 +4465 7.47200e+03 1.51800e+03 +4466 7.47200e+03 4.04800e+03 +4467 7.47200e+03 4.92800e+03 +4468 7.47200e+03 8.75600e+03 +4469 7.53600e+03 1.09120e+04 +4470 7.60000e+03 1.09120e+04 +4471 7.69600e+03 1.09120e+04 +4472 7.82400e+03 1.09120e+04 +4473 7.88800e+03 1.09120e+04 +4474 7.98400e+03 1.09120e+04 +4475 8.09600e+03 1.09120e+04 +4476 8.17600e+03 1.09120e+04 +4477 8.27200e+03 1.09120e+04 +4478 8.36800e+03 1.09120e+04 +4479 8.43200e+03 1.09120e+04 +4480 8.72000e+03 1.09120e+04 +4481 8.84800e+03 1.09120e+04 +4482 9.10400e+03 1.09120e+04 +4483 9.72800e+03 1.09120e+04 +4484 1.00320e+04 1.09120e+04 +4485 1.02560e+04 1.09120e+04 +4486 1.03200e+04 1.09120e+04 +4487 1.04800e+04 1.09120e+04 +4488 1.06560e+04 1.09120e+04 +4489 1.07680e+04 1.09120e+04 +4490 1.09280e+04 1.09120e+04 +4491 1.10240e+04 1.09120e+04 +4492 1.12160e+04 1.09120e+04 +4493 1.13280e+04 1.09120e+04 +4494 1.14400e+04 1.14400e+04 +4495 1.14400e+04 1.10880e+04 +4496 4.84800e+03 7.75500e+03 +4497 4.84800e+03 1.14950e+04 +4498 4.86400e+03 7.61200e+03 +4499 4.88000e+03 2.61800e+03 +4500 4.88000e+03 6.40200e+03 +4501 8.91200e+03 1.18800e+03 +4502 8.91200e+03 3.94900e+03 +4503 8.99200e+03 4.04800e+03 +4504 9.44000e+03 4.04800e+03 +4505 9.55200e+03 4.04800e+03 +4506 9.68000e+03 4.04800e+03 +4507 9.82400e+03 4.04800e+03 +4508 9.93600e+03 4.04800e+03 +4509 1.00000e+04 4.04800e+03 +4510 1.02240e+04 4.04800e+03 +4511 1.02880e+04 4.04800e+03 +4512 1.03840e+04 4.04800e+03 +4513 1.05120e+04 4.04800e+03 +4514 1.05760e+04 4.04800e+03 +4515 1.06400e+04 4.04800e+03 +4516 1.07040e+04 4.04800e+03 +4517 1.08000e+04 4.04800e+03 +4518 1.09280e+04 4.04800e+03 +4519 1.10560e+04 4.04800e+03 +4520 1.11200e+04 4.04800e+03 +4521 1.12160e+04 4.04800e+03 +4522 1.13440e+04 4.04800e+03 +4523 1.14880e+04 4.04800e+03 +4524 1.16800e+04 4.04800e+03 +4525 1.17600e+04 4.04800e+03 +4526 1.19040e+04 4.04800e+03 +4527 1.20480e+04 4.04800e+03 +4528 1.21760e+04 4.04800e+03 +4529 1.23360e+04 4.04800e+03 +4530 1.24320e+04 4.04800e+03 +4531 1.25280e+04 4.04800e+03 +4532 1.26240e+04 4.70800e+03 +4533 1.26240e+04 6.07200e+03 +4534 1.26240e+04 7.39200e+03 +4535 1.26240e+04 1.14290e+04 +4536 1.26880e+04 4.04800e+03 +4537 1.28000e+04 4.04800e+03 +4538 1.28800e+04 1.60600e+03 +4539 1.28800e+04 2.31000e+03 +4540 1.28800e+04 3.94900e+03 +4541 4.65600e+03 2.62900e+03 +4542 4.72000e+03 4.48800e+03 +4543 4.78400e+03 4.48800e+03 +4544 4.84800e+03 4.48800e+03 +4545 4.91200e+03 4.48800e+03 +4546 5.04000e+03 4.48800e+03 +4547 5.29600e+03 4.48800e+03 +4548 5.66400e+03 4.48800e+03 +4549 5.87200e+03 4.48800e+03 +4550 6.12800e+03 4.48800e+03 +4551 6.19200e+03 4.48800e+03 +4552 6.25600e+03 4.48800e+03 +4553 6.41600e+03 4.48800e+03 +4554 6.56000e+03 4.48800e+03 +4555 6.67200e+03 4.48800e+03 +4556 6.78400e+03 4.48800e+03 +4557 6.89600e+03 4.48800e+03 +4558 7.00800e+03 4.48800e+03 +4559 7.08800e+03 4.48800e+03 +4560 7.18400e+03 4.48800e+03 +4561 7.31200e+03 4.48800e+03 +4562 7.50400e+03 4.48800e+03 +4563 7.66400e+03 4.48800e+03 +4564 7.76000e+03 4.48800e+03 +4565 7.82400e+03 4.48800e+03 +4566 7.88800e+03 4.48800e+03 +4567 7.95200e+03 4.48800e+03 +4568 8.04800e+03 4.48800e+03 +4569 8.20800e+03 4.48800e+03 +4570 8.33600e+03 4.48800e+03 +4571 8.43200e+03 4.48800e+03 +4572 8.49600e+03 4.48800e+03 +4573 8.68800e+03 5.96200e+03 +4574 8.68800e+03 8.86600e+03 +4575 1.20160e+04 9.02000e+02 +4576 1.20160e+04 4.48800e+03 +4577 1.20160e+04 6.08300e+03 +4578 1.20360e+04 6.33600e+03 +4579 1.21760e+04 6.33600e+03 +4580 1.23840e+04 6.33600e+03 +4581 1.25230e+04 6.33600e+03 +4582 1.25600e+04 7.39200e+03 +4583 1.25600e+04 1.14290e+04 +4584 1.74560e+04 1.15280e+04 +4585 1.74760e+04 1.14400e+04 +4586 1.75520e+04 1.14400e+04 +4587 1.79200e+04 1.14400e+04 +4588 1.83680e+04 1.14400e+04 +4589 1.85230e+04 1.14400e+04 +4590 1.86080e+04 4.03700e+03 +4591 1.86080e+04 8.52500e+03 +4592 1.86080e+04 1.06700e+04 +4593 1.86080e+04 1.15280e+04 +4594 1.44160e+04 8.86600e+03 +4595 1.44160e+04 9.87800e+03 +4596 1.44160e+04 1.15390e+04 +4597 1.45120e+04 7.34800e+03 +4598 1.47040e+04 7.34800e+03 +4599 1.48160e+04 7.34800e+03 +4600 1.49280e+04 7.34800e+03 +4601 1.51360e+04 7.34800e+03 +4602 1.53280e+04 7.34800e+03 +4603 1.54400e+04 7.34800e+03 +4604 1.56000e+04 7.34800e+03 +4605 1.57120e+04 7.34800e+03 +4606 1.57920e+04 7.34800e+03 +4607 1.58880e+04 7.34800e+03 +4608 1.59840e+04 7.34800e+03 +4609 1.61280e+04 7.34800e+03 +4610 1.62880e+04 7.34800e+03 +4611 1.65440e+04 7.34800e+03 +4612 1.66880e+04 7.34800e+03 +4613 1.67520e+04 7.34800e+03 +4614 1.68160e+04 7.34800e+03 +4615 1.69120e+04 7.34800e+03 +4616 1.70400e+04 7.34800e+03 +4617 1.71040e+04 7.34800e+03 +4618 1.71680e+04 7.34800e+03 +4619 1.74080e+04 7.34800e+03 +4620 1.75040e+04 7.34800e+03 +4621 1.77120e+04 7.34800e+03 +4622 1.78560e+04 7.34800e+03 +4623 1.79680e+04 7.34800e+03 +4624 1.81920e+04 7.34800e+03 +4625 1.82560e+04 7.34800e+03 +4626 1.83840e+04 7.34800e+03 +4627 1.84480e+04 3.56400e+03 +4628 1.84480e+04 7.17200e+03 +4629 8.59200e+03 1.18800e+03 +4630 8.59200e+03 5.96200e+03 +4631 8.59200e+03 6.87500e+03 +4632 8.81600e+03 7.09500e+03 +4633 8.83600e+03 8.75600e+03 +4634 9.10400e+03 8.75600e+03 +4635 9.72800e+03 8.75600e+03 +4636 1.00000e+04 8.75600e+03 +4637 1.02560e+04 8.75600e+03 +4638 1.03520e+04 8.75600e+03 +4639 1.04640e+04 8.75600e+03 +4640 1.06560e+04 8.75600e+03 +4641 1.07360e+04 8.75600e+03 +4642 1.08000e+04 8.75600e+03 +4643 1.09120e+04 8.75600e+03 +4644 1.10400e+04 8.75600e+03 +4645 1.12000e+04 8.75600e+03 +4646 1.13440e+04 8.75600e+03 +4647 1.15040e+04 8.75600e+03 +4648 1.16000e+04 8.75600e+03 +4649 1.17120e+04 8.75600e+03 +4650 1.17920e+04 8.75600e+03 +4651 1.19840e+04 8.75600e+03 +4652 1.21920e+04 8.75600e+03 +4653 1.22720e+04 8.75600e+03 +4654 1.23840e+04 8.75600e+03 +4655 1.25280e+04 8.75600e+03 +4656 1.26560e+04 8.75600e+03 +4657 1.27200e+04 1.14290e+04 +4658 4.91200e+03 2.29900e+03 +4659 5.04000e+03 3.60800e+03 +4660 5.29600e+03 3.60800e+03 +4661 5.66400e+03 3.60800e+03 +4662 5.87200e+03 3.60800e+03 +4663 6.12800e+03 3.60800e+03 +4664 6.19200e+03 3.60800e+03 +4665 6.25600e+03 3.60800e+03 +4666 6.41600e+03 3.60800e+03 +4667 6.56000e+03 3.60800e+03 +4668 6.67200e+03 3.60800e+03 +4669 6.78400e+03 3.60800e+03 +4670 6.89600e+03 3.60800e+03 +4671 7.00800e+03 3.60800e+03 +4672 7.08800e+03 3.60800e+03 +4673 7.18400e+03 3.60800e+03 +4674 7.31200e+03 3.60800e+03 +4675 7.50400e+03 3.60800e+03 +4676 7.66400e+03 3.60800e+03 +4677 7.76000e+03 3.60800e+03 +4678 7.82400e+03 3.60800e+03 +4679 7.88800e+03 3.60800e+03 +4680 7.95200e+03 3.60800e+03 +4681 8.04800e+03 3.60800e+03 +4682 8.20800e+03 3.60800e+03 +4683 8.33600e+03 3.60800e+03 +4684 8.43200e+03 3.60800e+03 +4685 8.49600e+03 3.60800e+03 +4686 8.62400e+03 3.60800e+03 +4687 8.75200e+03 3.60800e+03 +4688 8.84800e+03 3.60800e+03 +4689 8.97600e+03 3.60800e+03 +4690 9.04000e+03 5.96200e+03 +4691 9.04000e+03 6.90800e+03 +4692 9.04000e+03 9.87800e+03 +4693 9.32800e+03 6.71000e+02 +4694 9.32800e+03 1.76000e+03 +4695 9.32800e+03 2.83800e+03 +4696 9.72800e+03 9.72400e+03 +4697 1.00320e+04 9.72400e+03 +4698 1.02560e+04 9.72400e+03 +4699 1.03200e+04 9.72400e+03 +4700 1.04160e+04 9.72400e+03 +4701 1.04800e+04 9.72400e+03 +4702 1.06560e+04 9.72400e+03 +4703 1.07360e+04 9.72400e+03 +4704 1.08000e+04 9.72400e+03 +4705 1.09280e+04 9.72400e+03 +4706 1.10400e+04 9.72400e+03 +4707 1.12160e+04 9.72400e+03 +4708 1.13120e+04 9.72400e+03 +4709 1.14400e+04 9.72400e+03 +4710 1.15200e+04 9.72400e+03 +4711 1.16000e+04 9.72400e+03 +4712 1.17120e+04 9.72400e+03 +4713 1.17920e+04 9.72400e+03 +4714 1.19840e+04 9.72400e+03 +4715 1.20800e+04 9.72400e+03 +4716 1.22080e+04 9.72400e+03 +4717 1.23840e+04 9.72400e+03 +4718 1.25280e+04 9.72400e+03 +4719 1.26560e+04 9.72400e+03 +4720 1.28270e+04 9.72400e+03 +4721 1.28480e+04 1.14290e+04 +4722 1.29440e+04 9.72400e+03 +4723 1.30880e+04 9.72400e+03 +4724 1.32320e+04 9.72400e+03 +4725 1.34030e+04 9.72400e+03 +4726 1.34240e+04 1.60600e+03 +4727 1.34240e+04 2.79400e+03 +4728 1.34240e+04 3.93800e+03 +4729 1.34240e+04 4.92800e+03 +4730 1.34240e+04 7.39200e+03 +4731 1.34240e+04 8.53600e+03 +4732 1.34240e+04 9.17400e+03 +4733 1.68800e+04 1.01200e+03 +4734 1.68800e+04 2.22200e+03 +4735 1.68800e+04 3.85000e+03 +4736 1.68800e+04 5.36800e+03 +4737 1.68800e+04 6.68800e+03 +4738 1.68800e+04 7.87600e+03 +4739 1.68800e+04 1.05600e+04 +4740 1.68800e+04 1.15280e+04 +4741 1.85760e+04 4.03700e+03 +4742 1.85760e+04 8.64600e+03 +4743 1.86560e+04 8.86600e+03 +4744 1.88590e+04 8.86600e+03 +4745 1.89920e+04 1.08460e+04 +4746 1.89920e+04 1.15280e+04 +4747 8.17600e+03 1.18800e+03 +4748 8.17600e+03 4.82900e+03 +4749 8.33600e+03 4.92800e+03 +4750 8.43200e+03 4.92800e+03 +4751 8.49600e+03 4.92800e+03 +4752 8.75200e+03 4.92800e+03 +4753 8.84800e+03 4.92800e+03 +4754 8.99200e+03 4.92800e+03 +4755 9.44000e+03 4.92800e+03 +4756 9.55200e+03 4.92800e+03 +4757 9.68000e+03 4.92800e+03 +4758 9.82400e+03 4.92800e+03 +4759 9.93600e+03 4.92800e+03 +4760 1.00000e+04 4.92800e+03 +4761 1.02240e+04 4.92800e+03 +4762 1.02880e+04 4.92800e+03 +4763 1.03840e+04 4.92800e+03 +4764 1.05120e+04 4.92800e+03 +4765 1.06080e+04 4.92800e+03 +4766 1.07040e+04 4.92800e+03 +4767 1.08000e+04 4.92800e+03 +4768 1.09280e+04 4.92800e+03 +4769 1.10560e+04 4.92800e+03 +4770 1.11200e+04 4.92800e+03 +4771 1.12160e+04 4.92800e+03 +4772 1.13440e+04 4.92800e+03 +4773 1.14880e+04 4.92800e+03 +4774 1.16800e+04 4.92800e+03 +4775 1.17600e+04 4.92800e+03 +4776 1.19040e+04 4.92800e+03 +4777 1.20480e+04 4.92800e+03 +4778 1.21760e+04 4.92800e+03 +4779 1.23360e+04 4.92800e+03 +4780 1.24430e+04 4.92800e+03 +4781 1.24640e+04 5.96200e+03 +4782 1.24640e+04 7.39200e+03 +4783 1.24640e+04 1.14290e+04 +4784 6.00000e+03 1.08020e+04 +4785 6.00000e+03 1.14950e+04 +4786 6.01600e+03 8.62400e+03 +4787 6.03200e+03 3.19000e+02 +4788 6.03200e+03 2.02400e+03 +4789 6.03200e+03 4.04800e+03 +4790 6.03200e+03 5.32400e+03 +4791 7.08800e+03 6.38000e+02 +4792 7.08800e+03 1.51800e+03 +4793 7.08800e+03 2.40900e+03 +4794 7.18400e+03 2.50800e+03 +4795 7.31200e+03 2.50800e+03 +4796 7.50400e+03 2.50800e+03 +4797 7.66400e+03 2.50800e+03 +4798 7.76000e+03 2.50800e+03 +4799 7.82400e+03 2.50800e+03 +4800 7.88800e+03 2.50800e+03 +4801 7.95200e+03 2.50800e+03 +4802 8.04800e+03 2.50800e+03 +4803 8.20800e+03 2.50800e+03 +4804 8.33600e+03 2.50800e+03 +4805 8.43200e+03 2.50800e+03 +4806 8.49600e+03 2.50800e+03 +4807 8.62400e+03 2.50800e+03 +4808 8.75200e+03 2.50800e+03 +4809 8.84800e+03 2.50800e+03 +4810 8.97600e+03 2.50800e+03 +4811 9.04000e+03 2.50800e+03 +4812 9.26400e+03 2.50800e+03 +4813 9.40800e+03 2.50800e+03 +4814 9.68000e+03 2.50800e+03 +4815 9.80800e+03 2.50800e+03 +4816 9.87200e+03 2.50800e+03 +4817 1.00000e+04 2.50800e+03 +4818 1.00960e+04 2.50800e+03 +4819 1.02240e+04 2.50800e+03 +4820 1.02880e+04 2.50800e+03 +4821 1.03840e+04 2.50800e+03 +4822 1.05120e+04 2.50800e+03 +4823 1.05760e+04 2.50800e+03 +4824 1.06400e+04 2.50800e+03 +4825 1.07040e+04 2.50800e+03 +4826 1.08000e+04 2.50800e+03 +4827 1.09280e+04 2.50800e+03 +4828 1.10560e+04 2.50800e+03 +4829 1.11200e+04 2.50800e+03 +4830 1.12160e+04 2.50800e+03 +4831 1.13440e+04 2.50800e+03 +4832 1.14080e+04 4.48800e+03 +4833 1.14080e+04 6.07200e+03 +4834 1.14080e+04 7.39200e+03 +4835 1.14080e+04 1.13850e+04 +4836 1.57600e+04 2.53000e+03 +4837 1.57600e+04 5.36800e+03 +4838 1.57600e+04 6.79800e+03 +4839 1.57600e+04 8.42600e+03 +4840 1.57600e+04 9.87800e+03 +4841 1.57600e+04 1.06260e+04 +4842 1.57600e+04 1.14290e+04 +4843 1.12000e+02 9.21800e+03 +4844 1.12000e+02 1.15280e+04 +4845 2.60000e+02 7.48000e+03 +4846 4.80000e+02 7.48000e+03 +4847 5.60000e+02 7.48000e+03 +4848 7.36000e+02 7.48000e+03 +4849 8.48000e+02 7.48000e+03 +4850 9.12000e+02 7.48000e+03 +4851 9.76000e+02 7.48000e+03 +4852 1.07200e+03 7.48000e+03 +4853 1.15200e+03 7.48000e+03 +4854 1.31200e+03 7.48000e+03 +4855 1.53600e+03 7.48000e+03 +4856 1.64800e+03 7.48000e+03 +4857 1.76000e+03 7.48000e+03 +4858 1.87200e+03 7.48000e+03 +4859 1.98400e+03 7.48000e+03 +4860 2.11200e+03 7.48000e+03 +4861 2.19200e+03 7.48000e+03 +4862 2.28800e+03 7.48000e+03 +4863 2.46400e+03 7.48000e+03 +4864 2.62400e+03 7.48000e+03 +4865 2.73600e+03 7.48000e+03 +4866 2.86400e+03 7.48000e+03 +4867 2.96000e+03 7.48000e+03 +4868 3.02400e+03 7.48000e+03 +4869 3.20000e+03 7.48000e+03 +4870 3.31200e+03 7.48000e+03 +4871 3.41900e+03 7.48000e+03 +4872 3.44000e+03 3.11300e+03 +4873 3.44000e+03 6.86400e+03 +4874 5.61600e+03 1.91400e+03 +4875 5.61600e+03 4.04800e+03 +4876 5.65200e+03 6.33600e+03 +4877 6.09600e+03 6.33600e+03 +4878 6.19200e+03 6.33600e+03 +4879 6.25600e+03 6.33600e+03 +4880 6.41600e+03 6.33600e+03 +4881 6.54400e+03 6.33600e+03 +4882 6.67200e+03 6.33600e+03 +4883 6.76800e+03 6.33600e+03 +4884 6.86400e+03 6.33600e+03 +4885 6.99200e+03 6.33600e+03 +4886 7.08800e+03 6.33600e+03 +4887 7.18400e+03 6.33600e+03 +4888 7.32800e+03 6.33600e+03 +4889 7.61600e+03 6.33600e+03 +4890 7.74400e+03 6.33600e+03 +4891 7.82400e+03 6.33600e+03 +4892 7.88800e+03 6.33600e+03 +4893 8.04800e+03 6.33600e+03 +4894 8.17600e+03 6.33600e+03 +4895 8.43200e+03 6.33600e+03 +4896 8.51200e+03 6.33600e+03 +4897 8.83200e+03 6.33600e+03 +4898 8.99200e+03 6.33600e+03 +4899 9.29600e+03 6.33600e+03 +4900 9.45600e+03 6.33600e+03 +4901 9.55200e+03 6.33600e+03 +4902 9.68000e+03 6.33600e+03 +4903 9.80800e+03 6.33600e+03 +4904 1.00160e+04 6.33600e+03 +4905 1.01390e+04 6.33600e+03 +4906 1.69440e+04 1.01200e+03 +4907 1.69440e+04 2.22200e+03 +4908 1.69440e+04 3.85000e+03 +4909 1.69440e+04 5.36800e+03 +4910 1.69440e+04 6.68800e+03 +4911 1.69440e+04 7.87600e+03 +4912 1.69440e+04 1.05600e+04 +4913 1.69440e+04 1.15280e+04 +4914 9.74400e+03 2.31000e+02 +4915 9.74400e+03 1.01200e+03 +4916 9.74400e+03 1.76000e+03 +4917 9.76400e+03 6.99600e+03 +4918 1.00160e+04 6.99600e+03 +4919 1.01280e+04 6.99600e+03 +4920 1.02240e+04 6.99600e+03 +4921 1.03840e+04 6.99600e+03 +4922 1.04960e+04 6.99600e+03 +4923 1.06560e+04 6.99600e+03 +4924 1.08160e+04 6.99600e+03 +4925 1.09280e+04 6.99600e+03 +4926 1.10400e+04 6.99600e+03 +4927 1.11200e+04 6.99600e+03 +4928 1.12160e+04 6.99600e+03 +4929 1.13280e+04 6.99600e+03 +4930 1.15040e+04 6.99600e+03 +4931 1.15680e+04 6.99600e+03 +4932 1.16320e+04 6.99600e+03 +4933 1.16960e+04 6.99600e+03 +4934 1.17600e+04 6.99600e+03 +4935 1.18240e+04 6.99600e+03 +4936 1.19680e+04 6.99600e+03 +4937 1.21920e+04 6.99600e+03 +4938 1.22720e+04 6.99600e+03 +4939 1.23840e+04 6.99600e+03 +4940 1.25280e+04 6.99600e+03 +4941 1.26560e+04 6.99600e+03 +4942 1.28000e+04 6.99600e+03 +4943 1.28910e+04 6.99600e+03 +4944 1.29120e+04 7.27100e+03 +4945 1.29120e+04 8.53600e+03 +4946 1.29120e+04 9.17400e+03 +4947 1.29120e+04 1.14290e+04 +4948 1.29330e+04 6.77600e+03 +4949 1.30880e+04 6.77600e+03 +4950 1.32800e+04 6.77600e+03 +4951 1.33920e+04 6.77600e+03 +4952 1.34560e+04 6.77600e+03 +4953 1.35200e+04 6.77600e+03 +4954 1.36320e+04 6.77600e+03 +4955 1.37600e+04 6.77600e+03 +4956 1.39200e+04 6.77600e+03 +4957 1.40800e+04 6.77600e+03 +4958 1.41920e+04 6.77600e+03 +4959 1.42670e+04 6.77600e+03 +4960 1.29120e+04 6.90800e+03 +4961 1.42880e+04 2.53000e+03 +4962 1.42880e+04 5.36800e+03 +4963 1.42880e+04 6.63300e+03 +4964 1.39040e+04 1.15280e+04 +4965 1.39200e+04 1.14400e+04 +4966 1.39360e+04 1.15280e+04 +4967 1.39520e+04 1.14400e+04 +4968 1.39680e+04 1.15280e+04 +4969 6.57600e+03 4.29000e+02 +4970 6.57600e+03 1.63900e+03 +4971 6.67200e+03 2.06800e+03 +4972 6.78400e+03 2.06800e+03 +4973 6.89600e+03 2.06800e+03 +4974 7.00800e+03 2.06800e+03 +4975 7.18400e+03 2.06800e+03 +4976 7.31200e+03 2.06800e+03 +4977 7.50400e+03 2.06800e+03 +4978 7.66400e+03 2.06800e+03 +4979 7.76000e+03 2.06800e+03 +4980 7.82400e+03 2.06800e+03 +4981 7.88800e+03 2.06800e+03 +4982 7.95200e+03 2.06800e+03 +4983 8.04800e+03 2.06800e+03 +4984 8.20800e+03 2.06800e+03 +4985 8.33600e+03 2.06800e+03 +4986 8.43200e+03 2.06800e+03 +4987 8.49600e+03 2.06800e+03 +4988 8.56000e+03 2.06800e+03 +4989 8.62400e+03 2.06800e+03 +4990 8.75200e+03 2.06800e+03 +4991 8.84800e+03 2.06800e+03 +4992 8.97600e+03 2.06800e+03 +4993 9.04000e+03 2.06800e+03 +4994 9.26400e+03 2.06800e+03 +4995 9.42400e+03 2.06800e+03 +4996 9.58400e+03 2.06800e+03 +4997 9.68000e+03 2.06800e+03 +4998 9.80800e+03 2.06800e+03 +4999 9.87200e+03 2.06800e+03 +5000 1.00000e+04 2.06800e+03 +5001 1.00960e+04 2.06800e+03 +5002 1.02240e+04 2.06800e+03 +5003 1.02880e+04 2.06800e+03 +5004 1.03840e+04 2.06800e+03 +5005 1.05120e+04 2.06800e+03 +5006 1.05760e+04 2.06800e+03 +5007 1.06400e+04 2.06800e+03 +5008 1.07040e+04 2.06800e+03 +5009 1.08000e+04 2.06800e+03 +5010 1.09280e+04 2.06800e+03 +5011 1.10560e+04 2.06800e+03 +5012 1.11200e+04 2.06800e+03 +5013 1.12270e+04 2.06800e+03 +5014 1.12480e+04 4.48800e+03 +5015 1.12480e+04 7.39200e+03 +5016 1.12480e+04 1.13850e+04 +5017 5.55200e+03 2.17800e+03 +5018 5.55200e+03 4.04800e+03 +5019 5.55200e+03 6.40200e+03 +5020 5.55200e+03 7.40300e+03 +5021 5.64800e+03 7.48000e+03 +5022 5.93600e+03 7.48000e+03 +5023 6.09600e+03 7.48000e+03 +5024 6.19200e+03 7.48000e+03 +5025 6.41600e+03 7.48000e+03 +5026 6.54400e+03 7.48000e+03 +5027 6.67200e+03 7.48000e+03 +5028 6.86400e+03 7.48000e+03 +5029 6.92800e+03 7.48000e+03 +5030 7.04000e+03 7.48000e+03 +5031 7.16800e+03 7.48000e+03 +5032 7.31200e+03 7.48000e+03 +5033 7.60000e+03 7.48000e+03 +5034 7.76000e+03 7.48000e+03 +5035 7.82400e+03 7.48000e+03 +5036 7.88800e+03 7.48000e+03 +5037 8.04800e+03 7.48000e+03 +5038 8.17600e+03 7.48000e+03 +5039 8.27200e+03 7.48000e+03 +5040 8.41600e+03 7.48000e+03 +5041 8.65600e+03 7.48000e+03 +5042 8.84800e+03 7.48000e+03 +5043 9.10400e+03 7.48000e+03 +5044 9.23200e+03 7.48000e+03 +5045 9.61600e+03 7.48000e+03 +5046 9.68000e+03 7.48000e+03 +5047 9.76000e+03 7.48000e+03 +5048 1.00160e+04 7.48000e+03 +5049 1.01280e+04 7.48000e+03 +5050 1.02240e+04 7.62300e+03 +5051 1.01600e+04 2.31000e+02 +5052 1.01600e+04 1.01200e+03 +5053 1.01600e+04 1.76000e+03 +5054 1.02240e+04 5.14800e+03 +5055 1.02880e+04 5.14800e+03 +5056 1.03840e+04 5.14800e+03 +5057 1.05120e+04 5.14800e+03 +5058 1.06080e+04 5.14800e+03 +5059 1.07040e+04 5.14800e+03 +5060 1.08000e+04 5.14800e+03 +5061 1.09280e+04 5.14800e+03 +5062 1.10560e+04 5.14800e+03 +5063 1.11200e+04 5.14800e+03 +5064 1.12160e+04 5.14800e+03 +5065 1.13440e+04 5.14800e+03 +5066 1.14880e+04 5.14800e+03 +5067 1.16800e+04 5.14800e+03 +5068 1.17600e+04 5.14800e+03 +5069 1.19040e+04 5.14800e+03 +5070 1.20480e+04 5.14800e+03 +5071 1.21760e+04 5.14800e+03 +5072 1.23360e+04 5.14800e+03 +5073 1.24320e+04 5.14800e+03 +5074 1.25280e+04 5.14800e+03 +5075 1.26880e+04 5.14800e+03 +5076 1.28000e+04 5.14800e+03 +5077 1.29120e+04 5.14800e+03 +5078 1.31150e+04 5.14800e+03 +5079 1.31360e+04 6.18200e+03 +5080 1.31360e+04 7.28200e+03 +5081 1.31360e+04 8.53600e+03 +5082 1.31360e+04 9.17400e+03 +5083 1.31360e+04 1.14290e+04 +5084 1.33280e+04 4.48800e+03 +5085 1.34560e+04 4.48800e+03 +5086 1.35200e+04 4.48800e+03 +5087 1.36160e+04 4.48800e+03 +5088 1.38720e+04 4.48800e+03 +5089 1.40800e+04 4.48800e+03 +5090 1.42240e+04 4.48800e+03 +5091 1.44000e+04 4.48800e+03 +5092 1.45120e+04 4.48800e+03 +5093 1.47360e+04 4.48800e+03 +5094 1.48110e+04 4.48800e+03 +5095 1.31360e+04 4.84000e+03 +5096 1.48320e+04 2.53000e+03 +5097 1.48320e+04 4.38900e+03 +5098 6.00000e+03 3.19000e+02 +5099 6.00000e+03 2.02400e+03 +5100 6.00000e+03 4.04800e+03 +5101 6.00000e+03 5.32400e+03 +5102 6.00000e+03 8.23900e+03 +5103 6.06400e+03 8.45900e+03 +5104 6.06400e+03 1.08020e+04 +5105 6.06400e+03 1.14950e+04 +5106 1.71680e+04 1.05600e+04 +5107 1.71680e+04 1.15280e+04 +5108 1.72320e+04 1.78200e+03 +5109 1.72320e+04 4.09200e+03 +5110 1.72320e+04 6.68800e+03 +5111 1.72320e+04 7.72200e+03 +5112 4.68800e+03 2.50800e+03 +5113 4.68800e+03 5.32400e+03 +5114 4.68800e+03 7.71100e+03 +5115 4.75200e+03 8.86600e+03 +5116 4.75200e+03 1.14950e+04 +5117 1.72320e+04 1.05600e+04 +5118 1.72320e+04 1.15280e+04 +5119 1.72640e+04 8.84400e+03 +5120 1.72960e+04 1.78200e+03 +5121 1.72960e+04 4.09200e+03 +5122 1.72960e+04 6.68800e+03 +5123 1.72960e+04 7.72200e+03 +5124 1.72960e+04 8.59100e+03 +5125 1.04160e+04 2.31000e+02 +5126 1.04160e+04 1.01200e+03 +5127 1.04160e+04 1.76000e+03 +5128 1.04160e+04 7.39200e+03 +5129 3.63200e+03 3.11300e+03 +5130 3.63200e+03 7.13900e+03 +5131 3.69600e+03 7.48000e+03 +5132 3.80800e+03 7.48000e+03 +5133 3.88800e+03 7.48000e+03 +5134 3.95200e+03 7.48000e+03 +5135 4.09600e+03 7.48000e+03 +5136 4.17600e+03 7.48000e+03 +5137 4.25600e+03 7.48000e+03 +5138 4.33600e+03 7.48000e+03 +5139 4.43200e+03 7.48000e+03 +5140 4.49600e+03 7.48000e+03 +5141 4.63500e+03 7.48000e+03 +5142 4.65600e+03 7.68900e+03 +5143 4.65600e+03 8.86600e+03 +5144 4.65600e+03 1.14950e+04 +5145 1.05760e+04 2.31000e+02 +5146 1.05760e+04 1.02300e+03 +5147 1.06400e+04 1.23200e+03 +5148 1.07040e+04 1.23200e+03 +5149 1.08000e+04 1.23200e+03 +5150 1.09280e+04 1.23200e+03 +5151 1.10560e+04 1.23200e+03 +5152 1.11200e+04 1.23200e+03 +5153 1.12160e+04 1.23200e+03 +5154 1.13440e+04 1.23200e+03 +5155 1.14880e+04 1.23200e+03 +5156 1.16960e+04 1.23200e+03 +5157 1.17600e+04 1.23200e+03 +5158 1.19040e+04 1.23200e+03 +5159 1.20480e+04 1.23200e+03 +5160 1.21760e+04 1.23200e+03 +5161 1.23360e+04 1.23200e+03 +5162 1.24320e+04 1.23200e+03 +5163 1.25280e+04 1.23200e+03 +5164 1.26880e+04 1.23200e+03 +5165 1.28160e+04 1.23200e+03 +5166 1.29440e+04 1.23200e+03 +5167 1.31200e+04 1.23200e+03 +5168 1.32000e+04 1.48500e+03 +5169 1.32000e+04 2.31000e+03 +5170 1.32000e+04 3.12400e+03 +5171 1.32000e+04 3.93800e+03 +5172 1.32000e+04 4.92800e+03 +5173 1.32000e+04 7.28200e+03 +5174 1.32000e+04 8.53600e+03 +5175 1.32000e+04 9.17400e+03 +5176 1.32000e+04 1.14290e+04 +5177 1.33440e+04 1.23200e+03 +5178 1.34880e+04 1.23200e+03 +5179 1.36320e+04 1.23200e+03 +5180 1.38720e+04 1.23200e+03 +5181 1.40960e+04 1.23200e+03 +5182 1.42240e+04 1.23200e+03 +5183 1.44000e+04 1.23200e+03 +5184 1.45120e+04 1.23200e+03 +5185 1.47360e+04 1.23200e+03 +5186 1.48000e+04 1.23200e+03 +5187 1.49120e+04 1.23200e+03 +5188 1.51200e+04 1.23200e+03 +5189 1.53280e+04 1.23200e+03 +5190 1.54080e+04 1.23200e+03 +5191 1.54720e+04 1.23200e+03 +5192 1.56000e+04 1.23200e+03 +5193 1.21440e+04 1.11650e+04 +5194 1.22080e+04 9.50400e+03 +5195 1.23840e+04 9.50400e+03 +5196 1.25280e+04 9.50400e+03 +5197 1.26560e+04 9.50400e+03 +5198 1.28320e+04 9.50400e+03 +5199 1.29440e+04 9.50400e+03 +5200 1.30880e+04 9.50400e+03 +5201 1.32320e+04 9.50400e+03 +5202 1.33920e+04 9.50400e+03 +5203 1.35360e+04 9.50400e+03 +5204 1.36320e+04 9.50400e+03 +5205 1.37440e+04 9.50400e+03 +5206 1.39680e+04 9.50400e+03 +5207 1.41920e+04 9.50400e+03 +5208 1.42720e+04 9.50400e+03 +5209 1.43840e+04 9.50400e+03 +5210 1.44480e+04 9.50400e+03 +5211 1.47040e+04 9.50400e+03 +5212 1.47840e+04 9.50400e+03 +5213 1.51200e+04 9.50400e+03 +5214 1.53920e+04 9.50400e+03 +5215 1.55200e+04 9.50400e+03 +5216 1.57120e+04 9.50400e+03 +5217 1.57920e+04 9.50400e+03 +5218 1.58560e+04 9.50400e+03 +5219 1.59840e+04 9.50400e+03 +5220 1.60800e+04 9.50400e+03 +5221 1.62080e+04 9.50400e+03 +5222 1.64320e+04 9.50400e+03 +5223 1.64960e+04 9.50400e+03 +5224 1.65920e+04 9.50400e+03 +5225 1.66880e+04 9.50400e+03 +5226 1.67840e+04 9.50400e+03 +5227 1.69120e+04 9.50400e+03 +5228 1.70400e+04 9.50400e+03 +5229 1.71360e+04 9.50400e+03 +5230 1.72800e+04 9.50400e+03 +5231 1.73600e+04 1.78200e+03 +5232 1.73600e+04 4.09200e+03 +5233 1.73600e+04 6.68800e+03 +5234 1.73600e+04 7.72200e+03 +5235 1.73600e+04 8.58000e+03 +5236 1.09920e+04 2.31000e+02 +5237 1.09920e+04 9.02000e+02 +5238 1.09920e+04 1.76000e+03 +5239 1.09920e+04 4.48800e+03 +5240 1.09920e+04 7.39200e+03 +5241 1.10280e+04 1.02520e+04 +5242 1.12160e+04 1.02520e+04 +5243 1.13120e+04 1.02520e+04 +5244 1.14400e+04 1.02520e+04 +5245 1.15200e+04 1.02520e+04 +5246 1.16000e+04 1.02520e+04 +5247 1.17120e+04 1.02520e+04 +5248 1.17920e+04 1.02520e+04 +5249 1.19840e+04 1.02520e+04 +5250 1.20800e+04 1.02520e+04 +5251 1.22080e+04 1.02520e+04 +5252 1.23840e+04 1.02520e+04 +5253 1.25280e+04 1.02520e+04 +5254 1.26560e+04 1.02520e+04 +5255 1.28160e+04 1.02520e+04 +5256 1.29440e+04 1.02520e+04 +5257 1.30880e+04 1.02520e+04 +5258 1.32320e+04 1.02520e+04 +5259 1.34030e+04 1.02520e+04 +5260 1.34240e+04 1.14290e+04 +5261 1.35360e+04 1.02520e+04 +5262 1.36960e+04 1.02520e+04 +5263 1.39680e+04 1.02520e+04 +5264 1.41920e+04 1.02520e+04 +5265 1.42720e+04 1.02520e+04 +5266 1.43840e+04 1.02520e+04 +5267 1.44480e+04 1.02520e+04 +5268 1.47040e+04 1.02520e+04 +5269 1.47840e+04 1.02520e+04 +5270 1.51200e+04 1.02520e+04 +5271 1.53920e+04 1.02520e+04 +5272 1.55200e+04 1.02520e+04 +5273 1.57120e+04 1.02520e+04 +5274 1.57920e+04 1.02520e+04 +5275 1.58560e+04 1.02520e+04 +5276 1.60480e+04 1.02520e+04 +5277 1.62190e+04 1.02520e+04 +5278 1.62400e+04 2.22200e+03 +5279 1.62400e+04 3.74000e+03 +5280 1.62400e+04 5.36800e+03 +5281 1.62400e+04 6.79800e+03 +5282 1.62400e+04 7.76600e+03 +5283 1.04480e+04 2.31000e+02 +5284 1.04480e+04 1.01200e+03 +5285 1.04480e+04 1.76000e+03 +5286 1.04480e+04 7.39200e+03 +5287 5.71200e+03 8.45900e+03 +5288 5.71200e+03 1.08020e+04 +5289 5.72800e+03 8.31600e+03 +5290 5.74400e+03 2.02400e+03 +5291 5.74400e+03 4.04800e+03 +5292 5.74400e+03 8.23900e+03 +5293 1.74240e+04 1.78200e+03 +5294 1.74240e+04 4.09200e+03 +5295 1.74240e+04 6.69900e+03 +5296 1.75040e+04 7.12800e+03 +5297 1.77120e+04 7.12800e+03 +5298 1.78080e+04 7.76600e+03 +5299 1.78080e+04 8.73400e+03 +5300 1.78080e+04 9.60300e+03 +5301 1.78080e+04 1.06700e+04 +5302 9.52000e+03 7.12800e+03 +5303 9.53600e+03 3.60800e+03 +5304 9.55200e+03 2.31000e+02 +5305 9.55200e+03 1.01200e+03 +5306 9.55200e+03 1.76000e+03 +5307 1.73280e+04 1.78200e+03 +5308 1.73280e+04 4.09200e+03 +5309 1.73280e+04 6.68800e+03 +5310 1.73280e+04 7.72200e+03 +5311 1.73280e+04 8.58000e+03 +5312 1.73280e+04 1.06700e+04 +5313 1.73280e+04 1.15280e+04 +5314 1.90880e+04 1.15280e+04 +5315 1.14080e+04 2.31000e+02 +5316 1.14080e+04 9.02000e+02 +5317 1.14880e+04 1.98000e+03 +5318 1.16960e+04 1.98000e+03 +5319 1.17600e+04 1.98000e+03 +5320 1.19040e+04 1.98000e+03 +5321 1.20480e+04 1.98000e+03 +5322 1.21760e+04 1.98000e+03 +5323 1.23360e+04 1.98000e+03 +5324 1.24320e+04 1.98000e+03 +5325 1.25280e+04 1.98000e+03 +5326 1.26880e+04 1.98000e+03 +5327 1.28160e+04 1.98000e+03 +5328 1.29440e+04 1.98000e+03 +5329 1.31200e+04 1.98000e+03 +5330 1.33440e+04 1.98000e+03 +5331 1.34670e+04 1.98000e+03 +5332 1.34880e+04 2.67300e+03 +5333 1.34880e+04 3.93800e+03 +5334 1.34880e+04 4.92800e+03 +5335 1.34880e+04 7.28200e+03 +5336 1.34880e+04 8.53600e+03 +5337 1.34880e+04 9.17400e+03 +5338 1.34880e+04 1.14290e+04 +5339 1.35090e+04 1.45200e+03 +5340 1.36320e+04 1.45200e+03 +5341 1.38720e+04 1.45200e+03 +5342 1.40960e+04 1.45200e+03 +5343 1.42240e+04 1.45200e+03 +5344 1.44000e+04 1.45200e+03 +5345 1.45120e+04 1.45200e+03 +5346 1.47360e+04 1.45200e+03 +5347 1.48000e+04 1.45200e+03 +5348 1.49120e+04 1.45200e+03 +5349 1.51200e+04 1.45200e+03 +5350 1.53280e+04 1.45200e+03 +5351 1.54080e+04 1.45200e+03 +5352 1.54720e+04 1.45200e+03 +5353 1.56000e+04 1.45200e+03 +5354 1.57120e+04 1.45200e+03 +5355 1.57920e+04 1.45200e+03 +5356 1.58880e+04 1.45200e+03 +5357 1.59840e+04 1.45200e+03 +5358 1.61280e+04 1.45200e+03 +5359 1.62720e+04 1.45200e+03 +5360 1.64000e+04 1.45200e+03 +5361 1.65440e+04 1.45200e+03 +5362 1.66560e+04 1.45200e+03 +5363 1.67520e+04 1.45200e+03 +5364 1.69120e+04 1.45200e+03 +5365 1.70400e+04 1.45200e+03 +5366 1.34880e+04 1.73800e+03 +5367 1.71040e+04 1.13300e+03 +5368 1.11200e+04 1.13850e+04 +5369 1.11840e+04 2.31000e+02 +5370 1.11840e+04 9.02000e+02 +5371 1.11840e+04 1.76000e+03 +5372 1.11840e+04 4.48800e+03 +5373 1.11840e+04 7.39200e+03 +5374 5.68000e+03 8.38200e+03 +5375 5.68000e+03 1.08020e+04 +5376 5.69600e+03 7.70000e+03 +5377 5.71200e+03 2.02400e+03 +5378 5.71200e+03 4.04800e+03 +5379 4.30400e+03 2.36500e+03 +5380 4.30400e+03 5.43400e+03 +5381 4.30400e+03 6.90800e+03 +5382 4.30400e+03 7.81000e+03 +5383 2.12800e+03 1.00320e+04 +5384 2.14400e+03 8.93200e+03 +5385 2.16000e+03 3.11300e+03 +5386 2.16000e+03 6.64400e+03 +5387 2.16000e+03 8.78900e+03 +5388 5.42400e+03 7.18300e+03 +5389 5.42400e+03 1.06920e+04 +5390 5.44000e+03 6.99600e+03 +5391 5.45600e+03 2.17800e+03 +5392 5.45600e+03 4.04800e+03 +5393 5.45600e+03 6.40200e+03 +5394 1.11520e+04 2.31000e+02 +5395 1.11520e+04 9.02000e+02 +5396 1.11520e+04 1.76000e+03 +5397 1.11520e+04 4.48800e+03 +5398 1.11520e+04 7.39200e+03 +5399 1.11520e+04 1.13850e+04 +5400 1.56320e+04 2.53000e+03 +5401 1.56320e+04 5.36800e+03 +5402 1.56320e+04 6.79800e+03 +5403 1.56320e+04 8.42600e+03 +5404 1.56320e+04 9.87800e+03 +5405 1.56320e+04 1.06260e+04 +5406 1.56320e+04 1.14290e+04 +5407 1.61760e+04 2.22200e+03 +5408 1.61760e+04 3.74000e+03 +5409 1.61760e+04 5.36800e+03 +5410 1.61760e+04 6.79800e+03 +5411 1.61760e+04 7.76600e+03 +5412 1.61760e+04 8.73400e+03 +5413 1.61760e+04 1.06260e+04 +5414 1.61760e+04 1.14290e+04 +5415 5.39200e+03 7.19400e+03 +5416 5.39200e+03 1.06920e+04 +5417 5.40800e+03 6.55600e+03 +5418 5.42400e+03 2.17800e+03 +5419 5.42400e+03 4.04800e+03 +5420 5.42400e+03 6.41300e+03 +5421 4.46400e+03 2.57400e+03 +5422 4.46400e+03 5.43400e+03 +5423 4.46400e+03 7.92000e+03 +5424 4.52800e+03 1.06920e+04 +5425 4.62400e+03 1.06920e+04 +5426 4.68800e+03 1.06920e+04 +5427 4.78400e+03 1.06920e+04 +5428 4.94400e+03 1.06920e+04 +5429 5.07200e+03 1.07910e+04 +5430 5.07200e+03 1.14950e+04 +5431 1.83520e+04 3.61900e+03 +5432 1.83520e+04 7.88700e+03 +5433 1.83720e+04 8.18400e+03 +5434 1.84640e+04 8.18400e+03 +5435 1.86670e+04 8.18400e+03 +5436 1.87040e+04 8.40400e+03 +5437 1.87040e+04 1.06700e+04 +5438 1.87040e+04 1.15280e+04 +5439 4.52800e+03 2.57400e+03 +5440 4.52800e+03 5.43400e+03 +5441 4.52800e+03 7.93100e+03 +5442 4.62400e+03 8.14000e+03 +5443 4.68800e+03 8.14000e+03 +5444 4.78400e+03 8.14000e+03 +5445 4.94400e+03 8.14000e+03 +5446 5.13600e+03 8.14000e+03 +5447 5.48800e+03 8.37100e+03 +5448 5.48800e+03 1.06920e+04 +5449 1.68000e+03 1.00320e+04 +5450 1.70000e+03 8.93200e+03 +5451 1.77600e+03 8.93200e+03 +5452 1.88300e+03 8.93200e+03 +5453 1.90400e+03 3.11300e+03 +5454 1.90400e+03 6.75400e+03 +5455 1.90400e+03 8.05200e+03 +5456 1.90400e+03 8.78900e+03 +5457 1.91200e+04 1.15280e+04 +5458 1.91220e+04 8.03000e+03 +5459 1.82560e+04 3.45400e+03 +5460 1.82560e+04 6.95200e+03 +5461 1.82720e+04 7.12800e+03 +5462 1.82880e+04 7.87600e+03 +5463 1.82880e+04 9.42700e+03 +5464 1.82880e+04 1.06700e+04 +5465 4.75200e+03 2.61800e+03 +5466 4.75200e+03 5.22500e+03 +5467 4.77200e+03 5.36800e+03 +5468 4.84800e+03 5.36800e+03 +5469 4.91200e+03 5.36800e+03 +5470 5.04000e+03 5.36800e+03 +5471 5.29600e+03 5.36800e+03 +5472 5.66400e+03 5.36800e+03 +5473 5.90400e+03 5.46700e+03 +5474 5.90400e+03 8.38200e+03 +5475 5.90400e+03 1.08020e+04 +5476 1.26400e+03 6.78700e+03 +5477 1.26400e+03 7.83200e+03 +5478 1.26400e+03 9.65800e+03 +5479 1.28400e+03 6.55600e+03 +5480 1.45600e+03 6.55600e+03 +5481 1.55200e+03 6.55600e+03 +5482 1.64800e+03 6.55600e+03 +5483 1.76000e+03 6.55600e+03 +5484 1.84000e+03 3.11300e+03 +5485 1.78720e+04 9.60300e+03 +5486 1.78720e+04 1.06700e+04 +5487 1.79520e+04 8.84400e+03 +5488 1.82240e+04 3.61900e+03 +5489 1.82240e+04 7.76600e+03 +5490 4.81600e+03 2.61800e+03 +5491 4.81600e+03 6.40200e+03 +5492 4.81600e+03 7.70000e+03 +5493 4.81600e+03 8.72300e+03 +5494 4.94400e+03 8.84400e+03 +5495 5.13600e+03 8.84400e+03 +5496 5.55200e+03 8.84400e+03 +5497 5.63200e+03 8.84400e+03 +5498 5.79200e+03 8.84400e+03 +5499 5.96800e+03 8.84400e+03 +5500 6.03200e+03 8.84400e+03 +5501 6.11200e+03 8.84400e+03 +5502 6.19200e+03 8.84400e+03 +5503 6.32000e+03 1.14950e+04 +5504 8.48000e+02 9.92200e+03 +5505 9.12000e+02 8.18400e+03 +5506 9.76000e+02 8.18400e+03 +5507 1.10400e+03 8.18400e+03 +5508 1.23200e+03 8.18400e+03 +5509 1.32800e+03 8.18400e+03 +5510 1.53600e+03 8.18400e+03 +5511 1.61600e+03 3.11300e+03 +5512 1.61600e+03 7.01800e+03 +5513 1.61600e+03 8.06300e+03 +5514 1.78400e+04 8.72300e+03 +5515 1.78400e+04 9.60300e+03 +5516 1.78400e+04 1.06700e+04 +5517 1.78600e+04 8.62400e+03 +5518 1.79360e+04 2.31000e+02 +5519 1.79360e+04 1.62800e+03 +5520 1.79360e+04 4.79600e+03 +5521 1.79360e+04 7.76600e+03 +5522 1.80000e+04 2.31000e+02 +5523 1.80000e+04 1.59500e+03 +5524 1.80160e+04 2.37600e+03 +5525 1.80320e+04 4.52100e+03 +5526 1.80320e+04 7.76600e+03 +5527 1.80320e+04 1.06700e+04 +5528 1.74240e+04 8.61300e+03 +5529 1.74240e+04 9.60300e+03 +5530 1.74240e+04 1.06700e+04 +5531 1.74240e+04 1.15280e+04 +5532 1.74880e+04 8.40400e+03 +5533 1.75520e+04 8.40400e+03 +5534 1.77120e+04 8.40400e+03 +5535 1.78560e+04 8.40400e+03 +5536 1.79680e+04 8.40400e+03 +5537 1.81920e+04 8.40400e+03 +5538 1.83680e+04 8.40400e+03 +5539 1.84640e+04 8.40400e+03 +5540 1.85440e+04 4.03700e+03 +5541 4.32000e+02 9.70200e+03 +5542 4.68000e+02 7.26000e+03 +5543 5.60000e+02 7.26000e+03 +5544 7.36000e+02 7.26000e+03 +5545 8.48000e+02 7.26000e+03 +5546 9.12000e+02 7.26000e+03 +5547 9.76000e+02 7.26000e+03 +5548 1.07200e+03 7.26000e+03 +5549 1.15200e+03 7.26000e+03 +5550 1.31200e+03 7.26000e+03 +5551 1.52000e+03 3.11300e+03 +5552 1.52000e+03 7.02900e+03 +5553 1.12480e+04 2.31000e+02 +5554 1.12480e+04 9.02000e+02 +5555 1.13440e+04 1.76000e+03 +5556 1.14880e+04 1.76000e+03 +5557 1.16960e+04 1.76000e+03 +5558 1.17600e+04 1.76000e+03 +5559 1.19040e+04 1.76000e+03 +5560 1.20480e+04 1.76000e+03 +5561 1.21760e+04 1.76000e+03 +5562 1.23040e+04 4.48800e+03 +5563 1.23040e+04 5.96200e+03 +5564 1.23040e+04 7.39200e+03 +5565 1.23040e+04 1.11650e+04 +5566 1.81600e+04 3.61900e+03 +5567 1.81600e+04 7.76600e+03 +5568 1.81600e+04 1.06700e+04 +5569 1.80960e+04 2.31000e+02 +5570 1.80960e+04 3.74000e+03 +5571 1.80960e+04 7.76600e+03 +5572 1.80960e+04 1.06700e+04 +5573 1.10880e+04 2.31000e+02 +5574 1.10880e+04 9.02000e+02 +5575 1.10880e+04 1.76000e+03 +5576 1.10880e+04 4.48800e+03 +5577 1.11080e+04 5.36800e+03 +5578 1.12160e+04 5.36800e+03 +5579 1.13440e+04 5.36800e+03 +5580 1.14880e+04 5.36800e+03 +5581 1.16800e+04 5.36800e+03 +5582 1.17600e+04 5.36800e+03 +5583 1.19040e+04 5.36800e+03 +5584 1.20480e+04 5.36800e+03 +5585 1.21760e+04 5.36800e+03 +5586 1.23360e+04 5.36800e+03 +5587 1.24320e+04 5.36800e+03 +5588 1.25280e+04 5.36800e+03 +5589 1.26880e+04 5.36800e+03 +5590 1.28000e+04 5.36800e+03 +5591 1.29120e+04 5.36800e+03 +5592 1.31040e+04 5.36800e+03 +5593 1.33280e+04 5.36800e+03 +5594 1.34560e+04 5.36800e+03 +5595 1.35200e+04 5.36800e+03 +5596 1.35840e+04 5.46700e+03 +5597 1.35840e+04 7.28200e+03 +5598 1.35840e+04 8.86600e+03 +5599 1.35840e+04 1.15390e+04 +5600 1.06720e+04 2.31000e+02 +5601 1.06720e+04 9.02000e+02 +5602 1.06720e+04 1.76000e+03 +5603 1.08000e+04 5.58800e+03 +5604 1.09280e+04 5.58800e+03 +5605 1.10880e+04 5.58800e+03 +5606 1.12160e+04 5.58800e+03 +5607 1.13440e+04 5.58800e+03 +5608 1.14880e+04 5.58800e+03 +5609 1.16800e+04 5.58800e+03 +5610 1.17600e+04 5.58800e+03 +5611 1.19040e+04 5.58800e+03 +5612 1.20480e+04 5.58800e+03 +5613 1.21760e+04 5.58800e+03 +5614 1.23360e+04 5.58800e+03 +5615 1.24320e+04 5.58800e+03 +5616 1.25280e+04 5.58800e+03 +5617 1.26880e+04 5.58800e+03 +5618 1.28000e+04 5.58800e+03 +5619 1.29120e+04 5.58800e+03 +5620 1.31040e+04 5.58800e+03 +5621 1.33280e+04 6.40200e+03 +5622 1.33280e+04 7.39200e+03 +5623 1.33280e+04 8.53600e+03 +5624 1.33280e+04 9.17400e+03 +5625 1.33280e+04 1.14290e+04 +5626 3.79200e+03 2.90400e+03 +5627 3.79200e+03 5.85200e+03 +5628 3.81300e+03 6.02800e+03 +5629 3.88800e+03 6.02800e+03 +5630 3.95200e+03 6.02800e+03 +5631 4.09600e+03 6.02800e+03 +5632 4.17600e+03 6.02800e+03 +5633 4.25600e+03 6.02800e+03 +5634 4.43200e+03 6.02800e+03 +5635 4.49600e+03 6.02800e+03 +5636 4.56000e+03 6.02800e+03 +5637 4.64000e+03 6.02800e+03 +5638 4.75200e+03 6.02800e+03 +5639 4.84800e+03 6.02800e+03 +5640 4.91200e+03 6.02800e+03 +5641 5.04000e+03 6.02800e+03 +5642 5.32800e+03 6.02800e+03 +5643 5.66400e+03 6.02800e+03 +5644 6.09600e+03 6.02800e+03 +5645 6.19200e+03 6.02800e+03 +5646 6.25600e+03 6.02800e+03 +5647 6.41600e+03 6.02800e+03 +5648 6.55500e+03 6.02800e+03 +5649 6.57600e+03 8.64600e+03 +5650 6.57600e+03 9.43800e+03 +5651 6.57600e+03 1.14950e+04 +5652 4.04800e+03 2.95900e+03 +5653 4.04800e+03 6.90800e+03 +5654 4.12800e+03 1.00320e+04 +5655 4.27200e+03 1.00320e+04 +5656 4.40000e+03 1.00320e+04 +5657 4.52800e+03 1.00320e+04 +5658 4.62400e+03 1.00320e+04 +5659 4.68800e+03 1.00320e+04 +5660 4.78400e+03 1.00320e+04 +5661 4.94400e+03 1.00320e+04 +5662 5.00800e+03 1.00320e+04 +5663 5.13600e+03 1.00320e+04 +5664 5.26400e+03 1.00320e+04 +5665 5.55200e+03 1.00320e+04 +5666 5.63200e+03 1.00320e+04 +5667 5.80800e+03 1.00320e+04 +5668 5.96800e+03 1.00320e+04 +5669 6.03200e+03 1.00320e+04 +5670 6.11200e+03 1.00320e+04 +5671 6.19200e+03 1.00320e+04 +5672 6.35200e+03 1.00320e+04 +5673 6.44800e+03 1.00320e+04 +5674 6.67200e+03 1.00320e+04 +5675 6.84800e+03 1.00320e+04 +5676 6.92800e+03 1.08020e+04 +5677 4.40000e+03 2.36500e+03 +5678 4.40000e+03 5.43400e+03 +5679 4.40000e+03 7.81000e+03 +5680 4.52800e+03 9.59200e+03 +5681 4.62400e+03 9.59200e+03 +5682 4.68800e+03 9.59200e+03 +5683 4.78400e+03 9.59200e+03 +5684 4.96000e+03 9.59200e+03 +5685 5.13600e+03 9.59200e+03 +5686 5.55200e+03 9.59200e+03 +5687 5.63200e+03 9.59200e+03 +5688 5.80800e+03 9.59200e+03 +5689 5.96800e+03 9.59200e+03 +5690 6.03200e+03 9.59200e+03 +5691 6.11200e+03 9.59200e+03 +5692 6.19200e+03 9.59200e+03 +5693 6.35200e+03 9.59200e+03 +5694 6.41600e+03 1.14950e+04 +5695 1.02560e+04 2.31000e+02 +5696 1.02560e+04 1.01200e+03 +5697 1.02560e+04 1.76000e+03 +5698 1.02560e+04 7.51300e+03 +5699 1.03840e+04 7.78800e+03 +5700 1.04960e+04 7.78800e+03 +5701 1.06560e+04 7.78800e+03 +5702 1.08160e+04 7.78800e+03 +5703 1.09280e+04 7.78800e+03 +5704 1.10400e+04 7.78800e+03 +5705 1.11200e+04 7.78800e+03 +5706 1.12160e+04 7.78800e+03 +5707 1.13280e+04 7.78800e+03 +5708 1.15040e+04 7.78800e+03 +5709 1.15680e+04 7.78800e+03 +5710 1.16320e+04 7.78800e+03 +5711 1.16960e+04 7.78800e+03 +5712 1.17600e+04 7.78800e+03 +5713 1.18240e+04 7.78800e+03 +5714 1.19680e+04 7.78800e+03 +5715 1.21920e+04 7.78800e+03 +5716 1.22720e+04 7.78800e+03 +5717 1.23840e+04 7.78800e+03 +5718 1.25280e+04 7.78800e+03 +5719 1.26560e+04 7.78800e+03 +5720 1.28000e+04 7.78800e+03 +5721 1.28800e+04 7.78800e+03 +5722 1.29440e+04 7.78800e+03 +5723 1.30880e+04 7.78800e+03 +5724 1.32750e+04 7.78800e+03 +5725 1.32960e+04 8.53600e+03 +5726 1.32960e+04 9.17400e+03 +5727 1.32960e+04 1.14290e+04 +5728 9.84000e+03 2.31000e+02 +5729 9.84000e+03 1.01200e+03 +5730 9.84000e+03 1.76000e+03 +5731 9.86000e+03 3.16800e+03 +5732 1.00000e+04 3.16800e+03 +5733 1.00960e+04 3.16800e+03 +5734 1.02240e+04 3.16800e+03 +5735 1.02880e+04 3.16800e+03 +5736 1.03840e+04 3.16800e+03 +5737 1.05120e+04 3.16800e+03 +5738 1.05760e+04 3.16800e+03 +5739 1.06400e+04 3.16800e+03 +5740 1.07040e+04 3.16800e+03 +5741 1.08000e+04 3.16800e+03 +5742 1.09280e+04 3.16800e+03 +5743 1.10560e+04 3.16800e+03 +5744 1.11200e+04 3.16800e+03 +5745 1.12160e+04 3.16800e+03 +5746 1.13440e+04 3.16800e+03 +5747 1.14880e+04 3.16800e+03 +5748 1.16960e+04 3.16800e+03 +5749 1.17600e+04 3.16800e+03 +5750 1.19040e+04 3.16800e+03 +5751 1.20480e+04 3.16800e+03 +5752 1.21760e+04 3.16800e+03 +5753 1.23360e+04 3.16800e+03 +5754 1.24320e+04 3.16800e+03 +5755 1.25440e+04 3.16800e+03 +5756 1.26880e+04 3.16800e+03 +5757 1.27520e+04 3.16800e+03 +5758 1.28160e+04 3.16800e+03 +5759 1.29280e+04 3.16800e+03 +5760 1.30400e+04 3.26700e+03 +5761 1.30400e+04 3.93800e+03 +5762 1.30400e+04 4.70800e+03 +5763 1.30400e+04 6.07200e+03 +5764 1.30400e+04 7.28200e+03 +5765 1.30400e+04 8.53600e+03 +5766 1.30400e+04 9.17400e+03 +5767 1.30400e+04 1.14290e+04 +5768 4.08000e+03 2.31000e+03 +5769 4.08000e+03 4.66400e+03 +5770 4.10100e+03 4.84000e+03 +5771 4.17600e+03 4.84000e+03 +5772 4.25600e+03 4.84000e+03 +5773 4.43200e+03 4.84000e+03 +5774 4.49600e+03 4.84000e+03 +5775 4.56000e+03 4.84000e+03 +5776 4.65600e+03 4.84000e+03 +5777 4.72000e+03 4.84000e+03 +5778 4.78400e+03 4.84000e+03 +5779 4.84800e+03 4.84000e+03 +5780 4.91200e+03 4.84000e+03 +5781 5.04000e+03 4.84000e+03 +5782 5.29600e+03 4.84000e+03 +5783 5.66400e+03 4.84000e+03 +5784 5.87200e+03 4.84000e+03 +5785 6.12800e+03 4.84000e+03 +5786 6.19200e+03 4.84000e+03 +5787 6.25600e+03 4.84000e+03 +5788 6.41600e+03 4.84000e+03 +5789 6.56000e+03 4.84000e+03 +5790 6.67200e+03 4.84000e+03 +5791 6.78400e+03 4.84000e+03 +5792 6.89600e+03 4.84000e+03 +5793 7.00800e+03 4.84000e+03 +5794 7.08800e+03 4.84000e+03 +5795 7.18400e+03 4.84000e+03 +5796 7.28000e+03 4.98300e+03 +5797 7.28000e+03 7.12800e+03 +5798 7.28000e+03 8.75600e+03 +5799 7.28000e+03 1.08020e+04 +5800 4.33600e+03 2.36500e+03 +5801 4.33600e+03 5.43400e+03 +5802 4.43200e+03 6.77600e+03 +5803 4.49600e+03 6.77600e+03 +5804 4.64000e+03 6.77600e+03 +5805 4.76800e+03 6.77600e+03 +5806 4.84800e+03 6.77600e+03 +5807 4.91200e+03 6.77600e+03 +5808 5.04000e+03 6.77600e+03 +5809 5.42400e+03 6.77600e+03 +5810 5.64800e+03 6.77600e+03 +5811 5.93600e+03 6.77600e+03 +5812 6.09600e+03 6.77600e+03 +5813 6.19200e+03 6.77600e+03 +5814 6.41600e+03 6.77600e+03 +5815 6.54400e+03 6.77600e+03 +5816 6.67200e+03 6.77600e+03 +5817 6.76800e+03 6.77600e+03 +5818 6.86400e+03 6.77600e+03 +5819 6.99200e+03 6.77600e+03 +5820 7.08800e+03 6.77600e+03 +5821 7.18400e+03 6.77600e+03 +5822 7.32800e+03 6.77600e+03 +5823 7.61100e+03 6.77600e+03 +5824 7.63200e+03 6.89700e+03 +5825 7.63200e+03 8.75600e+03 +5826 1.80640e+04 2.31000e+02 +5827 1.80640e+04 3.74000e+03 +5828 1.80640e+04 7.76600e+03 +5829 1.80640e+04 1.06700e+04 +5830 6.96000e+03 6.38000e+02 +5831 6.96000e+03 1.51800e+03 +5832 6.96000e+03 2.57400e+03 +5833 6.96000e+03 4.04800e+03 +5834 6.99600e+03 5.58800e+03 +5835 7.08800e+03 5.58800e+03 +5836 7.18400e+03 5.58800e+03 +5837 7.32800e+03 5.58800e+03 +5838 7.58400e+03 5.58800e+03 +5839 7.66400e+03 5.58800e+03 +5840 7.76000e+03 5.58800e+03 +5841 7.82400e+03 5.58800e+03 +5842 7.88800e+03 5.58800e+03 +5843 7.95200e+03 5.58800e+03 +5844 8.04800e+03 5.58800e+03 +5845 8.17600e+03 5.58800e+03 +5846 8.33600e+03 5.58800e+03 +5847 8.43200e+03 5.58800e+03 +5848 8.49600e+03 5.58800e+03 +5849 8.75200e+03 5.58800e+03 +5850 8.84800e+03 5.58800e+03 +5851 8.99200e+03 5.58800e+03 +5852 9.44000e+03 5.58800e+03 +5853 9.55200e+03 5.58800e+03 +5854 9.68000e+03 5.58800e+03 +5855 9.82400e+03 5.58800e+03 +5856 1.00160e+04 5.58800e+03 +5857 1.01600e+04 5.58800e+03 +5858 1.02240e+04 5.58800e+03 +5859 1.02880e+04 7.39200e+03 +5860 9.20000e+03 8.80000e+02 +5861 9.20000e+03 1.76000e+03 +5862 9.20000e+03 2.94800e+03 +5863 9.44000e+03 5.80800e+03 +5864 9.55200e+03 5.80800e+03 +5865 9.68000e+03 5.80800e+03 +5866 9.81900e+03 5.80800e+03 +5867 1.32800e+03 9.91100e+03 +5868 1.58400e+03 9.15200e+03 +5869 1.71200e+03 9.15200e+03 +5870 1.77600e+03 9.15200e+03 +5871 1.90400e+03 9.15200e+03 +5872 2.06400e+03 9.15200e+03 +5873 2.24000e+03 9.15200e+03 +5874 2.46400e+03 9.15200e+03 +5875 2.73600e+03 9.15200e+03 +5876 2.96000e+03 9.15200e+03 +5877 3.02400e+03 9.15200e+03 +5878 3.16800e+03 9.15200e+03 +5879 3.31200e+03 9.15200e+03 +5880 3.50400e+03 9.15200e+03 +5881 3.56800e+03 3.11300e+03 +5882 3.56800e+03 7.12800e+03 +5883 3.56800e+03 9.05300e+03 +5884 9.42400e+03 3.52000e+02 +5885 9.44400e+03 5.72000e+02 +5886 9.58400e+03 5.72000e+02 +5887 9.68000e+03 5.72000e+02 +5888 9.80800e+03 5.72000e+02 +5889 9.87200e+03 5.72000e+02 +5890 1.00000e+04 5.72000e+02 +5891 1.00960e+04 5.72000e+02 +5892 1.02240e+04 5.72000e+02 +5893 1.02880e+04 5.72000e+02 +5894 1.03840e+04 5.72000e+02 +5895 1.05120e+04 5.72000e+02 +5896 1.06400e+04 5.72000e+02 +5897 1.07040e+04 5.72000e+02 +5898 1.08000e+04 5.72000e+02 +5899 1.09280e+04 5.72000e+02 +5900 1.10560e+04 5.72000e+02 +5901 1.11200e+04 5.72000e+02 +5902 1.12160e+04 5.72000e+02 +5903 1.13440e+04 5.72000e+02 +5904 1.14880e+04 5.72000e+02 +5905 1.16960e+04 5.72000e+02 +5906 1.17600e+04 5.72000e+02 +5907 1.19040e+04 5.72000e+02 +5908 1.20480e+04 5.72000e+02 +5909 1.21760e+04 5.72000e+02 +5910 1.23360e+04 5.72000e+02 +5911 1.24320e+04 5.72000e+02 +5912 1.25280e+04 5.72000e+02 +5913 1.26880e+04 5.72000e+02 +5914 1.28160e+04 5.72000e+02 +5915 1.29550e+04 5.72000e+02 +EOF diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/benchs/usa13509.tsp b/trunk/paradiseo-old-mo/tutorial/examples/tsp/benchs/usa13509.tsp new file mode 100644 index 000000000..a03eef901 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/benchs/usa13509.tsp @@ -0,0 +1,13519 @@ +NAME: usa13509 +TYPE: TSP +COMMENT: Cities with population at least 500 in the continental US. +COMMENT: Contributed by David Applegate and Andre Rohe, based on the +COMMENT: data set "US.lat-long" from the ftp site ftp.cs.toronto.edu. +COMMENT: The file US.lat-long.Z can be found in the directory /doc/geography. +DIMENSION: 13509 +EDGE_WEIGHT_TYPE: EUC_2D +NODE_COORD_SECTION +1 245552.778 817827.778 +2 247133.333 810905.556 +3 247205.556 810188.889 +4 249238.889 806280.556 +5 250111.111 805152.778 +6 254475.000 804794.444 +7 254683.333 804777.778 +8 254950.000 804294.444 +9 255622.222 803825.000 +10 255802.778 803469.444 +11 255972.222 803808.333 +12 256047.222 803538.889 +13 256147.222 803108.333 +14 256311.111 803691.667 +15 256788.889 803175.000 +16 256933.333 801630.556 +17 257072.222 802936.111 +18 257072.222 803258.333 +19 257211.111 802686.111 +20 257263.889 803555.556 +21 257544.444 803275.000 +22 257630.556 802963.889 +23 257738.889 801938.889 +24 257902.778 801302.778 +25 258100.000 803025.000 +26 258219.444 802897.222 +27 258402.778 803266.667 +28 258458.333 801541.667 +29 258550.000 801933.333 +30 258572.222 802783.333 +31 258627.778 801930.556 +32 258647.222 803247.222 +33 258702.778 802991.667 +34 258780.556 801258.333 +35 258822.222 801808.333 +36 258872.222 801313.889 +37 258897.222 801869.444 +38 258913.889 801272.222 +39 259013.889 974972.222 +40 259019.444 802505.556 +41 259305.556 803286.111 +42 259327.778 801627.778 +43 259402.778 802458.333 +44 259480.556 801508.333 +45 259502.778 801230.556 +46 259619.444 801769.444 +47 259647.222 801225.000 +48 259647.222 802416.667 +49 259722.222 817291.667 +50 259808.333 801486.111 +51 259869.444 802325.000 +52 259875.000 801750.000 +53 260027.778 802241.667 +54 260108.333 801497.222 +55 260519.444 801441.667 +56 260569.444 802719.444 +57 260644.444 802322.222 +58 260713.889 974761.111 +59 260730.556 972083.333 +60 260883.333 817263.889 +61 260919.444 979569.444 +62 261000.000 982627.778 +63 261005.556 972900.000 +64 261033.333 971644.444 +65 261219.444 801436.111 +66 261272.222 802333.333 +67 261322.222 976308.333 +68 261400.000 802136.111 +69 261416.667 817950.000 +70 261494.444 979133.333 +71 261586.111 978236.111 +72 261591.667 979905.556 +73 261600.000 801391.667 +74 261661.111 802086.111 +75 261700.000 980516.667 +76 261833.333 981227.778 +77 261902.778 976958.333 +78 261916.667 800966.667 +79 261944.444 981833.333 +80 262022.222 800941.667 +81 262030.556 982297.222 +82 262155.556 983250.000 +83 262188.889 817919.444 +84 262255.556 977577.778 +85 262350.000 975816.667 +86 262375.000 801250.000 +87 262441.667 802066.667 +88 262466.667 984811.111 +89 262483.333 977336.111 +90 262563.889 978247.222 +91 262613.889 818094.444 +92 262825.000 801072.222 +93 262869.444 983130.556 +94 262930.556 979927.778 +95 262936.111 800791.667 +96 262936.111 979602.778 +97 262983.333 979283.333 +98 263013.889 981630.556 +99 263180.556 801000.000 +100 263305.556 818269.444 +101 263394.444 817788.889 +102 263583.333 800833.333 +103 263727.778 979713.889 +104 263794.444 988200.000 +105 263991.667 800658.333 +106 264047.222 990155.556 +107 264119.444 977894.444 +108 264183.333 814175.000 +109 264422.222 980136.111 +110 264486.111 820225.000 +111 264516.667 819483.333 +112 264611.111 800730.556 +113 264669.444 818016.667 +114 265250.000 800666.667 +115 265266.667 800486.111 +116 265625.000 819497.222 +117 265661.111 800536.111 +118 265863.889 800522.222 +119 265886.111 800388.889 +120 266155.556 800572.222 +121 266233.333 801255.556 +122 266250.000 816250.000 +123 266402.778 818725.000 +124 266450.000 800761.111 +125 266636.111 807163.889 +126 266669.444 818802.778 +127 266744.444 818152.778 +128 266841.667 806677.778 +129 266908.333 801202.778 +130 267052.778 800366.667 +131 267088.889 817461.111 +132 267150.000 800536.111 +133 267372.222 809511.111 +134 267538.889 809338.889 +135 267600.000 800738.889 +136 267613.889 814386.111 +137 267750.000 800583.333 +138 267777.778 800358.333 +139 268000.000 800666.667 +140 268172.222 800822.222 +141 268197.222 806655.556 +142 268327.778 810933.333 +143 268416.667 810963.889 +144 268794.444 800536.111 +145 268833.333 822902.778 +146 269069.444 992711.111 +147 269097.222 820541.667 +148 269138.889 823272.222 +149 269294.444 820455.556 +150 269338.889 800944.444 +151 269466.667 820261.111 +152 269580.556 820672.222 +153 269613.889 819841.667 +154 269758.333 820908.333 +155 270269.444 804858.333 +156 270500.000 822500.000 +157 270527.778 824244.444 +158 270566.667 823786.111 +159 270591.667 801366.667 +160 270727.778 824077.778 +161 270994.444 824544.444 +162 271188.889 824444.444 +163 271300.000 824533.333 +164 271438.889 802008.333 +165 271675.000 802663.889 +166 271958.333 824905.556 +167 271972.222 802530.556 +168 272155.556 818586.111 +169 272172.222 802700.000 +170 272191.667 802394.444 +171 272216.667 824980.556 +172 272266.667 981438.889 +173 272436.111 808300.000 +174 272516.667 808141.667 +175 272541.667 802300.000 +176 272836.111 824808.333 +177 272927.778 813630.556 +178 273063.889 986780.556 +179 273294.444 824577.778 +180 273361.111 825308.333 +181 273602.778 981233.333 +182 274097.222 825694.444 +183 274122.222 826591.667 +184 274241.667 825802.778 +185 274250.000 825905.556 +186 274463.889 803258.333 +187 274472.222 825463.889 +188 274666.667 827041.667 +189 274688.889 826863.889 +190 274691.667 825416.667 +191 274930.556 817961.111 +192 274952.778 814411.111 +193 274972.222 827091.667 +194 274986.111 825750.000 +195 275061.111 995072.222 +196 275119.444 826322.222 +197 275155.556 978558.333 +198 275211.111 825725.000 +199 275213.889 825277.778 +200 275308.333 827336.111 +201 275355.556 825613.889 +202 275427.778 804025.000 +203 275469.444 818116.667 +204 275858.333 977988.889 +205 275955.556 815063.889 +206 275986.111 984077.778 +207 276380.556 818241.667 +208 276383.333 803975.000 +209 276741.667 977483.333 +210 276750.000 804094.444 +211 277122.222 822991.667 +212 277163.889 803844.444 +213 277205.556 824333.333 +214 277455.556 815308.333 +215 277480.556 804363.889 +216 277480.556 827036.111 +217 277519.444 818019.444 +218 277519.444 980694.444 +219 277547.222 827377.778 +220 277636.111 982386.111 +221 277675.000 806016.667 +222 277688.889 827691.667 +223 277813.889 979083.333 +224 277900.000 976686.111 +225 277950.000 819805.556 +226 277977.778 827975.000 +227 278002.778 973961.111 +228 278083.333 828113.889 +229 278138.889 827783.333 +230 278158.333 828208.333 +231 278258.333 828291.667 +232 278336.111 970608.333 +233 278355.556 804933.333 +234 278425.000 826997.222 +235 278625.000 828486.111 +236 278750.000 828513.889 +237 278769.444 973236.111 +238 278775.000 972113.889 +239 278802.778 805005.556 +240 278825.000 986175.000 +241 278950.000 819736.111 +242 278961.111 818433.333 +243 279011.111 815861.111 +244 279091.667 827875.000 +245 279091.667 971497.222 +246 279141.667 827055.556 +247 279211.111 828172.222 +248 279219.444 972897.222 +249 279227.778 828433.333 +250 279355.556 828063.889 +251 279375.000 822861.111 +252 279455.556 818005.556 +253 279472.222 824586.111 +254 279502.778 975819.444 +255 279525.000 817272.222 +256 279563.889 979366.667 +257 279650.000 818780.556 +258 279655.556 828002.778 +259 279675.000 819736.111 +260 279780.556 817566.667 +261 279786.111 816141.667 +262 279786.111 973983.333 +263 279905.556 826933.333 +264 279936.111 816902.778 +265 279938.889 822197.222 +266 279944.444 817383.333 +267 280033.333 805658.333 +268 280083.333 819077.778 +269 280183.333 821130.556 +270 280194.444 827719.444 +271 280202.778 970541.667 +272 280219.444 817330.556 +273 280222.222 816194.444 +274 280313.889 820150.000 +275 280338.889 826652.778 +276 280341.667 805888.889 +277 280350.000 823894.444 +278 280363.889 975088.889 +279 280408.333 993541.667 +280 280441.667 816280.556 +281 280611.111 970408.333 +282 280650.000 817888.889 +283 280680.556 805605.556 +284 280713.889 806536.111 +285 280719.444 806802.778 +286 280777.778 827638.889 +287 280786.111 806027.778 +288 280850.000 806666.667 +289 280891.667 805658.333 +290 280916.667 817236.111 +291 280941.667 978277.778 +292 281138.889 816180.556 +293 281144.444 819738.889 +294 281205.556 820233.333 +295 281355.556 806719.444 +296 281458.333 827569.444 +297 281486.111 805886.111 +298 281508.333 824616.667 +299 281611.111 816019.444 +300 281758.333 805902.778 +301 281822.222 818241.667 +302 281875.000 827397.222 +303 282163.889 827225.000 +304 282333.333 821813.889 +305 282380.556 973197.222 +306 282438.889 827194.444 +307 282586.111 814566.667 +308 282713.889 827197.222 +309 282916.667 814077.778 +310 283050.000 972750.000 +311 283197.222 806077.778 +312 283322.222 981172.222 +313 283358.333 822747.222 +314 283505.556 807255.556 +315 283644.444 821961.111 +316 283858.333 807422.222 +317 284005.556 977480.556 +318 284055.556 806050.000 +319 284150.000 967133.333 +320 284319.444 807602.778 +321 284366.667 992347.222 +322 284569.444 813916.667 +323 284580.556 813594.444 +324 284600.000 981822.222 +325 284655.556 821722.222 +326 284716.667 813680.556 +327 284858.333 813725.000 +328 284952.778 815350.000 +329 285025.000 813308.333 +330 285072.222 821705.556 +331 285216.667 998602.778 +332 285380.556 813794.444 +333 285380.556 814605.556 +334 285408.333 813008.333 +335 285491.667 817730.556 +336 285544.444 811066.667 +337 285547.222 816333.333 +338 285550.000 823880.556 +339 285577.778 818513.889 +340 285650.000 815863.889 +341 285688.889 815441.667 +342 285730.556 995683.333 +343 285741.667 817463.889 +344 285780.556 818869.444 +345 285908.333 813944.444 +346 285997.222 813394.444 +347 286097.222 820552.778 +348 286119.444 808077.778 +349 286144.444 813808.333 +350 286147.222 966258.333 +351 286191.667 814427.778 +352 286416.667 811236.111 +353 286475.000 968922.222 +354 286488.889 813513.889 +355 286497.222 819927.778 +356 286608.333 813658.333 +357 286613.889 814191.667 +358 286616.667 815097.222 +359 286647.222 821130.556 +360 286650.000 808450.000 +361 286672.222 991702.778 +362 286680.556 973880.556 +363 286697.222 812083.333 +364 286772.222 998277.778 +365 286775.000 813280.556 +366 286794.444 965600.000 +367 286802.778 815097.222 +368 286986.111 813083.333 +369 287077.778 962172.222 +370 287088.889 1004991.667 +371 287094.444 817330.556 +372 287308.333 816013.889 +373 287394.444 811152.778 +374 287500.000 822969.444 +375 287555.556 820950.000 +376 287586.111 813180.556 +377 287811.111 826152.778 +378 287994.444 820702.778 +379 288002.778 812733.333 +380 288022.222 816447.222 +381 288038.889 817258.333 +382 288105.556 818780.556 +383 288188.889 978483.333 +384 288355.556 823305.556 +385 288402.778 817688.889 +386 288525.000 816855.556 +387 288611.111 819066.667 +388 288616.667 987061.111 +389 288650.000 820391.667 +390 288830.556 977127.778 +391 288847.222 979005.556 +392 288919.444 990947.222 +393 289002.778 812638.889 +394 289005.556 823747.222 +395 289022.222 825927.778 +396 289172.222 819230.556 +397 289177.778 985461.111 +398 289291.667 816658.333 +399 289408.333 998494.444 +400 289441.667 952886.111 +401 289486.111 812988.889 +402 289538.889 953594.444 +403 289600.000 960650.000 +404 289669.444 984783.333 +405 289783.333 966458.333 +406 289805.556 812336.111 +407 289808.333 975025.000 +408 289825.000 959691.667 +409 289825.000 980172.222 +410 289886.111 809025.000 +411 290027.778 953316.667 +412 290175.000 958891.667 +413 290244.444 953986.111 +414 290255.556 809272.222 +415 290255.556 809722.222 +416 290297.222 827161.111 +417 290300.000 826688.889 +418 290336.111 954341.667 +419 290386.111 956983.333 +420 290402.778 965133.333 +421 290402.778 985677.778 +422 290441.667 955688.889 +423 290488.889 824611.111 +424 290550.000 820625.000 +425 290558.333 954097.222 +426 290694.444 980816.667 +427 290936.111 972888.889 +428 290961.111 809372.222 +429 291191.667 813516.667 +430 291333.333 981558.333 +431 291383.333 830352.778 +432 291397.222 989050.000 +433 291436.111 956450.000 +434 291655.556 810047.222 +435 291691.667 954316.667 +436 291758.333 809830.556 +437 291869.444 821402.778 +438 291894.444 988622.222 +439 291963.889 962694.444 +440 292094.444 997858.333 +441 292105.556 810230.556 +442 292261.111 986575.000 +443 292280.556 953447.222 +444 292366.667 979597.222 +445 292391.667 814658.333 +446 292433.333 810377.778 +447 292672.222 977641.667 +448 292855.556 810561.111 +449 292875.000 971516.667 +450 292947.222 952786.111 +451 293102.778 1004175.000 +452 293105.556 988097.222 +453 293113.889 961025.000 +454 293172.222 994661.111 +455 293472.222 991411.111 +456 293480.556 950158.333 +457 293488.889 810666.667 +458 293555.556 988783.333 +459 293561.111 981152.778 +460 293625.000 1008963.889 +461 293663.889 821975.000 +462 293788.889 902600.000 +463 293836.111 949025.000 +464 293872.222 824469.444 +465 293991.667 958375.000 +466 294236.111 952438.889 +467 294238.889 984933.333 +468 294288.889 971702.778 +469 294300.000 815108.333 +470 294383.333 905952.778 +471 294419.444 902991.667 +472 294436.111 969408.333 +473 294475.000 826425.000 +474 294505.556 959944.444 +475 294569.444 946394.444 +476 294605.556 950511.111 +477 294625.000 953577.778 +478 294630.556 983852.778 +479 294658.333 812580.556 +480 294747.222 811272.222 +481 294747.222 984505.556 +482 294786.111 984872.222 +483 294802.778 896938.889 +484 294822.222 954152.778 +485 294830.556 949219.444 +486 294847.222 984655.556 +487 294877.778 985513.889 +488 294950.000 986183.333 +489 295000.000 815916.667 +490 295013.889 974522.222 +491 295044.444 822800.000 +492 295066.667 949922.222 +493 295072.222 950947.222 +494 295152.778 983800.000 +495 295177.778 983158.333 +496 295230.556 985161.111 +497 295291.667 952008.333 +498 295297.222 825191.667 +499 295308.333 960708.333 +500 295375.000 907200.000 +501 295425.000 903380.556 +502 295425.000 950202.778 +503 295472.222 950319.444 +504 295477.778 982908.333 +505 295519.444 982694.444 +506 295533.333 906022.222 +507 295569.444 958083.333 +508 295605.556 1043716.667 +509 295613.889 982266.667 +510 295633.333 952858.333 +511 295638.889 950252.778 +512 295686.111 979644.444 +513 295711.111 981400.000 +514 295722.222 903816.667 +515 295747.222 971425.000 +516 295819.444 957605.556 +517 295822.222 984905.556 +518 295847.222 985522.222 +519 295894.444 963333.333 +520 295916.667 820875.000 +521 295919.444 980330.556 +522 295955.556 907194.444 +523 296002.778 984869.444 +524 296130.556 828177.778 +525 296158.333 955575.000 +526 296183.333 955375.000 +527 296194.444 956347.222 +528 296200.000 950097.222 +529 296236.111 818905.556 +530 296311.111 960650.000 +531 296341.667 831252.778 +532 296458.333 905391.667 +533 296461.111 826066.667 +534 296483.333 816377.778 +535 296513.889 823250.000 +536 296580.556 815986.111 +537 296622.222 948900.000 +538 296627.778 952352.778 +539 296655.556 950191.667 +540 296661.111 911019.444 +541 296666.667 901083.333 +542 296691.667 1000119.444 +543 296791.667 959769.444 +544 296802.778 976472.222 +545 296816.667 969027.778 +546 296875.000 971083.333 +547 296894.444 912708.333 +548 296897.222 958994.444 +549 296908.333 952088.889 +550 296930.556 913019.444 +551 296944.444 912188.889 +552 296991.667 912066.667 +553 297027.778 967802.778 +554 297027.778 981241.667 +555 297050.000 951236.111 +556 297055.556 954586.111 +557 297058.333 954366.667 +558 297063.889 965394.444 +559 297177.778 815083.333 +560 297177.778 954336.111 +561 297230.556 901236.111 +562 297255.556 849833.333 +563 297263.889 990733.333 +564 297272.222 905988.889 +565 297352.778 949772.222 +566 297363.889 848786.111 +567 297486.111 966008.333 +568 297597.222 955169.444 +569 297630.556 953630.556 +570 297672.222 952336.111 +571 297672.222 955297.222 +572 297702.778 954952.778 +573 297727.778 946825.000 +574 297758.333 951144.444 +575 297772.222 955169.444 +576 297780.556 951716.667 +577 297805.556 961569.444 +578 297855.556 958241.667 +579 297858.333 820316.667 +580 297858.333 959508.333 +581 297894.444 821675.000 +582 297897.222 943830.556 +583 297927.778 961005.556 +584 297944.444 987316.667 +585 297955.556 824944.444 +586 297955.556 908227.778 +587 297958.333 915013.889 +588 297975.000 933250.000 +589 298186.111 950558.333 +590 298200.000 943838.889 +591 298236.111 904750.000 +592 298266.667 825969.444 +593 298372.222 909561.111 +594 298377.778 915441.667 +595 298475.000 948905.556 +596 298530.556 846644.444 +597 298547.222 899905.556 +598 298677.778 951280.556 +599 298797.222 950627.778 +600 298830.556 979411.111 +601 298847.222 976697.222 +602 298875.000 955627.778 +603 298955.556 898977.778 +604 298986.111 939286.111 +605 298991.667 901002.778 +606 299022.222 955022.222 +607 299033.333 900772.222 +608 299052.778 968763.889 +609 299058.333 901422.222 +610 299061.111 903561.111 +611 299100.000 900325.000 +612 299108.333 916633.333 +613 299116.667 950619.444 +614 299144.444 900538.889 +615 299175.000 939241.667 +616 299183.333 902108.333 +617 299319.444 903663.889 +618 299322.222 953800.000 +619 299361.111 906786.111 +620 299402.778 902030.556 +621 299402.778 910247.222 +622 299425.000 899633.333 +623 299427.778 903516.667 +624 299438.889 821100.000 +625 299477.778 854180.556 +626 299480.556 919886.111 +627 299480.556 939169.444 +628 299500.000 962569.444 +629 299541.667 900052.778 +630 299544.444 900750.000 +631 299580.556 920358.333 +632 299588.889 829283.333 +633 299650.000 912030.556 +634 299675.000 989047.222 +635 299741.667 939922.222 +636 299763.889 904088.889 +637 299777.778 903877.778 +638 299794.444 818105.556 +639 299838.889 901527.778 +640 299888.889 978769.444 +641 299911.111 939583.333 +642 299916.667 816783.333 +643 299938.889 902416.667 +644 299977.778 922847.222 +645 299988.889 904122.222 +646 300033.333 918186.111 +647 300108.333 907194.444 +648 300155.556 1002050.000 +649 300205.556 938455.556 +650 300225.000 823397.222 +651 300258.333 925083.333 +652 300272.222 945913.889 +653 300355.556 944241.667 +654 300402.778 906988.889 +655 300438.889 820719.444 +656 300463.889 948850.000 +657 300472.222 906897.222 +658 300472.222 991400.000 +659 300477.778 943355.556 +660 300527.778 831750.000 +661 300536.111 905516.667 +662 300558.333 906191.667 +663 300563.889 917369.444 +664 300563.889 959266.667 +665 300663.889 904800.000 +666 300772.222 992400.000 +667 300805.556 926713.889 +668 300819.444 937580.556 +669 300850.000 978400.000 +670 300858.333 941016.667 +671 300927.778 937363.889 +672 300930.556 959875.000 +673 300972.222 960780.556 +674 300977.778 984211.111 +675 300994.444 919900.000 +676 301008.333 909927.778 +677 301025.000 940516.667 +678 301088.889 948580.556 +679 301102.778 973150.000 +680 301125.000 852005.556 +681 301130.556 946427.778 +682 301172.222 835819.444 +683 301216.667 924980.556 +684 301308.333 856033.333 +685 301313.889 940152.778 +686 301400.000 944108.333 +687 301422.222 1023936.111 +688 301469.444 919611.111 +689 301522.222 947388.889 +690 301527.778 855700.000 +691 301586.111 856602.778 +692 301658.333 817066.667 +693 301666.667 963975.000 +694 301686.111 933758.333 +695 301697.222 911469.444 +696 301708.333 856252.778 +697 301758.333 843752.778 +698 301763.889 858055.556 +699 301805.556 924641.667 +700 301816.667 932736.111 +701 301825.000 969361.111 +702 301841.667 908591.667 +703 301894.444 826394.444 +704 301897.222 925825.000 +705 301905.556 935811.111 +706 301922.222 826147.222 +707 302008.333 856269.444 +708 302138.889 923744.444 +709 302141.667 918319.444 +710 302172.222 910961.111 +711 302222.222 926569.444 +712 302238.889 920197.222 +713 302255.556 978033.333 +714 302263.889 932172.222 +715 302327.778 951608.333 +716 302347.222 922683.333 +717 302355.556 920944.444 +718 302355.556 921852.778 +719 302358.333 928225.000 +720 302363.889 933772.222 +721 302366.667 930136.111 +722 302383.333 909200.000 +723 302419.444 932505.556 +724 302452.778 856483.333 +725 302458.333 877008.333 +726 302500.000 1032500.000 +727 302530.556 941897.222 +728 302669.444 977427.778 +729 302733.333 918991.667 +730 302750.000 897811.111 +731 302750.000 988716.667 +732 302766.667 977908.333 +733 302766.667 984116.667 +734 302772.222 912236.111 +735 302819.444 821222.222 +736 302866.667 893761.111 +737 302888.889 912341.667 +738 302891.667 856405.556 +739 302944.444 813933.333 +740 302950.000 907950.000 +741 302975.000 937433.333 +742 302977.778 978016.667 +743 303025.000 819755.556 +744 303025.000 931905.556 +745 303077.778 1040186.111 +746 303086.111 892869.444 +747 303116.667 813966.667 +748 303116.667 954558.333 +749 303130.556 917902.778 +750 303133.333 899430.556 +751 303138.889 842475.000 +752 303155.556 892475.000 +753 303169.444 920488.889 +754 303294.444 827591.667 +755 303311.111 924955.556 +756 303319.444 816558.333 +757 303341.667 813988.889 +758 303405.556 975566.667 +759 303458.333 965280.556 +760 303488.889 941777.778 +761 303494.444 973700.000 +762 303502.778 891527.778 +763 303536.111 912652.778 +764 303547.222 940725.000 +765 303569.444 871638.889 +766 303580.556 900655.556 +767 303583.333 1036605.556 +768 303586.111 905861.111 +769 303655.556 885561.111 +770 303672.222 890927.778 +771 303677.778 979913.889 +772 303713.889 943122.222 +773 303758.333 843008.333 +774 303758.333 897483.333 +775 303838.889 872750.000 +776 303855.556 886116.667 +777 303877.778 960875.000 +778 303933.333 864958.333 +779 303941.667 912536.111 +780 303958.333 888852.778 +781 303975.000 919313.889 +782 304027.778 922150.000 +783 304030.556 882483.333 +784 304041.667 901569.444 +785 304055.556 866188.889 +786 304063.889 876836.111 +787 304097.222 866630.556 +788 304108.333 817080.556 +789 304108.333 914336.111 +790 304111.111 888277.778 +791 304111.111 920683.333 +792 304113.889 885344.444 +793 304188.889 970113.889 +794 304208.333 873075.000 +795 304211.111 872169.444 +796 304247.222 954797.222 +797 304250.000 872519.444 +798 304261.111 888908.333 +799 304263.889 872797.222 +800 304302.778 888422.222 +801 304319.444 849758.333 +802 304380.556 842808.333 +803 304386.111 904413.889 +804 304391.667 976197.222 +805 304402.778 885436.111 +806 304408.333 866136.111 +807 304427.778 872225.000 +808 304433.333 850452.778 +809 304438.889 856886.111 +810 304502.778 934330.556 +811 304505.556 911544.444 +812 304519.444 912100.000 +813 304555.556 866383.333 +814 304613.889 873150.000 +815 304686.111 872361.111 +816 304691.667 834130.556 +817 304691.667 836302.778 +818 304702.778 919783.333 +819 304738.889 879191.667 +820 304752.778 901008.333 +821 304761.111 883422.222 +822 304783.333 900375.000 +823 304811.111 926955.556 +824 304850.000 925958.333 +825 304852.778 928505.556 +826 304866.667 909561.111 +827 304875.000 876997.222 +828 304891.667 997716.667 +829 304911.111 915194.444 +830 304941.667 924175.000 +831 304977.778 949963.889 +832 304980.556 861361.111 +833 305019.444 907477.778 +834 305041.667 904611.111 +835 305041.667 905822.222 +836 305050.000 978200.000 +837 305080.556 976786.111 +838 305100.000 872125.000 +839 305180.556 829483.333 +840 305183.333 921847.222 +841 305186.111 872727.778 +842 305227.778 879033.333 +843 305252.778 896794.444 +844 305333.333 920813.889 +845 305366.667 917527.778 +846 305375.000 954830.556 +847 305425.000 975463.889 +848 305450.000 838702.778 +849 305452.778 877516.667 +850 305475.000 881752.778 +851 305536.111 877119.444 +852 305588.889 915558.333 +853 305600.000 919538.889 +854 305619.444 818308.333 +855 305666.667 1006430.556 +856 305691.667 847433.333 +857 305705.556 974091.667 +858 305772.222 904830.556 +859 305780.556 982725.000 +860 305786.111 978527.778 +861 305813.889 872913.889 +862 305869.444 845833.333 +863 305880.556 911680.556 +864 305900.000 881708.333 +865 305902.778 972966.667 +866 305922.222 951291.667 +867 305958.333 916163.889 +868 305986.111 870311.111 +869 305991.667 871611.111 +870 306033.333 879036.111 +871 306038.889 830980.556 +872 306136.111 972052.778 +873 306161.111 920569.444 +874 306169.444 846600.000 +875 306180.556 877530.556 +876 306200.000 927625.000 +877 306227.778 857122.222 +878 306236.111 844147.222 +879 306277.778 963341.667 +880 306316.667 816066.667 +881 306322.222 870397.222 +882 306325.000 976769.444 +883 306336.111 924191.667 +884 306352.778 905008.333 +885 306483.333 911563.889 +886 306580.556 984402.778 +887 306602.778 938925.000 +888 306694.444 814627.778 +889 306877.778 922713.889 +890 306908.333 819175.000 +891 306927.778 917438.889 +892 306936.111 853922.222 +893 306941.667 880430.556 +894 307013.889 914361.111 +895 307050.000 848430.556 +896 307075.000 849244.444 +897 307100.000 1012002.778 +898 307108.333 949327.778 +899 307122.222 850202.778 +900 307172.222 911413.889 +901 307175.000 974425.000 +902 307213.889 861155.556 +903 307233.333 955505.556 +904 307238.889 873141.667 +905 307383.333 915941.667 +906 307386.111 880788.889 +907 307436.111 980552.778 +908 307472.222 832208.333 +909 307488.889 844838.889 +910 307541.667 935402.778 +911 307580.556 982280.556 +912 307591.667 986747.222 +913 307619.444 865705.556 +914 307636.111 880747.222 +915 307647.222 905116.667 +916 307730.556 858141.667 +917 307741.667 852269.444 +918 307750.000 944152.778 +919 307816.667 855386.111 +920 307836.111 924252.778 +921 307847.222 835600.000 +922 307908.333 898486.111 +923 307916.667 837900.000 +924 307916.667 856797.222 +925 307947.222 974252.778 +926 307969.444 853766.667 +927 307997.222 816900.000 +928 308158.333 926602.778 +929 308205.556 880705.556 +930 308230.556 883613.889 +931 308302.778 820100.000 +932 308305.556 906716.667 +933 308325.000 832786.111 +934 308372.222 912175.000 +935 308400.000 895341.667 +936 308411.111 977933.333 +937 308461.111 932888.889 +938 308469.444 901530.556 +939 308483.333 937572.222 +940 308530.556 880561.111 +941 308530.556 969766.667 +942 308558.333 820211.111 +943 308600.000 1006005.556 +944 308655.556 910155.556 +945 308700.000 851619.444 +946 308772.222 842013.889 +947 308780.556 974013.889 +948 308783.333 965927.778 +949 308827.778 843238.889 +950 308827.778 877730.556 +951 308916.667 880397.222 +952 308938.889 1028788.889 +953 309036.111 845755.556 +954 309077.778 944219.444 +955 309138.889 1018975.000 +956 309175.000 997861.111 +957 309197.222 932822.222 +958 309200.000 911155.556 +959 309200.000 939963.889 +960 309250.000 885900.000 +961 309380.556 905088.889 +962 309450.000 953752.778 +963 309469.444 975383.333 +964 309497.222 959113.889 +965 309527.778 871513.889 +966 309530.556 921825.000 +967 309566.667 855166.667 +968 309575.000 851622.222 +969 309597.222 837380.556 +970 309636.111 817227.778 +971 309655.556 864597.222 +972 309736.111 840530.556 +973 309763.889 925850.000 +974 309777.778 966736.111 +975 309813.889 863075.000 +976 309833.333 918000.000 +977 309838.889 920533.333 +978 309841.667 1037441.667 +979 309911.111 833727.778 +980 309966.667 948269.444 +981 310000.000 872608.333 +982 310011.111 894522.222 +983 310050.000 863280.556 +984 310066.667 904722.222 +985 310102.778 863497.222 +986 310111.111 838663.889 +987 310147.222 922872.222 +988 310236.111 874938.889 +989 310258.333 964850.000 +990 310294.444 961144.444 +991 310327.778 858638.889 +992 310344.444 919755.556 +993 310363.889 827472.222 +994 310397.222 1048302.778 +995 310402.778 848791.667 +996 310408.333 830752.778 +997 310486.111 853050.000 +998 310547.222 951255.556 +999 310558.333 974641.667 +1000 310577.778 920488.889 +1001 310594.444 921211.111 +1002 310636.111 981813.889 +1003 310680.556 836238.889 +1004 310722.222 840891.667 +1005 310727.778 969783.333 +1006 310744.444 831994.444 +1007 310786.111 976052.778 +1008 310894.444 910683.333 +1009 310905.556 882280.556 +1010 310930.556 870627.778 +1011 310944.444 924002.778 +1012 310980.556 973425.000 +1013 311022.222 856969.444 +1014 311044.444 912994.444 +1015 311050.000 870722.222 +1016 311080.556 855944.444 +1017 311086.111 888272.222 +1018 311127.778 860461.111 +1019 311147.222 932713.889 +1020 311158.333 901419.444 +1021 311169.444 977275.000 +1022 311238.889 979027.778 +1023 311266.667 954452.778 +1024 311275.000 841519.444 +1025 311277.778 920661.111 +1026 311358.333 1022238.889 +1027 311369.444 834236.111 +1028 311391.667 855191.667 +1029 311430.556 894097.222 +1030 311430.556 904586.111 +1031 311433.333 932608.333 +1032 311497.222 814916.667 +1033 311555.556 885577.778 +1034 311583.333 944261.111 +1035 311650.000 966766.667 +1036 311691.667 889200.000 +1037 311711.111 847333.333 +1038 311797.222 837891.667 +1039 311808.333 821350.000 +1040 311827.778 852363.889 +1041 311869.444 947808.333 +1042 311913.889 1014600.000 +1043 311955.556 987177.778 +1044 311972.222 910216.667 +1045 312022.222 890347.222 +1046 312033.333 970363.889 +1047 312041.667 819813.889 +1048 312066.667 973025.000 +1049 312072.222 832502.778 +1050 312133.333 823541.667 +1051 312158.333 861711.111 +1052 312161.111 998452.778 +1053 312169.444 983930.556 +1054 312227.778 904602.778 +1055 312230.556 853905.556 +1056 312311.111 842105.556 +1057 312355.556 857227.778 +1058 312436.111 904530.556 +1059 312477.778 939741.667 +1060 312516.667 898375.000 +1061 312616.667 1008169.444 +1062 312688.889 836872.222 +1063 312713.889 834650.000 +1064 312775.000 945763.889 +1065 312794.444 863255.556 +1066 312822.222 892755.556 +1067 312825.000 862555.556 +1068 312836.111 904683.333 +1069 312925.000 851116.667 +1070 312975.000 828525.000 +1071 312988.889 853444.444 +1072 312988.889 870225.000 +1073 313058.333 822422.222 +1074 313061.111 968977.778 +1075 313080.556 973611.111 +1076 313100.000 857130.556 +1077 313111.111 924450.000 +1078 313113.889 855530.556 +1079 313127.778 843358.333 +1080 313180.556 954563.889 +1081 313188.889 854938.889 +1082 313194.444 839172.222 +1083 313222.222 924341.667 +1084 313269.444 892902.778 +1085 313380.556 947288.889 +1086 313391.667 1028513.889 +1087 313402.778 1109336.111 +1088 313405.556 830461.111 +1089 313405.556 938466.667 +1090 313408.333 835936.111 +1091 313444.444 1095447.222 +1092 313463.889 892600.000 +1093 313511.111 853422.222 +1094 313527.778 865391.667 +1095 313569.444 1095611.111 +1096 313613.889 961438.889 +1097 313644.444 893061.111 +1098 313700.000 814341.667 +1099 313775.000 849341.667 +1100 313794.444 841611.111 +1101 313850.000 832230.556 +1102 313855.556 859294.444 +1103 313863.889 972152.778 +1104 313902.778 926691.667 +1105 313902.778 976841.667 +1106 313972.222 1023497.222 +1107 314127.778 833291.667 +1108 314144.444 860677.778 +1109 314152.778 924116.667 +1110 314172.222 895422.222 +1111 314216.667 853377.778 +1112 314227.778 1034927.778 +1113 314333.333 874013.889 +1114 314350.000 977436.111 +1115 314394.444 835194.444 +1116 314397.222 847250.000 +1117 314436.111 934572.222 +1118 314438.889 974088.889 +1119 314480.556 1099277.778 +1120 314497.222 985705.556 +1121 314502.778 835086.111 +1122 314588.889 856405.556 +1123 314611.111 1033933.333 +1124 314622.222 971955.556 +1125 314627.778 908500.000 +1126 314636.111 1004366.667 +1127 314650.000 882544.444 +1128 314675.000 971144.444 +1129 314716.667 836469.444 +1130 314722.222 908966.667 +1131 314747.222 969230.556 +1132 314855.556 845138.889 +1133 314861.111 820172.222 +1134 314916.667 954783.333 +1135 315022.222 1061580.556 +1136 315044.444 910688.889 +1137 315086.111 828500.000 +1138 315088.889 878944.444 +1139 315127.778 837877.778 +1140 315172.222 826350.000 +1141 315188.889 927066.667 +1142 315213.889 971536.111 +1143 315241.667 965336.111 +1144 315277.778 873247.222 +1145 315297.222 941058.333 +1146 315305.556 838355.556 +1147 315341.667 974427.778 +1148 315391.667 824625.000 +1149 315394.444 1107555.556 +1150 315422.222 867150.000 +1151 315422.222 968333.333 +1152 315491.667 971463.889 +1153 315536.111 901072.222 +1154 315544.444 1103030.556 +1155 315580.556 847383.333 +1156 315602.778 914030.556 +1157 315652.778 914258.333 +1158 315686.111 934838.889 +1159 315700.000 1030005.556 +1160 315716.667 852505.556 +1161 315783.333 841558.333 +1162 315788.889 904405.556 +1163 315811.111 925327.778 +1164 315827.778 1029202.778 +1165 315847.222 958488.889 +1166 315850.000 1062722.222 +1167 315922.222 1062236.111 +1168 315938.889 971086.111 +1169 315941.667 832505.556 +1170 315941.667 1028922.222 +1171 315972.222 1001819.444 +1172 315983.333 898669.444 +1173 316000.000 857188.889 +1174 316033.333 946552.778 +1175 316038.889 891955.556 +1176 316072.222 818855.556 +1177 316088.889 850472.222 +1178 316250.000 828869.444 +1179 316250.000 955791.667 +1180 316263.889 918180.556 +1181 316269.444 962836.111 +1182 316277.778 1103333.333 +1183 316291.667 971025.000 +1184 316300.000 915544.444 +1185 316313.889 936438.889 +1186 316338.889 883133.333 +1187 316369.444 867419.444 +1188 316452.778 895552.778 +1189 316502.778 950725.000 +1190 316527.778 932019.444 +1191 316591.667 974719.444 +1192 316672.222 928905.556 +1193 316747.222 886461.111 +1194 316752.778 930444.444 +1195 316797.222 964819.444 +1196 316830.556 921336.111 +1197 316925.000 1062069.444 +1198 316938.889 891305.556 +1199 317011.111 903975.000 +1200 317036.111 981236.111 +1201 317058.333 836533.333 +1202 317077.778 817425.000 +1203 317086.111 856105.556 +1204 317086.111 877772.222 +1205 317113.889 910605.556 +1206 317127.778 1100669.444 +1207 317147.222 832527.778 +1208 317163.889 862638.889 +1209 317169.444 991322.222 +1210 317200.000 858161.111 +1211 317225.000 915430.556 +1212 317244.444 961650.000 +1213 317319.444 841708.333 +1214 317333.333 872047.222 +1215 317380.556 999469.444 +1216 317419.444 989452.778 +1217 317511.111 1031594.444 +1218 317538.889 966497.222 +1219 317561.111 846152.778 +1220 317586.111 1064863.889 +1221 317605.556 930861.111 +1222 317711.111 847894.444 +1223 317719.444 918213.889 +1224 317733.333 844466.667 +1225 317738.889 816327.778 +1226 317780.556 823486.111 +1227 317822.222 975763.889 +1228 317833.333 855558.333 +1229 317838.889 816077.778 +1230 317863.889 890322.222 +1231 317877.778 964622.222 +1232 317883.333 877272.222 +1233 317958.333 951500.000 +1234 318022.222 970913.889 +1235 318086.111 859700.000 +1236 318144.444 948402.778 +1237 318191.667 923297.222 +1238 318197.222 935141.667 +1239 318213.889 930294.444 +1240 318241.667 944908.333 +1241 318272.222 994261.111 +1242 318294.444 866177.778 +1243 318308.333 843644.444 +1244 318361.111 1009844.444 +1245 318455.556 1023672.222 +1246 318463.889 916561.111 +1247 318466.667 815961.111 +1248 318575.000 1030922.222 +1249 318600.000 886994.444 +1250 318602.778 903958.333 +1251 318636.111 922958.333 +1252 318736.111 897336.111 +1253 318780.556 854497.222 +1254 318866.667 889838.889 +1255 318872.222 1002913.889 +1256 318911.111 851455.556 +1257 318922.222 1004844.444 +1258 318933.333 931180.556 +1259 318938.889 967144.444 +1260 318972.222 986033.333 +1261 319002.778 842519.444 +1262 319027.778 922430.556 +1263 319036.111 943950.000 +1264 319119.444 1118805.556 +1265 319133.333 877358.333 +1266 319230.556 976563.889 +1267 319252.778 926394.444 +1268 319291.667 826797.222 +1269 319363.889 819286.111 +1270 319380.556 813036.111 +1271 319436.111 942438.889 +1272 319508.333 834563.889 +1273 319563.889 999619.444 +1274 319608.333 909838.889 +1275 319616.667 898700.000 +1276 319633.333 837825.000 +1277 319636.111 952702.778 +1278 319655.556 940536.111 +1279 319677.778 1102938.889 +1280 319752.778 939977.778 +1281 319788.889 892872.222 +1282 319808.333 916555.556 +1283 319827.778 980333.333 +1284 319844.444 865786.111 +1285 319872.222 903569.444 +1286 319894.444 832002.778 +1287 319908.333 872905.556 +1288 319919.444 833069.444 +1289 319972.222 1020775.000 +1290 320000.000 808458.333 +1291 320038.889 1066052.778 +1292 320108.333 971297.222 +1293 320147.222 933419.444 +1294 320166.667 929091.667 +1295 320172.222 830627.778 +1296 320216.667 937141.667 +1297 320263.889 921388.889 +1298 320333.333 810500.000 +1299 320333.333 895222.222 +1300 320338.889 843927.778 +1301 320355.556 825083.333 +1302 320375.000 937000.000 +1303 320400.000 887280.556 +1304 320491.667 916580.556 +1305 320497.222 921091.667 +1306 320525.000 955061.111 +1307 320677.778 829008.333 +1308 320722.222 842327.778 +1309 320725.000 912408.333 +1310 320736.111 829147.222 +1311 320800.000 968063.889 +1312 320833.333 811000.000 +1313 320850.000 983416.667 +1314 320852.778 932200.000 +1315 320866.667 821180.556 +1316 320877.778 846675.000 +1317 320883.333 954716.667 +1318 320894.444 882219.444 +1319 320913.889 837955.556 +1320 320919.444 967155.556 +1321 320952.778 964686.111 +1322 320958.333 989633.333 +1323 320961.111 902941.667 +1324 321094.444 906233.333 +1325 321100.000 835011.111 +1326 321141.667 811541.667 +1327 321152.778 812472.222 +1328 321244.444 969450.000 +1329 321261.111 991650.000 +1330 321291.667 1017880.556 +1331 321322.222 812991.667 +1332 321330.556 962275.000 +1333 321358.333 816222.222 +1334 321397.222 953200.000 +1335 321438.889 960908.333 +1336 321441.667 857150.000 +1337 321444.444 951202.778 +1338 321469.444 827780.556 +1339 321488.889 811633.333 +1340 321530.556 947991.667 +1341 321533.333 901311.111 +1342 321558.333 819338.889 +1343 321572.222 943372.222 +1344 321594.444 971497.222 +1345 321613.889 819041.667 +1346 321630.556 917205.556 +1347 321686.111 882825.000 +1348 321694.444 960122.222 +1349 321811.111 821091.667 +1350 321838.889 865802.778 +1351 321838.889 968844.444 +1352 321872.222 825658.333 +1353 321975.000 831777.778 +1354 321994.444 1109677.778 +1355 322019.444 839086.111 +1356 322041.667 823219.444 +1357 322047.222 958552.778 +1358 322094.444 997963.889 +1359 322136.111 986702.778 +1360 322161.111 807527.778 +1361 322175.000 824136.111 +1362 322205.556 982019.444 +1363 322216.667 1109258.333 +1364 322252.778 950575.000 +1365 322266.667 952252.778 +1366 322333.333 973741.667 +1367 322344.444 977550.000 +1368 322369.444 808605.556 +1369 322380.556 843091.667 +1370 322386.111 949402.778 +1371 322411.111 927158.333 +1372 322416.667 854163.889 +1373 322427.778 944552.778 +1374 322502.778 1014783.333 +1375 322527.778 1098313.889 +1376 322591.667 904225.000 +1377 322613.889 837366.667 +1378 322663.889 876252.778 +1379 322686.111 1077580.556 +1380 322700.000 1068002.778 +1381 322730.556 899858.333 +1382 322744.444 949783.333 +1383 322766.667 927233.333 +1384 322783.333 957494.444 +1385 322816.667 938238.889 +1386 322836.111 834722.222 +1387 322861.111 1040952.778 +1388 322869.444 810808.333 +1389 322936.111 840611.111 +1390 322958.333 812355.556 +1391 322963.889 1013058.333 +1392 322986.111 901847.222 +1393 323050.000 840275.000 +1394 323052.778 847727.778 +1395 323061.111 877980.556 +1396 323061.111 924502.778 +1397 323069.444 960063.889 +1398 323077.778 954797.222 +1399 323088.889 917747.222 +1400 323094.444 901388.889 +1401 323122.222 1067777.778 +1402 323127.778 897983.333 +1403 323130.556 970113.889 +1404 323158.333 945163.889 +1405 323175.000 890255.556 +1406 323186.111 1025452.778 +1407 323188.889 845172.222 +1408 323202.778 962127.778 +1409 323211.111 891633.333 +1410 323283.333 932797.222 +1411 323291.667 966250.000 +1412 323300.000 906055.556 +1413 323344.444 961511.111 +1414 323361.111 813916.667 +1415 323413.889 903216.667 +1416 323430.556 893286.111 +1417 323475.000 973863.889 +1418 323491.667 904600.000 +1419 323502.778 1087080.556 +1420 323511.111 953008.333 +1421 323525.000 908777.778 +1422 323536.111 896544.444 +1423 323641.667 887036.111 +1424 323644.444 894741.667 +1425 323663.889 961005.556 +1426 323666.667 863000.000 +1427 323694.444 841880.556 +1428 323716.667 1128600.000 +1429 323769.444 825925.000 +1430 323788.889 806927.778 +1431 323794.444 816633.333 +1432 323808.333 1064788.889 +1433 323863.889 968480.556 +1434 323866.667 833547.222 +1435 323880.556 989788.889 +1436 323880.556 1008641.667 +1437 323938.889 993938.889 +1438 323966.667 973236.111 +1439 323969.444 820602.778 +1440 323969.444 908563.889 +1441 324013.889 988172.222 +1442 324058.333 994933.333 +1443 324063.889 972113.889 +1444 324066.667 887772.222 +1445 324072.222 870211.111 +1446 324083.333 911866.667 +1447 324111.111 1007119.444 +1448 324172.222 886477.778 +1449 324205.556 1042283.333 +1450 324238.889 856916.667 +1451 324283.333 901322.222 +1452 324311.111 966675.000 +1453 324313.889 806700.000 +1454 324322.222 830613.889 +1455 324333.333 971022.222 +1456 324338.889 866547.222 +1457 324355.556 807241.667 +1458 324366.667 1112247.222 +1459 324372.222 1031586.111 +1460 324388.889 891083.333 +1461 324419.444 822152.778 +1462 324419.444 977938.889 +1463 324425.000 962297.222 +1464 324452.778 949483.333 +1465 324458.333 1005383.333 +1466 324486.111 817833.333 +1467 324486.111 997327.778 +1468 324488.889 975263.889 +1469 324494.444 875141.667 +1470 324561.111 839402.778 +1471 324575.000 914930.556 +1472 324575.000 998711.111 +1473 324580.556 837316.667 +1474 324608.333 849877.778 +1475 324613.889 973877.778 +1476 324616.667 901152.778 +1477 324638.889 864597.222 +1478 324697.222 986786.111 +1479 324705.556 1000125.000 +1480 324708.333 850008.333 +1481 324708.333 1004055.556 +1482 324772.222 917547.222 +1483 324786.111 940594.444 +1484 324797.222 863619.444 +1485 324805.556 809805.556 +1486 324822.222 969941.667 +1487 324861.111 882963.889 +1488 324955.556 849919.444 +1489 325005.556 947402.778 +1490 325041.667 945738.889 +1491 325091.667 921191.667 +1492 325116.667 863766.667 +1493 325155.556 954091.667 +1494 325158.333 921916.667 +1495 325158.333 937319.444 +1496 325175.000 878363.889 +1497 325175.000 968041.667 +1498 325183.333 921475.000 +1499 325230.556 926377.778 +1500 325247.222 956369.444 +1501 325250.000 937500.000 +1502 325263.889 968861.111 +1503 325275.000 927138.889 +1504 325294.444 949027.778 +1505 325300.000 925141.667 +1506 325305.556 825894.444 +1507 325325.000 935038.889 +1508 325338.889 966652.778 +1509 325344.444 927883.333 +1510 325355.556 934108.333 +1511 325358.333 858933.333 +1512 325380.556 819325.000 +1513 325402.778 829038.889 +1514 325419.444 973205.556 +1515 325430.556 903091.667 +1516 325436.111 862119.444 +1517 325438.889 930527.778 +1518 325447.222 943672.222 +1519 325480.556 828719.444 +1520 325488.889 929200.000 +1521 325497.222 858700.000 +1522 325519.444 984977.778 +1523 325536.111 838875.000 +1524 325563.889 958630.556 +1525 325569.444 842383.333 +1526 325597.222 840963.889 +1527 325605.556 856725.000 +1528 325630.556 971413.889 +1529 325788.889 973622.222 +1530 325808.333 938925.000 +1531 325827.778 821552.778 +1532 325836.111 951086.111 +1533 325838.889 1171122.222 +1534 325841.667 881872.222 +1535 325883.333 952038.889 +1536 325883.333 965083.333 +1537 325888.889 963086.111 +1538 325888.889 966850.000 +1539 325897.222 968566.667 +1540 325908.333 926477.778 +1541 325919.444 967558.333 +1542 325936.111 948552.778 +1543 325963.889 1147088.889 +1544 325972.222 823338.889 +1545 325997.222 1106302.778 +1546 326038.889 914777.778 +1547 326055.556 832455.556 +1548 326097.222 854808.333 +1549 326108.333 1107702.778 +1550 326119.444 998138.889 +1551 326125.000 900366.667 +1552 326152.778 932866.667 +1553 326208.333 836000.000 +1554 326277.778 964555.556 +1555 326308.333 972888.889 +1556 326322.222 873191.667 +1557 326352.778 860344.444 +1558 326394.444 965380.556 +1559 326400.000 1170833.333 +1560 326408.333 903647.222 +1561 326452.778 853783.333 +1562 326466.667 972255.556 +1563 326491.667 967127.778 +1564 326516.667 969080.556 +1565 326536.111 837597.222 +1566 326550.000 799405.556 +1567 326591.667 836188.889 +1568 326630.556 954880.556 +1569 326652.778 1071525.000 +1570 326727.778 1141461.111 +1571 326730.556 974602.778 +1572 326733.333 957091.667 +1573 326775.000 845394.444 +1574 326780.556 1170983.333 +1575 326788.889 1154980.556 +1576 326833.333 847383.333 +1577 326858.333 1171822.222 +1578 326875.000 833466.667 +1579 326875.000 939608.333 +1580 326900.000 808508.333 +1581 326947.222 937416.667 +1582 326958.333 976019.444 +1583 326961.111 920858.333 +1584 326980.556 958850.000 +1585 326988.889 926566.667 +1586 326991.667 1081313.889 +1587 327025.000 1031355.556 +1588 327027.778 971550.000 +1589 327044.444 875958.333 +1590 327091.667 960080.556 +1591 327141.667 971561.111 +1592 327152.778 1171563.889 +1593 327169.444 1168752.778 +1594 327188.889 1026444.444 +1595 327213.889 1091047.222 +1596 327216.667 840133.333 +1597 327225.000 1106400.000 +1598 327233.333 992969.444 +1599 327252.778 973205.556 +1600 327252.778 1146236.111 +1601 327286.111 949422.222 +1602 327286.111 966225.000 +1603 327291.667 827200.000 +1604 327308.333 1155288.889 +1605 327341.667 802419.444 +1606 327358.333 962750.000 +1607 327361.111 968866.667 +1608 327375.000 1019505.556 +1609 327425.000 1170305.556 +1610 327438.889 939713.889 +1611 327447.222 974133.333 +1612 327458.333 969975.000 +1613 327480.556 964716.667 +1614 327502.778 816369.444 +1615 327547.222 812422.222 +1616 327555.556 989019.444 +1617 327558.333 1115541.667 +1618 327563.889 998958.333 +1619 327572.222 943450.000 +1620 327572.222 974105.556 +1621 327577.778 848750.000 +1622 327591.667 977969.444 +1623 327594.444 974580.556 +1624 327616.667 1081300.000 +1625 327630.556 802502.778 +1626 327675.000 886508.333 +1627 327677.778 1170222.222 +1628 327700.000 1082797.222 +1629 327713.889 891166.667 +1630 327733.333 924055.556 +1631 327750.000 917925.000 +1632 327763.889 799311.111 +1633 327786.111 919141.667 +1634 327794.444 1081497.222 +1635 327833.333 968000.000 +1636 327852.778 800352.778 +1637 327872.222 845619.444 +1638 327883.333 868716.667 +1639 327888.889 851450.000 +1640 327916.667 930555.556 +1641 327919.444 1155622.222 +1642 327927.778 956341.667 +1643 327930.556 1156902.778 +1644 327938.889 798627.778 +1645 327947.222 1169616.667 +1646 327958.333 954508.333 +1647 327961.111 851838.889 +1648 327963.889 965605.556 +1649 327994.444 972688.889 +1650 328000.000 947205.556 +1651 328002.778 856536.111 +1652 328038.889 819494.444 +1653 328041.667 911700.000 +1654 328047.222 974447.222 +1655 328058.333 974027.778 +1656 328083.333 981125.000 +1657 328111.111 831727.778 +1658 328111.111 1153794.444 +1659 328138.889 969486.111 +1660 328158.333 972277.778 +1661 328188.889 822350.000 +1662 328191.667 934175.000 +1663 328202.778 851722.222 +1664 328219.444 926577.778 +1665 328233.333 971702.778 +1666 328266.667 830794.444 +1667 328280.556 884763.889 +1668 328311.111 857636.111 +1669 328338.889 1097069.444 +1670 328341.667 972286.111 +1671 328344.444 852297.222 +1672 328363.889 964747.222 +1673 328383.333 1169730.556 +1674 328386.111 866294.444 +1675 328402.778 851833.333 +1676 328405.556 836325.000 +1677 328405.556 878875.000 +1678 328422.222 1044027.778 +1679 328438.889 971427.778 +1680 328466.667 852100.000 +1681 328475.000 1155686.111 +1682 328491.667 1097586.111 +1683 328502.778 810794.444 +1684 328516.667 800366.667 +1685 328519.444 1004652.778 +1686 328544.444 799750.000 +1687 328550.000 904055.556 +1688 328563.889 973386.111 +1689 328572.222 1169213.889 +1690 328577.778 972544.444 +1691 328597.222 846200.000 +1692 328600.000 973636.111 +1693 328666.667 824041.667 +1694 328677.778 843305.556 +1695 328686.111 851905.556 +1696 328708.333 811097.222 +1697 328713.889 939872.222 +1698 328744.444 957652.778 +1699 328763.889 877425.000 +1700 328777.778 851833.333 +1701 328794.444 1117566.667 +1702 328808.333 971547.222 +1703 328819.444 833325.000 +1704 328833.333 816583.333 +1705 328836.111 899713.889 +1706 328847.222 1001261.111 +1707 328880.556 843266.667 +1708 328927.778 934483.333 +1709 328936.111 960291.667 +1710 328950.000 975455.556 +1711 328961.111 1098269.444 +1712 328997.222 854011.111 +1713 328997.222 945561.111 +1714 329013.889 922419.444 +1715 329027.778 965636.111 +1716 329050.000 806669.444 +1717 329050.000 936966.667 +1718 329063.889 908780.556 +1719 329102.778 961352.778 +1720 329155.556 867158.333 +1721 329183.333 800222.222 +1722 329191.667 916769.444 +1723 329252.778 811875.000 +1724 329263.889 968958.333 +1725 329311.111 964594.444 +1726 329327.778 843494.444 +1727 329341.667 970777.778 +1728 329344.444 972513.889 +1729 329358.333 828116.667 +1730 329372.222 871647.222 +1731 329411.111 971338.889 +1732 329438.889 859538.889 +1733 329438.889 1033480.556 +1734 329441.667 1025644.444 +1735 329444.444 871386.111 +1736 329452.778 998025.000 +1737 329477.778 1127161.111 +1738 329480.556 967294.444 +1739 329536.111 968900.000 +1740 329544.444 970147.222 +1741 329572.222 952900.000 +1742 329572.222 1057419.444 +1743 329588.889 812366.667 +1744 329594.444 1172644.444 +1745 329597.222 867466.667 +1746 329616.667 968288.889 +1747 329619.444 931400.000 +1748 329627.778 1170350.000 +1749 329636.111 1018322.222 +1750 329644.444 1028286.111 +1751 329688.889 934505.556 +1752 329700.000 899122.222 +1753 329719.444 1107758.333 +1754 329738.889 908244.444 +1755 329750.000 817577.778 +1756 329750.000 963322.222 +1757 329761.111 965950.000 +1758 329777.778 1059413.889 +1759 329777.778 1115169.444 +1760 329783.333 885700.000 +1761 329786.111 1155294.444 +1762 329808.333 800327.778 +1763 329813.889 828102.778 +1764 329836.111 845827.778 +1765 329855.556 801100.000 +1766 329875.000 1107702.778 +1767 329911.111 1172702.778 +1768 329922.222 890661.111 +1769 329950.000 975425.000 +1770 329952.778 949655.556 +1771 329975.000 876300.000 +1772 329983.333 946305.556 +1773 330013.889 824113.889 +1774 330038.889 972255.556 +1775 330047.222 1107847.222 +1776 330066.667 801555.556 +1777 330077.778 813086.111 +1778 330122.222 943652.778 +1779 330136.111 927250.000 +1780 330144.444 970966.667 +1781 330150.000 966127.778 +1782 330161.111 927241.667 +1783 330183.333 801758.333 +1784 330197.222 966986.111 +1785 330202.778 1172019.444 +1786 330308.333 850611.111 +1787 330313.889 1113866.667 +1788 330316.667 947216.667 +1789 330341.667 839383.333 +1790 330369.444 1172911.111 +1791 330372.222 1156205.556 +1792 330391.667 850313.889 +1793 330394.444 921825.000 +1794 330483.333 1166300.000 +1795 330508.333 1092955.556 +1796 330544.444 841558.333 +1797 330569.444 1109100.000 +1798 330572.222 915733.333 +1799 330575.000 895875.000 +1800 330605.556 954719.444 +1801 330655.556 860533.333 +1802 330655.556 962275.000 +1803 330677.778 1093594.444 +1804 330680.556 1173025.000 +1805 330738.889 1060180.556 +1806 330750.000 898544.444 +1807 330766.667 1117386.111 +1808 330786.111 868816.667 +1809 330786.111 1093647.222 +1810 330786.111 1166011.111 +1811 330800.000 832322.222 +1812 330847.222 972958.333 +1813 330897.222 820158.333 +1814 330916.667 970463.889 +1815 330955.556 803155.556 +1816 330980.556 936547.222 +1817 331002.778 934608.333 +1818 331005.556 868641.667 +1819 331027.778 867536.111 +1820 331030.556 966702.778 +1821 331052.778 885608.333 +1822 331075.000 923347.222 +1823 331094.444 912619.444 +1824 331130.556 900530.556 +1825 331136.111 941641.667 +1826 331150.000 1043263.889 +1827 331180.556 871250.000 +1828 331191.667 970252.778 +1829 331191.667 1170855.556 +1830 331211.111 971830.556 +1831 331213.889 855663.889 +1832 331236.111 890550.000 +1833 331255.556 1155133.333 +1834 331280.556 919611.111 +1835 331283.333 1072522.222 +1836 331294.444 881513.889 +1837 331333.333 1002269.444 +1838 331372.222 958391.667 +1839 331386.111 1101244.444 +1840 331408.333 919938.889 +1841 331433.333 1171652.778 +1842 331480.556 959511.111 +1843 331486.111 941500.000 +1844 331505.556 968233.333 +1845 331511.111 853722.222 +1846 331575.000 997333.333 +1847 331575.000 1057736.111 +1848 331580.556 1173497.222 +1849 331611.111 983852.778 +1850 331633.333 963597.222 +1851 331650.000 970291.667 +1852 331655.556 919413.889 +1853 331666.667 1017933.333 +1854 331688.889 908538.889 +1855 331730.556 849150.000 +1856 331730.556 862516.667 +1857 331780.556 866072.222 +1858 331786.111 991772.222 +1859 331800.000 964977.778 +1860 331805.556 947438.889 +1861 331811.111 1022738.889 +1862 331827.778 902227.778 +1863 331841.667 904891.667 +1864 331844.444 998933.333 +1865 331886.111 952211.111 +1866 331908.333 1013777.778 +1867 331938.889 987383.333 +1868 331958.333 800133.333 +1869 331958.333 1173786.111 +1870 331972.222 1043725.000 +1871 331975.000 966150.000 +1872 332000.000 1172416.667 +1873 332030.556 946800.000 +1874 332075.000 823919.444 +1875 332075.000 926661.111 +1876 332097.222 875691.667 +1877 332100.000 847444.444 +1878 332100.000 977544.444 +1879 332144.444 804480.556 +1880 332183.333 981583.333 +1881 332183.333 1170333.333 +1882 332280.556 917975.000 +1883 332288.889 875772.222 +1884 332333.333 825955.556 +1885 332341.667 864836.111 +1886 332341.667 975858.333 +1887 332344.444 885822.222 +1888 332347.222 848358.333 +1889 332361.111 968008.333 +1890 332377.778 915113.889 +1891 332400.000 1155180.556 +1892 332436.111 842288.889 +1893 332441.667 868163.889 +1894 332447.222 813588.889 +1895 332466.667 842641.667 +1896 332469.444 958997.222 +1897 332480.556 1005733.333 +1898 332511.111 808158.333 +1899 332558.333 1163741.667 +1900 332569.444 1033172.222 +1901 332611.111 938852.778 +1902 332613.889 972377.778 +1903 332619.444 905922.222 +1904 332652.778 842816.667 +1905 332666.667 892908.333 +1906 332669.444 932391.667 +1907 332697.222 908797.222 +1908 332736.111 858361.111 +1909 332755.556 829763.889 +1910 332775.000 850980.556 +1911 332780.556 863550.000 +1912 332858.333 965725.000 +1913 332938.889 1110955.556 +1914 332941.667 961944.444 +1915 332944.444 839661.111 +1916 332958.333 977986.111 +1917 332961.111 868436.111 +1918 332969.444 810350.000 +1919 332975.000 914936.111 +1920 333022.222 845538.889 +1921 333041.667 969858.333 +1922 333047.222 836833.333 +1923 333061.111 1118405.556 +1924 333088.889 854847.222 +1925 333100.000 891727.778 +1926 333105.556 857544.444 +1927 333138.889 820969.444 +1928 333158.333 926627.778 +1929 333200.000 879027.778 +1930 333208.333 902322.222 +1931 333225.000 804138.889 +1932 333225.000 811425.000 +1933 333244.444 967841.667 +1934 333266.667 833886.111 +1935 333286.111 912816.667 +1936 333288.889 925383.333 +1937 333288.889 1056038.889 +1938 333316.667 1056725.000 +1939 333319.444 897411.111 +1940 333327.778 943425.000 +1941 333369.444 1022061.111 +1942 333427.778 1183269.444 +1943 333438.889 864380.556 +1944 333452.778 1104525.000 +1945 333458.333 841091.667 +1946 333477.778 932097.222 +1947 333486.111 806830.556 +1948 333488.889 965483.333 +1949 333505.556 847766.667 +1950 333513.889 932955.556 +1951 333527.778 1117883.333 +1952 333536.111 905925.000 +1953 333577.778 812708.333 +1954 333583.333 935775.000 +1955 333583.333 976944.444 +1956 333625.000 951044.444 +1957 333630.556 971736.111 +1958 333647.222 927247.222 +1959 333652.778 934950.000 +1960 333702.778 1125830.556 +1961 333705.556 960686.111 +1962 333705.556 987525.000 +1963 333708.333 1119622.222 +1964 333733.333 956880.556 +1965 333763.889 1172502.778 +1966 333766.667 792947.222 +1967 333783.333 880152.778 +1968 333794.444 962472.222 +1969 333805.556 847997.222 +1970 333869.444 842830.556 +1971 333941.667 1045225.000 +1972 333941.667 1107858.333 +1973 333944.444 803475.000 +1974 333963.889 969602.778 +1975 333966.667 845958.333 +1976 333991.667 1108680.556 +1977 334016.667 869544.444 +1978 334025.000 814202.778 +1979 334052.778 908975.000 +1980 334069.444 826622.222 +1981 334100.000 910616.667 +1982 334111.111 930694.444 +1983 334111.111 1108419.444 +1984 334130.556 823852.778 +1985 334144.444 823127.778 +1986 334147.222 1119086.111 +1987 334150.000 1115488.889 +1988 334152.778 886438.889 +1989 334180.556 998186.111 +1990 334208.333 821622.222 +1991 334213.889 816858.333 +1992 334213.889 965769.444 +1993 334222.222 1118219.444 +1994 334247.222 959461.111 +1995 334250.000 940475.000 +1996 334255.556 869266.667 +1997 334266.667 941061.111 +1998 334269.444 1176111.111 +1999 334305.556 963383.333 +2000 334336.111 841488.889 +2001 334341.667 869472.222 +2002 334352.778 1122972.222 +2003 334352.778 1123575.000 +2004 334355.556 1123488.889 +2005 334358.333 861058.333 +2006 334372.222 1016430.556 +2007 334416.667 940375.000 +2008 334433.333 895716.667 +2009 334472.222 841469.444 +2010 334483.333 1120733.333 +2011 334486.111 844550.000 +2012 334486.111 867877.778 +2013 334491.667 996225.000 +2014 334500.000 905055.556 +2015 334500.000 1122586.111 +2016 334502.778 821983.333 +2017 334502.778 888183.333 +2018 334508.333 906550.000 +2019 334511.111 795611.111 +2020 334511.111 869966.667 +2021 334516.667 811255.556 +2022 334538.889 910072.222 +2023 334561.111 1024888.889 +2024 334597.222 944152.778 +2025 334613.889 869088.889 +2026 334636.111 1176783.333 +2027 334661.111 942883.333 +2028 334666.667 820166.667 +2029 334666.667 969180.556 +2030 334669.444 1176972.222 +2031 334672.222 995241.667 +2032 334705.556 825047.222 +2033 334705.556 952136.111 +2034 334750.000 804866.667 +2035 334763.889 1008552.778 +2036 334819.444 897280.556 +2037 334916.667 808558.333 +2038 334933.333 1123572.222 +2039 334936.111 1171475.000 +2040 334938.889 849138.889 +2041 334950.000 903197.222 +2042 334955.556 884272.222 +2043 334966.667 812794.444 +2044 334966.667 818922.222 +2045 335005.556 1177422.222 +2046 335016.667 819652.778 +2047 335016.667 1176616.667 +2048 335044.444 818691.667 +2049 335058.333 1020086.111 +2050 335086.111 946161.111 +2051 335086.111 966119.444 +2052 335091.667 1118983.333 +2053 335127.778 963922.222 +2054 335172.222 820758.333 +2055 335177.778 818441.667 +2056 335180.556 899205.556 +2057 335200.000 964836.111 +2058 335205.556 868025.000 +2059 335213.889 798788.889 +2060 335213.889 843538.889 +2061 335225.000 1177066.667 +2062 335252.778 914358.333 +2063 335261.111 953155.556 +2064 335308.333 805722.222 +2065 335308.333 819450.000 +2066 335311.111 1119419.444 +2067 335316.667 811233.333 +2068 335358.333 869972.222 +2069 335377.778 852533.333 +2070 335377.778 924697.222 +2071 335380.556 867072.222 +2072 335386.111 1121852.778 +2073 335400.000 891241.667 +2074 335405.556 892669.444 +2075 335422.222 1177822.222 +2076 335441.667 842338.889 +2077 335452.778 1055716.667 +2078 335461.111 957255.556 +2079 335480.556 865444.444 +2080 335508.333 790416.667 +2081 335508.333 818041.667 +2082 335519.444 947808.333 +2083 335538.889 828961.111 +2084 335552.778 890847.222 +2085 335575.000 807147.222 +2086 335588.889 978483.333 +2087 335602.778 817197.222 +2088 335605.556 1171572.222 +2089 335613.889 969108.333 +2090 335633.333 880813.889 +2091 335636.111 818080.556 +2092 335655.556 813036.111 +2093 335669.444 845811.111 +2094 335700.000 868963.889 +2095 335716.667 1160763.889 +2096 335725.000 844133.333 +2097 335750.000 838938.889 +2098 335755.556 831825.000 +2099 335772.222 961780.556 +2100 335772.222 962730.556 +2101 335777.778 1018547.222 +2102 335805.556 1122366.667 +2103 335808.333 799891.667 +2104 335830.556 843394.444 +2105 335833.333 867727.778 +2106 335833.333 959097.222 +2107 335844.444 928341.667 +2108 335861.111 862861.111 +2109 335869.444 845425.000 +2110 335869.444 879844.444 +2111 335872.222 1023775.000 +2112 335908.333 864908.333 +2113 335938.889 1123022.222 +2114 335941.667 992600.000 +2115 335955.556 834680.556 +2116 335955.556 986252.778 +2117 335966.667 838602.778 +2118 335975.000 1122711.111 +2119 335991.667 797444.444 +2120 335991.667 963663.889 +2121 336000.000 1176711.111 +2122 336008.333 869561.111 +2123 336016.667 907736.111 +2124 336047.222 867938.889 +2125 336058.333 789733.333 +2126 336063.889 843352.778 +2127 336075.000 886502.778 +2128 336077.778 927400.000 +2129 336080.556 803513.889 +2130 336086.111 912066.667 +2131 336102.778 964105.556 +2132 336102.778 1145955.556 +2133 336105.556 950525.000 +2134 336105.556 1145730.556 +2135 336125.000 920644.444 +2136 336125.000 1177119.444 +2137 336130.556 859611.111 +2138 336130.556 1123238.889 +2139 336141.667 858350.000 +2140 336155.556 811022.222 +2141 336188.889 838675.000 +2142 336188.889 1179280.556 +2143 336197.222 866088.889 +2144 336205.556 869713.889 +2145 336213.889 858441.667 +2146 336219.444 843691.667 +2147 336258.333 836125.000 +2148 336258.333 1176927.778 +2149 336261.111 859188.889 +2150 336288.889 913994.444 +2151 336288.889 917908.333 +2152 336288.889 919313.889 +2153 336305.556 1123325.000 +2154 336330.556 897111.111 +2155 336355.556 966086.111 +2156 336358.333 972225.000 +2157 336386.111 1173430.556 +2158 336411.111 1179177.778 +2159 336416.667 1058766.667 +2160 336416.667 1172900.000 +2161 336447.222 843258.333 +2162 336455.556 859125.000 +2163 336488.889 855875.000 +2164 336516.667 973761.111 +2165 336522.222 813613.889 +2166 336533.333 844494.444 +2167 336561.111 837183.333 +2168 336561.111 969066.667 +2169 336597.222 858316.667 +2170 336597.222 876000.000 +2171 336600.000 844102.778 +2172 336600.000 868127.778 +2173 336600.000 1012375.000 +2174 336602.778 1179983.333 +2175 336608.333 955552.778 +2176 336613.889 952663.889 +2177 336613.889 953855.556 +2178 336647.222 791027.778 +2179 336663.889 1016825.000 +2180 336669.444 935913.889 +2181 336675.000 798308.333 +2182 336675.000 840177.778 +2183 336694.444 1178222.222 +2184 336705.556 1015347.222 +2185 336741.667 941311.111 +2186 336741.667 1013872.222 +2187 336772.222 863966.667 +2188 336794.444 844394.444 +2189 336802.778 1161730.556 +2190 336833.333 789986.111 +2191 336844.444 878308.333 +2192 336861.111 864750.000 +2193 336888.889 788869.444 +2194 336888.889 1019977.778 +2195 336938.889 817672.222 +2196 336950.000 802111.111 +2197 336986.111 858397.222 +2198 337038.889 907263.889 +2199 337066.667 840316.667 +2200 337072.222 842719.444 +2201 337091.667 1171963.889 +2202 337091.667 1179527.778 +2203 337122.222 841052.778 +2204 337133.333 873886.111 +2205 337205.556 1162147.222 +2206 337211.111 851455.556 +2207 337213.889 1163875.000 +2208 337244.444 926155.556 +2209 337258.333 905513.889 +2210 337286.111 870902.778 +2211 337305.556 872844.444 +2212 337319.444 849191.667 +2213 337366.667 827394.444 +2214 337369.444 850325.000 +2215 337372.222 1018361.111 +2216 337380.556 810980.556 +2217 337397.222 1164119.444 +2218 337413.889 1181038.889 +2219 337430.556 1171083.333 +2220 337444.444 852880.556 +2221 337444.444 861558.333 +2222 337455.556 1178669.444 +2223 337458.333 1171741.667 +2224 337458.333 1178252.778 +2225 337475.000 1169711.111 +2226 337480.556 868086.111 +2227 337488.889 843880.556 +2228 337519.444 858113.889 +2229 337536.111 794477.778 +2230 337547.222 842675.000 +2231 337555.556 965363.889 +2232 337569.444 881088.889 +2233 337569.444 1183530.556 +2234 337591.667 966691.667 +2235 337591.667 1180058.333 +2236 337597.222 871833.333 +2237 337669.444 1181883.333 +2238 337688.889 898083.333 +2239 337713.889 842672.222 +2240 337733.333 868138.889 +2241 337738.889 1179405.556 +2242 337747.222 842963.889 +2243 337750.000 864716.667 +2244 337786.111 907213.889 +2245 337788.889 924916.667 +2246 337797.222 1164644.444 +2247 337802.778 843361.111 +2248 337825.000 1172277.778 +2249 337833.333 860025.000 +2250 337838.889 1169577.778 +2251 337855.556 1180841.667 +2252 337866.667 977255.556 +2253 337877.778 1178522.222 +2254 337877.778 1183572.222 +2255 337894.444 819297.222 +2256 337897.222 842641.667 +2257 337902.778 843061.111 +2258 337913.889 908569.444 +2259 337922.222 824791.667 +2260 337922.222 1183141.667 +2261 337936.111 842061.111 +2262 337938.889 846605.556 +2263 337947.222 837133.333 +2264 338005.556 1183891.667 +2265 338013.889 1171450.000 +2266 338025.000 851886.111 +2267 338025.000 933808.333 +2268 338025.000 1179922.222 +2269 338030.556 1180716.667 +2270 338080.556 841702.778 +2271 338094.444 842397.222 +2272 338094.444 905263.889 +2273 338111.111 1021633.333 +2274 338125.000 846344.444 +2275 338136.111 857613.889 +2276 338136.111 924127.778 +2277 338141.667 868094.444 +2278 338144.444 1178122.222 +2279 338161.111 986947.222 +2280 338169.444 811011.111 +2281 338169.444 1180363.889 +2282 338172.222 981950.000 +2283 338177.778 794494.444 +2284 338180.556 867427.778 +2285 338186.111 845825.000 +2286 338200.000 1163894.444 +2287 338247.222 870861.111 +2288 338250.000 885436.111 +2289 338302.778 1165444.444 +2290 338311.111 872775.000 +2291 338313.889 1180719.444 +2292 338313.889 1182811.111 +2293 338319.444 818011.111 +2294 338322.222 1018425.000 +2295 338333.333 1119500.000 +2296 338352.778 1179136.111 +2297 338358.333 790480.556 +2298 338358.333 1183397.222 +2299 338369.444 1099636.111 +2300 338388.889 839008.333 +2301 338388.889 907261.111 +2302 338452.778 816619.444 +2303 338463.889 1180458.333 +2304 338491.667 1183875.000 +2305 338530.556 965022.222 +2306 338533.333 910277.778 +2307 338536.111 1181330.556 +2308 338544.444 842172.222 +2309 338552.778 893113.889 +2310 338555.556 892844.444 +2311 338572.222 840200.000 +2312 338575.000 1154863.889 +2313 338594.444 846838.889 +2314 338622.222 1183986.111 +2315 338627.778 834088.889 +2316 338650.000 843366.667 +2317 338658.333 1180822.222 +2318 338675.000 827413.889 +2319 338675.000 1179972.222 +2320 338694.444 1015969.444 +2321 338702.778 1179244.444 +2322 338708.333 797555.556 +2323 338722.222 1178694.444 +2324 338752.778 1175655.556 +2325 338755.556 847622.222 +2326 338755.556 891772.222 +2327 338766.667 806930.556 +2328 338780.556 907272.222 +2329 338780.556 1175200.000 +2330 338816.667 1181161.111 +2331 338838.889 845144.444 +2332 338847.222 1184100.000 +2333 338869.444 914916.667 +2334 338883.333 1183080.556 +2335 338886.111 1178122.222 +2336 338894.444 1181588.889 +2337 338900.000 841430.556 +2338 338905.556 800186.111 +2339 338916.667 875261.111 +2340 338919.444 842988.889 +2341 338955.556 948261.111 +2342 338958.333 1182191.667 +2343 338966.667 979361.111 +2344 338980.556 842833.333 +2345 338983.333 889991.667 +2346 339016.667 881344.444 +2347 339022.222 1180808.333 +2348 339055.556 914988.889 +2349 339077.778 815475.000 +2350 339102.778 811047.222 +2351 339108.333 811358.333 +2352 339133.333 822936.111 +2353 339136.111 984930.556 +2354 339163.889 815136.111 +2355 339163.889 845447.222 +2356 339163.889 1183516.667 +2357 339166.667 928480.556 +2358 339166.667 1178991.667 +2359 339172.222 1023244.444 +2360 339172.222 1180111.111 +2361 339175.000 797441.667 +2362 339191.667 1184155.556 +2363 339202.778 803416.667 +2364 339202.778 1172777.778 +2365 339208.333 931538.889 +2366 339213.889 780205.556 +2367 339236.111 848408.333 +2368 339241.667 843786.111 +2369 339244.444 860225.000 +2370 339255.556 1168755.556 +2371 339288.889 878172.222 +2372 339294.444 1169763.889 +2373 339302.778 1182105.556 +2374 339319.444 1179452.778 +2375 339344.444 964283.333 +2376 339352.778 799327.778 +2377 339369.444 971163.889 +2378 339380.556 1183516.667 +2379 339383.333 943569.444 +2380 339397.222 862016.667 +2381 339400.000 1172427.778 +2382 339400.000 1181316.667 +2383 339411.111 842136.111 +2384 339427.778 918433.333 +2385 339441.667 909450.000 +2386 339455.556 938469.444 +2387 339461.111 843347.222 +2388 339472.222 903441.667 +2389 339472.222 1180844.444 +2390 339480.556 864727.778 +2391 339491.667 835347.222 +2392 339508.333 907677.778 +2393 339513.889 986683.333 +2394 339533.333 1173952.778 +2395 339547.222 860419.444 +2396 339561.111 839880.556 +2397 339583.333 921900.000 +2398 339605.556 1181844.444 +2399 339608.333 833780.556 +2400 339608.333 1179497.222 +2401 339608.333 1180408.333 +2402 339611.111 1165008.333 +2403 339616.667 1183522.222 +2404 339650.000 835966.667 +2405 339652.778 1181505.556 +2406 339655.556 810741.667 +2407 339655.556 879147.222 +2408 339669.444 832783.333 +2409 339672.222 941683.333 +2410 339680.556 1182241.667 +2411 339686.111 1127288.889 +2412 339725.000 1169763.889 +2413 339730.556 783861.111 +2414 339761.111 1179044.444 +2415 339766.667 896755.556 +2416 339775.000 1181861.111 +2417 339791.667 1180319.444 +2418 339813.889 812363.889 +2419 339816.667 1182241.667 +2420 339830.556 1180958.333 +2421 339838.889 997244.444 +2422 339841.667 884880.556 +2423 339844.444 1013372.222 +2424 339850.000 915608.333 +2425 339866.667 1181844.444 +2426 339875.000 802083.333 +2427 339875.000 822980.556 +2428 339886.111 838980.556 +2429 339897.222 834258.333 +2430 339911.111 963738.889 +2431 339919.444 893488.889 +2432 339925.000 837202.778 +2433 339925.000 1175155.556 +2434 339933.333 810741.667 +2435 339958.333 795702.778 +2436 339961.111 1174047.222 +2437 339966.667 779075.000 +2438 339980.556 858663.889 +2439 339986.111 967194.444 +2440 339997.222 791997.222 +2441 340005.556 810350.000 +2442 340013.889 817722.222 +2443 340016.667 887552.778 +2444 340022.222 950936.111 +2445 340025.000 850416.667 +2446 340027.778 841447.222 +2447 340066.667 900566.667 +2448 340094.444 1181044.444 +2449 340105.556 955094.444 +2450 340116.667 1174838.889 +2451 340119.444 1008216.667 +2452 340122.222 1003016.667 +2453 340122.222 1176880.556 +2454 340130.556 982319.444 +2455 340136.111 838277.778 +2456 340141.667 860066.667 +2457 340144.444 867469.444 +2458 340147.222 904316.667 +2459 340172.222 961425.000 +2460 340186.111 952661.111 +2461 340191.667 809900.000 +2462 340194.444 1184902.778 +2463 340200.000 979572.222 +2464 340200.000 1179486.111 +2465 340202.778 1178644.444 +2466 340211.111 1183955.556 +2467 340216.667 860886.111 +2468 340230.556 843616.667 +2469 340233.333 846155.556 +2470 340238.889 1181711.111 +2471 340252.778 877583.333 +2472 340261.111 863261.111 +2473 340272.222 958688.889 +2474 340291.667 947388.889 +2475 340291.667 989186.111 +2476 340336.111 1170422.222 +2477 340338.889 1173127.778 +2478 340350.000 778938.889 +2479 340377.778 943411.111 +2480 340444.444 907447.222 +2481 340452.778 1179427.778 +2482 340455.556 850561.111 +2483 340469.444 875497.222 +2484 340469.444 1165800.000 +2485 340483.333 1172602.778 +2486 340513.889 840713.889 +2487 340519.444 1180458.333 +2488 340522.222 1182427.778 +2489 340536.111 809613.889 +2490 340536.111 852550.000 +2491 340552.778 1177513.889 +2492 340561.111 788905.556 +2493 340583.333 1068908.333 +2494 340600.000 800716.667 +2495 340600.000 950030.556 +2496 340605.556 867675.000 +2497 340622.222 936897.222 +2498 340625.000 1180894.444 +2499 340625.000 1181219.444 +2500 340633.333 1176500.000 +2501 340636.111 831255.556 +2502 340638.889 809583.333 +2503 340641.667 1018433.333 +2504 340658.333 846769.444 +2505 340677.778 1025238.889 +2506 340680.556 981902.778 +2507 340686.111 1179380.556 +2508 340686.111 1180266.667 +2509 340700.000 883911.111 +2510 340702.778 1173950.000 +2511 340722.222 860333.333 +2512 340736.111 1098563.889 +2513 340736.111 1183994.444 +2514 340738.889 1173127.778 +2515 340750.000 925552.778 +2516 340752.778 842941.667 +2517 340805.556 1180719.444 +2518 340808.333 844113.889 +2519 340813.889 865911.111 +2520 340852.778 1179600.000 +2521 340858.333 811833.333 +2522 340888.889 886222.222 +2523 340900.000 1178894.444 +2524 340900.000 1183608.333 +2525 340902.778 967713.889 +2526 340922.222 825958.333 +2527 340922.222 1174341.667 +2528 340952.778 1181261.111 +2529 340961.111 1181050.000 +2530 340966.667 1177188.889 +2531 340975.000 1176475.000 +2532 340977.778 985702.778 +2533 341008.333 1177669.444 +2534 341013.889 845194.444 +2535 341030.556 1178450.000 +2536 341066.667 1178058.333 +2537 341069.444 1179344.444 +2538 341072.222 1180569.444 +2539 341111.111 828672.222 +2540 341111.111 1092908.333 +2541 341161.111 887116.667 +2542 341161.111 1181494.444 +2543 341166.667 1072433.333 +2544 341172.222 913763.889 +2545 341191.667 940163.889 +2546 341191.667 1164450.000 +2547 341205.556 840044.444 +2548 341208.333 930536.111 +2549 341213.889 1173022.222 +2550 341213.889 1181055.556 +2551 341244.444 1014411.111 +2552 341258.333 1099369.444 +2553 341266.667 962630.556 +2554 341283.333 1172077.778 +2555 341333.333 1092852.778 +2556 341336.111 1179066.667 +2557 341344.444 778819.444 +2558 341347.222 799400.000 +2559 341347.222 1163122.222 +2560 341355.556 1160533.333 +2561 341361.111 1178644.444 +2562 341394.444 1179763.889 +2563 341397.222 1180344.444 +2564 341422.222 879886.111 +2565 341463.889 874022.222 +2566 341469.444 1179700.000 +2567 341477.778 1181436.111 +2568 341477.778 1191941.667 +2569 341480.556 1179980.556 +2570 341486.111 788769.444 +2571 341500.000 1142883.333 +2572 341513.889 896313.889 +2573 341519.444 856788.889 +2574 341541.667 1173433.333 +2575 341544.444 992647.222 +2576 341544.444 1099727.778 +2577 341602.778 1186513.889 +2578 341616.667 1180519.444 +2579 341650.000 848000.000 +2580 341669.444 979972.222 +2581 341686.111 800627.778 +2582 341705.556 1188366.667 +2583 341733.333 901375.000 +2584 341738.889 845013.889 +2585 341741.667 971433.333 +2586 341747.222 868436.111 +2587 341750.000 820241.667 +2588 341752.778 972625.000 +2589 341780.556 794008.333 +2590 341780.556 823791.667 +2591 341783.333 975922.222 +2592 341791.667 778477.778 +2593 341833.333 1021341.667 +2594 341850.000 839252.778 +2595 341858.333 968802.778 +2596 341861.111 1033338.889 +2597 341866.667 851747.222 +2598 341872.222 969841.667 +2599 341897.222 1181302.778 +2600 341941.667 887197.222 +2601 341952.778 797627.778 +2602 341952.778 821619.444 +2603 341975.000 1191761.111 +2604 342000.000 905708.333 +2605 342005.556 861663.889 +2606 342016.667 902833.333 +2607 342022.222 871813.889 +2608 342038.889 834572.222 +2609 342047.222 830308.333 +2610 342055.556 792547.222 +2611 342072.222 841402.778 +2612 342083.333 777966.667 +2613 342091.667 778438.889 +2614 342091.667 815333.333 +2615 342102.778 778869.444 +2616 342116.667 1016897.222 +2617 342133.333 886644.444 +2618 342163.889 1190366.667 +2619 342177.778 905419.444 +2620 342180.556 802486.111 +2621 342200.000 856077.778 +2622 342255.556 779450.000 +2623 342263.889 876213.889 +2624 342263.889 1027233.333 +2625 342272.222 806894.444 +2626 342275.000 838844.444 +2627 342283.333 920030.556 +2628 342283.333 986841.667 +2629 342308.333 1113244.444 +2630 342311.111 956200.000 +2631 342322.222 1191716.667 +2632 342330.556 974875.000 +2633 342330.556 1024102.778 +2634 342336.111 791488.889 +2635 342361.111 966783.333 +2636 342366.667 844908.333 +2637 342369.444 849441.667 +2638 342408.333 990752.778 +2639 342419.444 853358.333 +2640 342419.444 1172847.222 +2641 342463.889 806072.222 +2642 342477.778 889986.111 +2643 342483.333 1171883.333 +2644 342527.778 835616.667 +2645 342541.667 1100291.667 +2646 342563.889 902719.444 +2647 342563.889 995163.889 +2648 342569.444 851647.222 +2649 342575.000 887033.333 +2650 342638.889 858605.556 +2651 342647.222 934608.333 +2652 342675.000 862088.889 +2653 342719.444 982355.556 +2654 342722.222 778188.889 +2655 342738.889 884091.667 +2656 342738.889 920908.333 +2657 342744.444 816188.889 +2658 342772.222 878286.111 +2659 342819.444 1184380.556 +2660 342827.778 847452.778 +2661 342847.222 831444.444 +2662 342855.556 1188811.111 +2663 342869.444 831102.778 +2664 342883.333 779213.889 +2665 342927.778 913377.778 +2666 342977.778 838241.667 +2667 342977.778 997400.000 +2668 342997.222 798763.889 +2669 343047.222 819830.556 +2670 343063.889 826638.889 +2671 343069.444 924011.111 +2672 343083.333 908519.444 +2673 343113.889 899441.667 +2674 343133.333 790375.000 +2675 343144.444 971425.000 +2676 343180.556 864958.333 +2677 343188.889 785002.778 +2678 343191.667 918472.222 +2679 343205.556 784022.222 +2680 343219.444 788272.222 +2681 343241.667 884911.111 +2682 343266.667 935505.556 +2683 343333.333 823880.556 +2684 343336.111 834991.667 +2685 343366.667 850713.889 +2686 343369.444 794313.889 +2687 343380.556 843766.667 +2688 343386.111 787033.333 +2689 343455.556 791658.333 +2690 343461.111 831100.000 +2691 343508.333 877063.889 +2692 343513.889 860008.333 +2693 343527.778 829322.222 +2694 343530.556 890230.556 +2695 343541.667 1190583.333 +2696 343555.556 779002.778 +2697 343580.556 862947.222 +2698 343597.222 983075.000 +2699 343608.333 1176325.000 +2700 343616.667 810855.556 +2701 343622.222 928127.778 +2702 343661.111 1010566.667 +2703 343663.889 1017480.556 +2704 343683.333 869086.111 +2705 343686.111 849341.667 +2706 343688.889 979636.111 +2707 343694.444 906388.889 +2708 343713.889 1193055.556 +2709 343738.889 800736.111 +2710 343763.889 886816.667 +2711 343805.556 810866.667 +2712 343819.444 843711.111 +2713 343847.222 1185300.000 +2714 343850.000 1021152.778 +2715 343858.333 961280.556 +2716 343875.000 836663.889 +2717 343886.111 1030508.333 +2718 343919.444 990180.556 +2719 343925.000 1008972.222 +2720 343936.111 800697.222 +2721 343983.333 822469.444 +2722 343988.889 1195175.000 +2723 343991.667 1189172.222 +2724 344000.000 1192991.667 +2725 344047.222 1032047.222 +2726 344147.222 818113.889 +2727 344152.778 1187930.556 +2728 344163.889 793713.889 +2729 344219.444 917061.111 +2730 344233.333 1197033.333 +2731 344244.444 930950.000 +2732 344263.889 1002036.111 +2733 344263.889 1173000.000 +2734 344302.778 1036319.444 +2735 344319.444 902208.333 +2736 344358.333 831069.444 +2737 344361.111 847000.000 +2738 344397.222 881408.333 +2739 344433.333 869352.778 +2740 344436.111 1186086.111 +2741 344441.667 857197.222 +2742 344450.000 921830.556 +2743 344463.889 823916.667 +2744 344466.667 859041.667 +2745 344480.556 1192419.444 +2746 344550.000 936800.000 +2747 344600.000 976736.111 +2748 344650.000 1100905.556 +2749 344666.667 960530.556 +2750 344672.222 835738.889 +2751 344677.778 844291.667 +2752 344688.889 802561.111 +2753 344705.556 826708.333 +2754 344716.667 1042450.000 +2755 344719.444 996477.778 +2756 344725.000 818808.333 +2757 344741.667 1013041.667 +2758 344750.000 782025.000 +2759 344805.556 853477.778 +2760 344811.111 872933.333 +2761 344811.111 983827.778 +2762 344838.889 1143216.667 +2763 344847.222 854763.889 +2764 344872.222 786563.889 +2765 344916.667 835375.000 +2766 344941.667 858477.778 +2767 344941.667 890077.778 +2768 344966.667 791144.444 +2769 344988.889 820144.444 +2770 345002.778 915525.000 +2771 345008.333 1171850.000 +2772 345013.889 926363.889 +2773 345022.222 979575.000 +2774 345025.000 849511.111 +2775 345025.000 901986.111 +2776 345027.778 816116.667 +2777 345027.778 991405.556 +2778 345033.333 826502.778 +2779 345036.111 930550.000 +2780 345044.444 971191.667 +2781 345077.778 877286.111 +2782 345077.778 969680.556 +2783 345094.444 886352.778 +2784 345105.556 899397.222 +2785 345113.889 835272.222 +2786 345125.000 798511.111 +2787 345133.333 1100777.778 +2788 345136.111 1028825.000 +2789 345186.111 835008.333 +2790 345202.778 1062405.556 +2791 345227.778 824944.444 +2792 345230.556 869702.778 +2793 345250.000 868947.222 +2794 345286.111 862533.333 +2795 345325.000 839850.000 +2796 345358.333 1017580.556 +2797 345361.111 1172902.778 +2798 345363.889 792916.667 +2799 345380.556 962183.333 +2800 345386.111 787877.778 +2801 345400.000 1124677.778 +2802 345438.889 853105.556 +2803 345441.667 919688.889 +2804 345486.111 994219.444 +2805 345505.556 906416.667 +2806 345508.333 1023113.889 +2807 345516.667 805838.889 +2808 345519.444 779263.889 +2809 345555.556 909127.778 +2810 345566.667 936338.889 +2811 345622.222 858125.000 +2812 345636.111 1118536.111 +2813 345644.444 925866.667 +2814 345650.000 835452.778 +2815 345688.889 856150.000 +2816 345719.444 931730.556 +2817 345750.000 809022.222 +2818 345772.222 833325.000 +2819 345794.444 795466.667 +2820 345794.444 1181155.556 +2821 345811.111 1132038.889 +2822 345827.778 1174083.333 +2823 345861.111 942394.444 +2824 345894.444 953525.000 +2825 345930.556 806755.556 +2826 345958.333 911997.222 +2827 345958.333 1201366.667 +2828 345969.444 837633.333 +2829 346016.667 1052077.778 +2830 346047.222 964238.889 +2831 346058.333 869833.333 +2832 346080.556 821136.111 +2833 346086.111 983900.000 +2834 346100.000 1123150.000 +2835 346125.000 835250.000 +2836 346136.111 1201916.667 +2837 346144.444 1200788.889 +2838 346172.222 796850.000 +2839 346175.000 899686.111 +2840 346180.556 790088.889 +2841 346183.333 824780.556 +2842 346200.000 923952.778 +2843 346227.778 973961.111 +2844 346275.000 968405.556 +2845 346277.778 862744.444 +2846 346291.667 786055.556 +2847 346294.444 986283.333 +2848 346350.000 857672.222 +2849 346377.778 978172.222 +2850 346380.556 993336.111 +2851 346391.667 1204569.444 +2852 346402.778 784841.667 +2853 346416.667 1027236.111 +2854 346433.333 971641.667 +2855 346447.222 824702.778 +2856 346452.778 1182172.222 +2857 346461.111 893052.778 +2858 346480.556 979577.778 +2859 346500.000 803891.667 +2860 346516.667 827838.889 +2861 346525.000 965258.333 +2862 346563.889 819652.778 +2863 346580.556 885666.667 +2864 346588.889 989513.889 +2865 346627.778 1067758.333 +2866 346647.222 830966.667 +2867 346686.111 795455.556 +2868 346708.333 890263.889 +2869 346719.444 929986.111 +2870 346722.222 860341.667 +2871 346777.778 769511.111 +2872 346780.556 829316.667 +2873 346800.000 791952.778 +2874 346811.111 874061.111 +2875 346833.333 828375.000 +2876 346844.444 903827.778 +2877 346855.556 829533.333 +2878 346875.000 771194.444 +2879 346883.333 999116.667 +2880 346888.889 821958.333 +2881 346930.556 913136.111 +2882 346950.000 765597.222 +2883 346972.222 989491.667 +2884 346975.000 798836.111 +2885 346980.556 1181358.333 +2886 346988.889 767405.556 +2887 347008.333 875288.889 +2888 347016.667 863758.333 +2889 347022.222 824647.222 +2890 347047.222 812144.444 +2891 347047.222 852819.444 +2892 347141.667 856808.333 +2893 347180.556 766641.667 +2894 347202.778 807711.111 +2895 347205.556 958988.889 +2896 347227.778 767263.889 +2897 347241.667 827813.889 +2898 347247.222 1005336.111 +2899 347297.222 889505.556 +2900 347302.778 865861.111 +2901 347311.111 877025.000 +2902 347338.889 824438.889 +2903 347350.000 793491.667 +2904 347355.556 779955.556 +2905 347358.333 800883.333 +2906 347369.444 822544.444 +2907 347394.444 820372.222 +2908 347400.000 972219.444 +2909 347436.111 1018541.667 +2910 347447.222 876675.000 +2911 347463.889 922894.444 +2912 347502.778 981713.889 +2913 347513.889 950477.778 +2914 347538.889 774305.556 +2915 347569.444 879727.778 +2916 347575.000 1124530.556 +2917 347583.333 1060552.778 +2918 347588.889 796108.333 +2919 347600.000 827538.889 +2920 347647.222 830641.667 +2921 347650.000 876986.111 +2922 347658.333 847700.000 +2923 347694.444 922669.444 +2924 347697.222 849702.778 +2925 347711.111 794438.889 +2926 347711.111 1120572.222 +2927 347730.556 803919.444 +2928 347736.111 907575.000 +2929 347738.889 794630.556 +2930 347744.444 966780.556 +2931 347780.556 923488.889 +2932 347786.111 823102.778 +2933 347794.444 993350.000 +2934 347802.778 982919.444 +2935 347808.333 915808.333 +2936 347825.000 979566.667 +2937 347830.556 917463.889 +2938 347838.889 918997.222 +2939 347861.111 783944.444 +2940 347863.889 768594.444 +2941 347877.778 826925.000 +2942 347966.667 969591.667 +2943 347997.222 876772.222 +2944 348000.000 824244.444 +2945 348027.778 869716.667 +2946 348061.111 1067327.778 +2947 348116.667 881900.000 +2948 348150.000 791833.333 +2949 348150.000 922241.667 +2950 348150.000 1023972.222 +2951 348172.222 974055.556 +2952 348227.778 1189438.889 +2953 348230.556 982438.889 +2954 348238.889 899936.111 +2955 348247.222 824194.444 +2956 348252.778 1068380.556 +2957 348255.556 872947.222 +2958 348258.333 774597.222 +2959 348266.667 972588.889 +2960 348288.889 958436.111 +2961 348297.222 826016.667 +2962 348347.222 976022.222 +2963 348405.556 850427.778 +2964 348405.556 883147.222 +2965 348422.222 826447.222 +2966 348450.000 955572.222 +2967 348480.556 1146133.333 +2968 348513.889 865722.222 +2969 348525.000 823941.667 +2970 348544.444 955819.444 +2971 348561.111 1002133.333 +2972 348611.111 966652.778 +2973 348613.889 824316.667 +2974 348627.778 875375.000 +2975 348638.889 800013.889 +2976 348638.889 843241.667 +2977 348641.667 1181625.000 +2978 348661.111 921100.000 +2979 348686.111 858394.444 +2980 348697.222 1117602.778 +2981 348711.111 852908.333 +2982 348719.444 855091.667 +2983 348719.444 995038.889 +2984 348722.222 896905.556 +2985 348761.111 839583.333 +2986 348766.667 1171030.556 +2987 348777.778 824241.667 +2988 348780.556 834011.111 +2989 348788.889 769016.667 +2990 348788.889 964122.222 +2991 348794.444 819663.889 +2992 348833.333 827075.000 +2993 348847.222 796944.444 +2994 348852.778 824561.111 +2995 348877.778 793663.889 +2996 348877.778 911944.444 +2997 348891.667 946005.556 +2998 348905.556 809566.667 +2999 348936.111 983655.556 +3000 348963.889 982002.778 +3001 348983.333 940905.556 +3002 348988.889 817619.444 +3003 349022.222 1101575.000 +3004 349025.000 790119.444 +3005 349047.222 772316.667 +3006 349050.000 1168194.444 +3007 349069.444 1066802.778 +3008 349105.556 818530.556 +3009 349127.778 911100.000 +3010 349147.222 977783.333 +3011 349158.333 851091.667 +3012 349180.556 797627.778 +3013 349180.556 833855.556 +3014 349180.556 973141.667 +3015 349186.111 953088.889 +3016 349202.778 822963.889 +3017 349225.000 817427.778 +3018 349236.111 777741.667 +3019 349238.889 819330.556 +3020 349244.444 807436.111 +3021 349277.778 957155.556 +3022 349283.333 820991.667 +3023 349319.444 981400.000 +3024 349322.222 865719.444 +3025 349330.556 837772.222 +3026 349330.556 838472.222 +3027 349333.333 957694.444 +3028 349363.889 818794.444 +3029 349377.778 821452.778 +3030 349377.778 1008877.778 +3031 349386.111 822272.222 +3032 349386.111 1046819.444 +3033 349391.667 797741.667 +3034 349430.556 797872.222 +3035 349447.222 818377.778 +3036 349475.000 857144.444 +3037 349480.556 821275.000 +3038 349491.667 904713.889 +3039 349494.444 819322.222 +3040 349508.333 821061.111 +3041 349508.333 950800.000 +3042 349511.111 946369.444 +3043 349527.778 785088.889 +3044 349530.556 1204347.222 +3045 349569.444 924272.222 +3046 349580.556 819908.333 +3047 349580.556 852233.333 +3048 349594.444 967525.000 +3049 349611.111 819675.000 +3050 349616.667 898294.444 +3051 349622.222 779625.000 +3052 349622.222 993802.778 +3053 349672.222 947244.444 +3054 349675.000 799847.222 +3055 349675.000 824436.111 +3056 349680.556 800769.444 +3057 349691.667 873711.111 +3058 349702.778 789455.556 +3059 349716.667 1205708.333 +3060 349722.222 909025.000 +3061 349744.444 920163.889 +3062 349769.444 914950.000 +3063 349775.000 853577.778 +3064 349808.333 792244.444 +3065 349830.556 852861.111 +3066 349841.667 804494.444 +3067 349841.667 819266.667 +3068 349852.778 805497.222 +3069 349861.111 843713.889 +3070 349883.333 803672.222 +3071 349894.444 969233.333 +3072 349894.444 992491.667 +3073 349900.000 1060486.111 +3074 349919.444 818350.000 +3075 349919.444 868466.667 +3076 349919.444 868469.444 +3077 349936.111 802647.222 +3078 349941.667 812422.222 +3079 349941.667 853494.444 +3080 349958.333 792263.889 +3081 349977.778 783236.111 +3082 349991.667 780913.889 +3083 349994.444 1176488.889 +3084 350025.000 809800.000 +3085 350047.222 928025.000 +3086 350072.222 809452.778 +3087 350075.000 802011.111 +3088 350080.556 907897.222 +3089 350080.556 912511.111 +3090 350122.222 857044.444 +3091 350130.556 907225.000 +3092 350133.333 786941.667 +3093 350136.111 973608.333 +3094 350141.667 852519.444 +3095 350147.222 973352.778 +3096 350152.778 785033.333 +3097 350158.333 819750.000 +3098 350166.667 818041.667 +3099 350169.444 1178347.222 +3100 350227.778 943811.111 +3101 350241.667 810280.556 +3102 350241.667 1106966.667 +3103 350294.444 990927.778 +3104 350308.333 766933.333 +3105 350319.444 787950.000 +3106 350322.222 932230.556 +3107 350413.889 821044.444 +3108 350419.444 896644.444 +3109 350427.778 1204750.000 +3110 350450.000 896216.667 +3111 350455.556 853097.222 +3112 350469.444 820902.778 +3113 350477.778 856719.444 +3114 350511.111 862697.222 +3115 350522.222 868886.111 +3116 350525.000 788786.111 +3117 350525.000 831969.444 +3118 350525.000 979361.111 +3119 350525.000 1181730.556 +3120 350530.556 850502.778 +3121 350536.111 946233.333 +3122 350538.889 933933.333 +3123 350550.000 777466.667 +3124 350552.778 871575.000 +3125 350561.111 884352.778 +3126 350588.889 1194000.000 +3127 350594.444 942525.000 +3128 350644.444 888908.333 +3129 350705.556 918794.444 +3130 350711.111 797616.667 +3131 350716.667 816500.000 +3132 350725.000 982433.333 +3133 350741.667 856261.111 +3134 350766.667 806694.444 +3135 350777.778 874397.222 +3136 350800.000 816330.556 +3137 350802.778 963988.889 +3138 350822.222 942630.556 +3139 350830.556 808925.000 +3140 350833.333 980875.000 +3141 350838.889 922077.778 +3142 350844.444 1066505.556 +3143 350872.222 973347.222 +3144 350875.000 840347.222 +3145 350886.111 770352.778 +3146 350886.111 924419.444 +3147 350905.556 806863.889 +3148 350930.556 934483.333 +3149 350950.000 789558.333 +3150 350963.889 787841.667 +3151 350975.000 987461.111 +3152 350977.778 984352.778 +3153 350988.889 1206113.889 +3154 351036.111 986033.333 +3155 351044.444 801094.444 +3156 351055.556 830966.667 +3157 351083.333 770444.444 +3158 351097.222 794725.000 +3159 351111.111 812266.667 +3160 351116.667 1013627.778 +3161 351127.778 918222.222 +3162 351136.111 851380.556 +3163 351161.111 781363.889 +3164 351166.667 807238.889 +3165 351186.111 1205897.222 +3166 351211.111 815161.111 +3167 351216.667 1206202.778 +3168 351225.000 853438.889 +3169 351227.778 953708.333 +3170 351258.333 1179850.000 +3171 351302.778 967755.556 +3172 351313.889 794297.222 +3173 351322.222 1184480.556 +3174 351347.222 1194552.778 +3175 351347.222 1194716.667 +3176 351377.778 976577.778 +3177 351391.667 973944.444 +3178 351400.000 939213.889 +3179 351411.111 848722.222 +3180 351425.000 1194555.556 +3181 351427.778 767705.556 +3182 351427.778 1206402.778 +3183 351436.111 828213.889 +3184 351447.222 768025.000 +3185 351461.111 966697.222 +3186 351463.889 901844.444 +3187 351483.333 818611.111 +3188 351494.444 900488.889 +3189 351497.222 949705.556 +3190 351508.333 927438.889 +3191 351508.333 938066.667 +3192 351519.444 865705.556 +3193 351522.222 1078425.000 +3194 351536.111 781055.556 +3195 351544.444 1194552.778 +3196 351577.778 991750.000 +3197 351586.111 964930.556 +3198 351594.444 848766.667 +3199 351600.000 926405.556 +3200 351608.333 848577.778 +3201 351619.444 1066422.222 +3202 351644.444 860105.556 +3203 351647.222 853013.889 +3204 351672.222 946722.222 +3205 351677.778 789730.556 +3206 351697.222 1078902.778 +3207 351700.000 885922.222 +3208 351716.667 1037244.444 +3209 351738.889 793925.000 +3210 351741.667 846536.111 +3211 351741.667 877377.778 +3212 351744.444 814500.000 +3213 351750.000 821894.444 +3214 351794.444 806475.000 +3215 351858.333 861122.222 +3216 351863.889 947855.556 +3217 351872.222 773211.111 +3218 351883.333 982602.778 +3219 351894.444 854858.333 +3220 351894.444 1140522.222 +3221 351902.778 944108.333 +3222 351958.333 851847.222 +3223 351980.556 1116505.556 +3224 351997.222 870308.333 +3225 352005.556 1067005.556 +3226 352013.889 855191.667 +3227 352016.667 838241.667 +3228 352030.556 859211.111 +3229 352036.111 1011063.889 +3230 352044.444 898738.889 +3231 352086.111 851269.444 +3232 352091.667 1188275.000 +3233 352097.222 860794.444 +3234 352144.444 901963.889 +3235 352152.778 998661.111 +3236 352191.667 812058.333 +3237 352219.444 1018308.333 +3238 352225.000 974391.667 +3239 352230.556 931577.778 +3240 352244.444 907866.667 +3241 352244.444 966702.778 +3242 352247.222 882491.667 +3243 352250.000 903250.000 +3244 352255.556 803291.667 +3245 352269.444 808433.333 +3246 352302.778 810427.778 +3247 352311.111 944777.778 +3248 352316.667 916675.000 +3249 352325.000 1005994.444 +3250 352333.333 827344.444 +3251 352336.111 886063.889 +3252 352338.889 923875.000 +3253 352352.778 815147.222 +3254 352358.333 883905.556 +3255 352361.111 823494.444 +3256 352361.111 851986.111 +3257 352369.444 974061.111 +3258 352375.000 962413.889 +3259 352377.778 1066061.111 +3260 352380.556 1189141.667 +3261 352386.111 810752.778 +3262 352386.111 1066666.667 +3263 352391.667 944258.333 +3264 352400.000 858397.222 +3265 352411.111 946197.222 +3266 352422.222 873347.222 +3267 352427.778 1024277.778 +3268 352436.111 893500.000 +3269 352450.000 813413.889 +3270 352463.889 929363.889 +3271 352472.222 975994.444 +3272 352480.556 930488.889 +3273 352494.444 1121902.778 +3274 352505.556 917361.111 +3275 352530.556 821972.222 +3276 352536.111 951227.778 +3277 352541.667 827002.778 +3278 352555.556 793725.000 +3279 352555.556 949213.889 +3280 352561.111 792825.000 +3281 352561.111 889877.778 +3282 352561.111 912000.000 +3283 352569.444 783525.000 +3284 352577.778 969363.889 +3285 352591.667 810755.556 +3286 352597.222 804255.556 +3287 352597.222 1189133.333 +3288 352602.778 857361.111 +3289 352605.556 971194.444 +3290 352619.444 811875.000 +3291 352625.000 775819.444 +3292 352633.333 905711.111 +3293 352677.778 811030.556 +3294 352700.000 916397.222 +3295 352705.556 861280.556 +3296 352722.222 810483.333 +3297 352747.222 812102.778 +3298 352750.000 904666.667 +3299 352766.667 991347.222 +3300 352783.333 931336.111 +3301 352800.000 824222.222 +3302 352822.222 913652.778 +3303 352827.778 1206586.111 +3304 352830.556 863741.667 +3305 352847.222 812841.667 +3306 352861.111 811305.556 +3307 352872.222 955822.222 +3308 352888.889 811450.000 +3309 352908.333 978119.444 +3310 352911.111 996397.222 +3311 352919.444 937297.222 +3312 352922.222 815358.333 +3313 352927.778 936344.444 +3314 352950.000 797455.556 +3315 352963.889 847480.556 +3316 352969.444 940361.111 +3317 352980.556 810161.111 +3318 352983.333 824833.333 +3319 353000.000 1065505.556 +3320 353052.778 767888.889 +3321 353061.111 786091.667 +3322 353066.667 777883.333 +3323 353083.333 771544.444 +3324 353088.889 983416.667 +3325 353097.222 915677.778 +3326 353105.556 818588.889 +3327 353111.111 824441.667 +3328 353127.778 979441.667 +3329 353163.889 811763.889 +3330 353186.111 824611.111 +3331 353194.444 877622.222 +3332 353227.778 838075.000 +3333 353233.333 845250.000 +3334 353236.111 806561.111 +3335 353236.111 873036.111 +3336 353255.556 943013.889 +3337 353258.333 896161.111 +3338 353263.889 891494.444 +3339 353266.667 786763.889 +3340 353272.222 969250.000 +3341 353288.889 817588.889 +3342 353288.889 932527.778 +3343 353338.889 818652.778 +3344 353355.556 961361.111 +3345 353361.111 941730.556 +3346 353375.000 857041.667 +3347 353394.444 974863.889 +3348 353413.889 898972.222 +3349 353425.000 779088.889 +3350 353458.333 794172.222 +3351 353463.889 824722.222 +3352 353488.889 991700.000 +3353 353500.000 802002.778 +3354 353511.111 855677.778 +3355 353544.444 944338.889 +3356 353561.111 952652.778 +3357 353575.000 780061.111 +3358 353583.333 798947.222 +3359 353588.889 810972.222 +3360 353597.222 797800.000 +3361 353600.000 819294.444 +3362 353613.889 868397.222 +3363 353619.444 862094.444 +3364 353627.778 842941.667 +3365 353652.778 1034102.778 +3366 353658.333 1208488.889 +3367 353691.667 819569.444 +3368 353694.444 824930.556 +3369 353713.889 853905.556 +3370 353725.000 774377.778 +3371 353733.333 1190177.778 +3372 353736.111 832261.111 +3373 353780.556 987816.667 +3374 353786.111 813791.667 +3375 353797.222 902577.778 +3376 353819.444 785488.889 +3377 353833.333 1191088.889 +3378 353841.667 922155.556 +3379 353841.667 977241.667 +3380 353847.222 779930.556 +3381 353858.333 943983.333 +3382 353869.444 879952.778 +3383 353877.778 805958.333 +3384 353916.667 979411.111 +3385 353991.667 788161.111 +3386 354005.556 1194686.111 +3387 354013.889 931141.667 +3388 354019.444 797844.444 +3389 354019.444 907530.556 +3390 354019.444 974811.111 +3391 354025.000 812025.000 +3392 354025.000 1082227.778 +3393 354058.333 801169.444 +3394 354061.111 945986.111 +3395 354077.778 786722.222 +3396 354105.556 808430.556 +3397 354116.667 902783.333 +3398 354119.444 994038.889 +3399 354130.556 787358.333 +3400 354133.333 780711.111 +3401 354175.000 816430.556 +3402 354197.222 1190202.778 +3403 354211.111 945144.444 +3404 354219.444 992791.667 +3405 354230.556 914558.333 +3406 354244.444 844875.000 +3407 354266.667 918366.667 +3408 354286.111 794933.333 +3409 354288.889 815016.667 +3410 354294.444 857230.556 +3411 354302.778 942313.889 +3412 354308.333 834475.000 +3413 354325.000 936152.778 +3414 354325.000 963047.222 +3415 354338.889 795872.222 +3416 354338.889 1064461.111 +3417 354341.667 806208.333 +3418 354352.778 1011725.000 +3419 354358.333 970911.111 +3420 354363.889 1008052.778 +3421 354366.667 943480.556 +3422 354372.222 936727.778 +3423 354391.667 886413.889 +3424 354397.222 959816.667 +3425 354405.556 933877.778 +3426 354411.111 897780.556 +3427 354419.444 974405.556 +3428 354427.778 845930.556 +3429 354427.778 1208911.111 +3430 354447.222 784272.222 +3431 354452.778 1002705.556 +3432 354469.444 850844.444 +3433 354491.667 867888.889 +3434 354491.667 898150.000 +3435 354494.444 973963.889 +3436 354580.556 959411.111 +3437 354602.778 947872.222 +3438 354622.222 894019.444 +3439 354638.889 815219.444 +3440 354658.333 781608.333 +3441 354666.667 856541.667 +3442 354675.000 975161.111 +3443 354686.111 830041.667 +3444 354700.000 955227.778 +3445 354713.889 934663.889 +3446 354713.889 983552.778 +3447 354725.000 774158.333 +3448 354736.111 812547.222 +3449 354777.778 942216.667 +3450 354797.222 791805.556 +3451 354816.667 860886.111 +3452 354833.333 864602.778 +3453 354866.667 808602.778 +3454 354866.667 966847.222 +3455 354869.444 938275.000 +3456 354872.222 806219.444 +3457 354886.111 829888.889 +3458 354894.444 971633.333 +3459 354894.444 1206697.222 +3460 354900.000 903586.111 +3461 354911.111 973227.778 +3462 354913.889 920311.111 +3463 354922.222 941375.000 +3464 354938.889 850125.000 +3465 354941.667 953052.778 +3466 354969.444 779822.222 +3467 354975.000 972686.111 +3468 354983.333 949694.444 +3469 354991.667 808488.889 +3470 355005.556 940513.889 +3471 355033.333 969025.000 +3472 355041.667 974458.333 +3473 355066.667 977622.222 +3474 355069.444 787394.444 +3475 355077.778 901469.444 +3476 355083.333 783397.222 +3477 355125.000 771008.333 +3478 355133.333 845452.778 +3479 355147.222 847902.778 +3480 355147.222 1063652.778 +3481 355150.000 882452.778 +3482 355155.556 989669.444 +3483 355186.111 976319.444 +3484 355197.222 843636.111 +3485 355225.000 976186.111 +3486 355227.778 973769.444 +3487 355261.111 987072.222 +3488 355272.222 863336.111 +3489 355280.556 1087419.444 +3490 355288.889 774013.889 +3491 355297.222 806683.333 +3492 355322.222 979547.222 +3493 355325.000 770327.778 +3494 355327.778 828375.000 +3495 355327.778 904205.556 +3496 355333.333 829108.333 +3497 355336.111 825286.111 +3498 355361.111 1009594.444 +3499 355363.889 782847.222 +3500 355400.000 766233.333 +3501 355452.778 779750.000 +3502 355455.556 806111.111 +3503 355463.889 770525.000 +3504 355477.778 875519.444 +3505 355494.444 985777.778 +3506 355497.222 826502.778 +3507 355508.333 975486.111 +3508 355511.111 804066.667 +3509 355608.333 975511.111 +3510 355641.667 896463.889 +3511 355641.667 907166.667 +3512 355641.667 1210797.222 +3513 355658.333 972866.667 +3514 355691.667 805819.444 +3515 355741.667 1056744.444 +3516 355752.778 1011838.889 +3517 355755.556 812119.444 +3518 355777.778 989641.667 +3519 355841.667 788002.778 +3520 355841.667 881194.444 +3521 355847.222 808102.778 +3522 355869.444 804630.556 +3523 355880.556 1184911.111 +3524 355900.000 842419.444 +3525 355913.889 924602.778 +3526 355941.667 1193400.000 +3527 355961.111 781244.444 +3528 355977.778 824000.000 +3529 356008.333 825541.667 +3530 356013.889 844611.111 +3531 356027.778 859197.222 +3532 356055.556 851888.889 +3533 356066.667 778236.111 +3534 356075.000 958600.000 +3535 356080.556 968208.333 +3536 356091.667 1184827.778 +3537 356111.111 773730.556 +3538 356111.111 903297.222 +3539 356122.222 804469.444 +3540 356138.889 996711.111 +3541 356138.889 1067252.778 +3542 356144.444 888138.889 +3543 356150.000 870352.778 +3544 356172.222 878394.444 +3545 356177.778 823213.889 +3546 356202.778 908983.333 +3547 356225.000 1176700.000 +3548 356233.333 959602.778 +3549 356288.889 821808.333 +3550 356311.111 983169.444 +3551 356327.778 993813.889 +3552 356333.333 801161.111 +3553 356333.333 825822.222 +3554 356350.000 779333.333 +3555 356355.556 941672.222 +3556 356361.111 833777.778 +3557 356383.333 912650.000 +3558 356397.222 1016027.778 +3559 356419.444 977461.111 +3560 356441.667 823030.556 +3561 356452.778 780100.000 +3562 356486.111 956558.333 +3563 356497.222 881266.667 +3564 356497.222 910738.889 +3565 356505.556 784566.667 +3566 356508.333 883933.333 +3567 356508.333 1176608.333 +3568 356527.778 974777.778 +3569 356577.778 820255.556 +3570 356611.111 841722.222 +3571 356616.667 971952.778 +3572 356650.000 988827.778 +3573 356677.778 1013969.444 +3574 356697.222 812216.667 +3575 356708.333 804744.444 +3576 356727.778 895733.333 +3577 356736.111 905072.222 +3578 356744.444 900997.222 +3579 356780.556 1081505.556 +3580 356780.556 1192283.333 +3581 356805.556 1090519.444 +3582 356816.667 804325.000 +3583 356838.889 820094.444 +3584 356841.667 819919.444 +3585 356869.444 1059372.222 +3586 356913.889 1006377.778 +3587 356919.444 848608.333 +3588 356922.222 804350.000 +3589 356941.667 970630.556 +3590 356969.444 825608.333 +3591 357005.556 808883.333 +3592 357016.667 914413.889 +3593 357016.667 968805.556 +3594 357044.444 820361.111 +3595 357047.222 967650.000 +3596 357050.000 899694.444 +3597 357063.889 812188.889 +3598 357069.444 1184552.778 +3599 357072.222 810758.333 +3600 357077.778 798138.889 +3601 357111.111 786144.444 +3602 357111.111 890875.000 +3603 357138.889 814222.222 +3604 357141.667 835102.778 +3605 357144.444 811463.889 +3606 357200.000 791775.000 +3607 357233.333 794625.000 +3608 357258.333 979761.111 +3609 357272.222 814708.333 +3610 357288.889 814000.000 +3611 357288.889 817794.444 +3612 357291.667 1185486.111 +3613 357305.556 911983.333 +3614 357319.444 1051511.111 +3615 357325.000 788505.556 +3616 357327.778 843338.889 +3617 357330.556 806772.222 +3618 357333.333 796527.778 +3619 357405.556 815633.333 +3620 357422.222 905622.222 +3621 357425.000 960700.000 +3622 357436.111 796925.000 +3623 357441.667 987472.222 +3624 357444.444 1090758.333 +3625 357452.778 816850.000 +3626 357452.778 895297.222 +3627 357472.222 854666.667 +3628 357477.778 953694.444 +3629 357486.111 966577.778 +3630 357519.444 776702.778 +3631 357547.222 1184244.444 +3632 357561.111 899280.556 +3633 357563.889 839705.556 +3634 357577.778 816044.444 +3635 357580.556 903222.222 +3636 357602.778 841358.333 +3637 357636.111 1059319.444 +3638 357688.889 1192461.111 +3639 357697.222 916408.333 +3640 357719.444 786388.889 +3641 357719.444 877838.889 +3642 357738.889 814313.889 +3643 357758.333 889900.000 +3644 357808.333 783700.000 +3645 357825.000 808875.000 +3646 357847.222 891172.222 +3647 357875.000 784808.333 +3648 357883.333 776380.556 +3649 357883.333 835544.444 +3650 357894.444 839738.889 +3651 357900.000 782041.667 +3652 357913.889 787813.889 +3653 357950.000 839319.444 +3654 357963.889 814308.333 +3655 357966.667 1191069.444 +3656 357972.222 826841.667 +3657 357972.222 842561.111 +3658 357975.000 952502.778 +3659 357980.556 976783.333 +3660 358027.778 887747.222 +3661 358027.778 965058.333 +3662 358063.889 778636.111 +3663 358083.333 970125.000 +3664 358102.778 805561.111 +3665 358111.111 768969.444 +3666 358144.444 946283.333 +3667 358147.222 892255.556 +3668 358161.111 904341.667 +3669 358177.778 798033.333 +3670 358197.222 889158.333 +3671 358202.778 956738.889 +3672 358216.667 911283.333 +3673 358238.889 772555.556 +3674 358238.889 802536.111 +3675 358241.667 783150.000 +3676 358263.889 825494.444 +3677 358269.444 1014425.000 +3678 358275.000 839408.333 +3679 358275.000 860716.667 +3680 358302.778 925577.778 +3681 358305.556 963908.333 +3682 358383.333 894061.111 +3683 358422.222 907041.667 +3684 358425.000 756388.889 +3685 358447.222 984127.778 +3686 358455.556 863902.778 +3687 358483.333 814961.111 +3688 358505.556 953180.556 +3689 358544.444 770558.333 +3690 358588.889 1087608.333 +3691 358613.889 979313.889 +3692 358655.556 846850.000 +3693 358655.556 1019727.778 +3694 358666.667 767488.889 +3695 358669.444 778294.444 +3696 358680.556 835619.444 +3697 358683.333 921175.000 +3698 358708.333 955222.222 +3699 358727.778 917538.889 +3700 358755.556 893961.111 +3701 358763.889 960608.333 +3702 358777.778 766155.556 +3703 358788.889 974250.000 +3704 358800.000 901669.444 +3705 358808.333 845086.111 +3706 358825.000 800822.222 +3707 358841.667 1192713.889 +3708 358894.444 775325.000 +3709 358905.556 903441.667 +3710 358922.222 828291.667 +3711 358922.222 904525.000 +3712 358938.889 805616.667 +3713 358966.667 775361.111 +3714 359000.000 905819.444 +3715 359027.778 802572.222 +3716 359080.556 756761.111 +3717 359088.889 926311.111 +3718 359091.667 848780.556 +3719 359100.000 790755.556 +3720 359127.778 1003816.667 +3721 359138.889 815391.667 +3722 359152.778 820647.222 +3723 359152.778 949697.222 +3724 359175.000 762525.000 +3725 359197.222 887588.889 +3726 359216.667 811766.667 +3727 359241.667 941883.333 +3728 359250.000 868688.889 +3729 359258.333 854641.667 +3730 359272.222 899188.889 +3731 359325.000 951411.111 +3732 359338.889 845525.000 +3733 359358.333 902577.778 +3734 359380.556 777908.333 +3735 359416.667 915483.333 +3736 359419.444 958830.556 +3737 359444.444 772100.000 +3738 359447.222 960650.000 +3739 359488.889 850269.444 +3740 359494.444 944233.333 +3741 359516.667 956505.556 +3742 359525.000 975944.444 +3743 359552.778 960086.111 +3744 359555.556 800055.556 +3745 359572.222 756244.444 +3746 359594.444 953691.667 +3747 359597.222 899719.444 +3748 359605.556 839208.333 +3749 359605.556 858141.667 +3750 359608.333 782538.889 +3751 359619.444 797625.000 +3752 359625.000 1190433.333 +3753 359669.444 831877.778 +3754 359686.111 1192908.333 +3755 359730.556 886780.556 +3756 359738.889 970333.333 +3757 359744.444 779658.333 +3758 359758.333 943175.000 +3759 359786.111 1148316.667 +3760 359797.222 785100.000 +3761 359805.556 889413.889 +3762 359813.889 979108.333 +3763 359819.444 841138.889 +3764 359850.000 967666.667 +3765 359883.333 966008.333 +3766 359911.111 1060800.000 +3767 359925.000 945677.778 +3768 359938.889 788988.889 +3769 359941.667 799355.556 +3770 359941.667 941750.000 +3771 359983.333 769463.889 +3772 359986.111 961138.889 +3773 360005.556 884280.556 +3774 360013.889 940080.556 +3775 360025.000 1059297.222 +3776 360041.667 1201280.556 +3777 360080.556 931863.889 +3778 360083.333 1199608.333 +3779 360102.778 842697.222 +3780 360111.111 778577.778 +3781 360113.889 886227.778 +3782 360152.778 834150.000 +3783 360155.556 865819.444 +3784 360166.667 1018241.667 +3785 360211.111 879669.444 +3786 360213.889 803822.222 +3787 360222.222 1069577.778 +3788 360227.778 959680.556 +3789 360316.667 840280.556 +3790 360344.444 893855.556 +3791 360358.333 894797.222 +3792 360363.889 788236.111 +3793 360380.556 882444.444 +3794 360380.556 882736.111 +3795 360397.222 1149811.111 +3796 360416.667 901138.889 +3797 360419.444 942469.444 +3798 360444.444 843444.444 +3799 360469.444 902927.778 +3800 360488.889 777494.444 +3801 360502.778 909750.000 +3802 360508.333 902386.111 +3803 360525.000 957905.556 +3804 360533.333 873125.000 +3805 360536.111 985880.556 +3806 360583.333 905000.000 +3807 360588.889 880977.778 +3808 360594.444 919083.333 +3809 360594.444 1025127.778 +3810 360594.444 1193111.111 +3811 360605.556 766094.444 +3812 360625.000 941572.222 +3813 360652.778 1190158.333 +3814 360666.667 889938.889 +3815 360688.889 794008.333 +3816 360719.444 841333.333 +3817 360725.000 797922.222 +3818 360752.778 791000.000 +3819 360763.889 888100.000 +3820 360769.444 873877.778 +3821 360775.000 860333.333 +3822 360838.889 877947.222 +3823 360838.889 898291.667 +3824 360844.444 965833.333 +3825 360861.111 937411.111 +3826 360872.222 819275.000 +3827 360913.889 793644.444 +3828 360944.444 1150411.111 +3829 360955.556 794380.556 +3830 360958.333 792672.222 +3831 360958.333 844425.000 +3832 360966.667 811825.000 +3833 360969.444 804194.444 +3834 360980.556 1195594.444 +3835 360988.889 783013.889 +3836 360997.222 802444.444 +3837 361005.556 870511.111 +3838 361016.667 784583.333 +3839 361019.444 871150.000 +3840 361027.778 795069.444 +3841 361033.333 841319.444 +3842 361038.889 835527.778 +3843 361047.222 845972.222 +3844 361052.778 777130.556 +3845 361055.556 795425.000 +3846 361072.222 796588.889 +3847 361075.000 832869.444 +3848 361075.000 872208.333 +3849 361077.778 876330.556 +3850 361083.333 910972.222 +3851 361091.667 978983.333 +3852 361127.778 892616.667 +3853 361130.556 794766.667 +3854 361141.667 966988.889 +3855 361155.556 970580.556 +3856 361161.111 983166.667 +3857 361169.444 867663.889 +3858 361194.444 921358.333 +3859 361197.222 800738.889 +3860 361219.444 794291.667 +3861 361222.222 786863.889 +3862 361222.222 834925.000 +3863 361275.000 889858.333 +3864 361294.444 774205.556 +3865 361305.556 824247.222 +3866 361319.444 787569.444 +3867 361325.000 885186.111 +3868 361341.667 901597.222 +3869 361344.444 806597.222 +3870 361350.000 816777.778 +3871 361350.000 1112391.667 +3872 361397.222 961086.111 +3873 361397.222 1203591.667 +3874 361450.000 824169.444 +3875 361455.556 1190597.222 +3876 361458.333 811608.333 +3877 361475.000 852683.333 +3878 361480.556 989238.889 +3879 361497.222 992977.778 +3880 361511.111 955091.667 +3881 361533.333 888005.556 +3882 361536.111 856436.111 +3883 361538.889 959925.000 +3884 361541.667 837041.667 +3885 361544.444 1095519.444 +3886 361572.222 819783.333 +3887 361583.333 811477.778 +3888 361627.778 855016.667 +3889 361630.556 818716.667 +3890 361630.556 828311.111 +3891 361661.111 948544.444 +3892 361713.889 811941.667 +3893 361725.000 859297.222 +3894 361750.000 1151363.889 +3895 361772.222 873397.222 +3896 361777.778 942333.333 +3897 361808.333 776669.444 +3898 361858.333 953427.778 +3899 361866.667 941286.111 +3900 361869.444 903830.556 +3901 361880.556 945402.778 +3902 361888.889 957455.556 +3903 361894.444 829586.111 +3904 361900.000 764663.889 +3905 361930.556 896555.556 +3906 361955.556 840680.556 +3907 361958.333 854486.111 +3908 361961.111 820705.556 +3909 361983.333 811530.556 +3910 361983.333 1011919.444 +3911 361988.889 1151166.667 +3912 362000.000 865186.111 +3913 362000.000 951675.000 +3914 362022.222 802811.111 +3915 362022.222 890122.222 +3916 362025.000 911744.444 +3917 362027.778 1201019.444 +3918 362030.556 891908.333 +3919 362030.556 1190872.222 +3920 362061.111 942341.667 +3921 362077.778 1193463.889 +3922 362086.111 799050.000 +3923 362127.778 1211250.000 +3924 362136.111 886125.000 +3925 362138.889 832950.000 +3926 362163.889 805127.778 +3927 362166.667 816747.222 +3928 362177.778 841547.222 +3929 362188.889 764641.667 +3930 362211.111 919291.667 +3931 362238.889 916083.333 +3932 362261.111 926847.222 +3933 362272.222 808336.111 +3934 362294.444 771144.444 +3935 362297.222 931075.000 +3936 362325.000 807083.333 +3937 362333.333 888244.444 +3938 362336.111 897494.444 +3939 362338.889 897694.444 +3940 362361.111 900555.556 +3941 362369.444 799797.222 +3942 362380.556 963163.889 +3943 362391.667 808447.222 +3944 362402.778 802936.111 +3945 362419.444 859519.444 +3946 362419.444 959755.556 +3947 362441.667 808486.111 +3948 362505.556 837975.000 +3949 362522.222 859516.667 +3950 362552.778 941305.556 +3951 362569.444 830861.111 +3952 362586.111 831952.778 +3953 362588.889 891916.667 +3954 362613.889 909711.111 +3955 362630.556 902925.000 +3956 362633.333 894877.778 +3957 362641.667 946927.778 +3958 362650.000 1014058.333 +3959 362675.000 944844.444 +3960 362688.889 984794.444 +3961 362694.444 958544.444 +3962 362711.111 925352.778 +3963 362738.889 772847.222 +3964 362741.667 870641.667 +3965 362758.333 998808.333 +3966 362788.889 925969.444 +3967 362802.778 978977.778 +3968 362805.556 803594.444 +3969 362808.333 835150.000 +3970 362830.556 924938.889 +3971 362841.667 821727.778 +3972 362866.667 769850.000 +3973 362894.444 972877.778 +3974 362913.889 887080.556 +3975 362927.778 951530.556 +3976 362941.667 824736.111 +3977 362952.778 801419.444 +3978 362961.111 1191411.111 +3979 362972.222 959911.111 +3980 362972.222 970077.778 +3981 362977.778 1192058.333 +3982 362988.889 842233.333 +3983 363008.333 1197819.444 +3984 363019.444 762236.111 +3985 363019.444 883266.667 +3986 363047.222 866200.000 +3987 363063.889 821933.333 +3988 363075.000 975861.111 +3989 363080.556 784069.444 +3990 363100.000 964638.889 +3991 363105.556 785911.111 +3992 363119.444 877733.333 +3993 363125.000 956158.333 +3994 363133.333 823536.111 +3995 363155.556 997572.222 +3996 363158.333 914825.000 +3997 363158.333 1197075.000 +3998 363183.333 876947.222 +3999 363200.000 906019.444 +4000 363208.333 1212427.778 +4001 363230.556 867133.333 +4002 363275.000 1196447.222 +4003 363294.444 783994.444 +4004 363300.000 841838.889 +4005 363302.778 1192911.111 +4006 363313.889 772130.556 +4007 363319.444 941183.333 +4008 363352.778 934358.333 +4009 363358.333 944605.556 +4010 363361.111 1020716.667 +4011 363377.778 968036.111 +4012 363386.111 891638.889 +4013 363416.667 783902.778 +4014 363433.333 888502.778 +4015 363486.111 822108.333 +4016 363511.111 1194191.667 +4017 363527.778 1096172.222 +4018 363547.222 796647.222 +4019 363555.556 856588.889 +4020 363586.111 1056088.889 +4021 363611.111 1045947.222 +4022 363627.778 907536.111 +4023 363644.444 958386.111 +4024 363647.222 935677.778 +4025 363683.333 960011.111 +4026 363722.222 822258.333 +4027 363727.778 942086.111 +4028 363783.333 894719.444 +4029 363808.333 848844.444 +4030 363827.778 841200.000 +4031 363827.778 901905.556 +4032 363833.333 853230.556 +4033 363838.889 925813.889 +4034 363852.778 799597.222 +4035 363863.889 804697.222 +4036 363872.222 1192169.444 +4037 363875.000 980894.444 +4038 363883.333 864466.667 +4039 363908.333 861672.222 +4040 363911.111 950463.889 +4041 363922.222 824116.667 +4042 363936.111 789830.556 +4043 363950.000 867794.444 +4044 363955.556 769322.222 +4045 363955.556 807227.778 +4046 363955.556 978780.556 +4047 363983.333 781555.556 +4048 363991.667 900236.111 +4049 364000.000 1008022.222 +4050 364011.111 937377.778 +4051 364036.111 814930.556 +4052 364038.889 793363.889 +4053 364052.778 984402.778 +4054 364072.222 830055.556 +4055 364072.222 1055725.000 +4056 364077.778 905797.222 +4057 364122.222 799672.222 +4058 364141.667 963950.000 +4059 364158.333 776033.333 +4060 364169.444 1092280.556 +4061 364180.556 826238.889 +4062 364197.222 824766.667 +4063 364202.778 814736.111 +4064 364211.111 947966.667 +4065 364219.444 944533.333 +4066 364241.667 890569.444 +4067 364247.222 1213252.778 +4068 364252.778 896994.444 +4069 364269.444 775958.333 +4070 364333.333 1196858.333 +4071 364336.111 993900.000 +4072 364338.889 1001411.111 +4073 364344.444 779122.222 +4074 364355.556 978686.111 +4075 364366.667 952711.111 +4076 364369.444 772291.667 +4077 364369.444 975852.778 +4078 364391.667 992044.444 +4079 364394.444 824558.333 +4080 364422.222 770988.889 +4081 364425.000 835997.222 +4082 364441.667 883344.444 +4083 364455.556 781986.111 +4084 364508.333 775591.667 +4085 364511.111 776797.222 +4086 364516.667 899669.444 +4087 364516.667 1031836.111 +4088 364519.444 899191.667 +4089 364533.333 1005369.444 +4090 364541.667 835694.444 +4091 364613.889 776544.444 +4092 364638.889 950475.000 +4093 364644.444 929200.000 +4094 364663.889 799072.222 +4095 364702.778 866513.889 +4096 364708.333 828519.444 +4097 364741.667 822611.111 +4098 364744.444 818050.000 +4099 364761.111 1194422.222 +4100 364777.778 825933.333 +4101 364797.222 1217313.889 +4102 364850.000 825033.333 +4103 364877.778 878383.333 +4104 364883.333 797669.444 +4105 364900.000 774416.667 +4106 364933.333 900750.000 +4107 364955.556 915405.556 +4108 364980.556 845127.778 +4109 364991.667 806075.000 +4110 365002.778 776452.778 +4111 365002.778 806266.667 +4112 365008.333 888752.778 +4113 365041.667 888741.667 +4114 365050.000 1017825.000 +4115 365052.778 811211.111 +4116 365066.667 1214433.333 +4117 365091.667 868850.000 +4118 365108.333 1049152.778 +4119 365138.889 1195530.556 +4120 365147.222 946111.111 +4121 365188.889 896125.000 +4122 365211.111 860263.889 +4123 365222.222 827136.111 +4124 365225.000 939394.444 +4125 365233.333 1192858.333 +4126 365244.444 915380.556 +4127 365288.889 974436.111 +4128 365297.222 832175.000 +4129 365297.222 873594.444 +4130 365302.778 959233.333 +4131 365330.556 823269.444 +4132 365333.333 858500.000 +4133 365355.556 954322.222 +4134 365427.778 1198322.222 +4135 365433.333 1144461.111 +4136 365433.333 1193861.111 +4137 365450.000 1192863.889 +4138 365455.556 944850.000 +4139 365461.111 963269.444 +4140 365461.111 982697.222 +4141 365483.333 824558.333 +4142 365483.333 825619.444 +4143 365486.111 866961.111 +4144 365500.000 855052.778 +4145 365555.556 824680.556 +4146 365569.444 899663.889 +4147 365619.444 862480.556 +4148 365619.444 961613.889 +4149 365680.556 896005.556 +4150 365708.333 1196111.111 +4151 365711.111 891861.111 +4152 365736.111 967038.889 +4153 365736.111 995719.444 +4154 365744.444 851288.889 +4155 365752.778 906038.889 +4156 365769.444 825677.778 +4157 365788.889 984619.444 +4158 365816.667 865163.889 +4159 365822.222 870655.556 +4160 365822.222 988794.444 +4161 365830.556 772002.778 +4162 365844.444 824894.444 +4163 365858.333 793952.778 +4164 365863.889 895277.778 +4165 365877.778 841269.444 +4166 365886.111 793663.889 +4167 365913.889 825736.111 +4168 365922.222 896152.778 +4169 365933.333 1218338.889 +4170 365936.111 947688.889 +4171 365944.444 943838.889 +4172 365950.000 821888.889 +4173 365952.778 1016361.111 +4174 365958.333 902472.222 +4175 365963.889 821886.111 +4176 365963.889 1194494.444 +4177 366002.778 1218936.111 +4178 366030.556 924280.556 +4179 366061.111 1180619.444 +4180 366066.667 1201880.556 +4181 366102.778 883147.222 +4182 366111.111 1218505.556 +4183 366116.667 1195261.111 +4184 366136.111 898163.889 +4185 366208.333 908233.333 +4186 366211.111 932152.778 +4187 366222.222 811511.111 +4188 366244.444 1193127.778 +4189 366283.333 799511.111 +4190 366305.556 1196775.000 +4191 366336.111 817838.889 +4192 366377.778 825811.111 +4193 366386.111 951538.889 +4194 366408.333 802658.333 +4195 366422.222 887388.889 +4196 366436.111 932183.333 +4197 366483.333 871663.889 +4198 366502.778 1197897.222 +4199 366505.556 944433.333 +4200 366508.333 844386.111 +4201 366591.667 1195927.778 +4202 366611.111 809241.667 +4203 366672.222 889933.333 +4204 366675.000 868519.444 +4205 366677.778 963369.444 +4206 366688.889 899686.111 +4207 366691.667 978008.333 +4208 366722.222 939408.333 +4209 366769.444 938686.111 +4210 366775.000 769227.778 +4211 366777.778 1216544.444 +4212 366783.333 973097.222 +4213 366827.778 1014811.111 +4214 366844.444 1218011.111 +4215 366850.000 931197.222 +4216 366858.333 775427.778 +4217 366888.889 831111.111 +4218 366905.556 975561.111 +4219 366908.333 851347.222 +4220 366913.889 798727.778 +4221 366936.111 949627.778 +4222 366941.667 913991.667 +4223 366986.111 789016.667 +4224 366988.889 844775.000 +4225 367000.000 781000.000 +4226 367000.000 799388.889 +4227 367005.556 956377.778 +4228 367022.222 856916.667 +4229 367038.889 1055944.444 +4230 367069.444 970852.778 +4231 367080.556 1195550.000 +4232 367097.222 819775.000 +4233 367097.222 998930.556 +4234 367105.556 1197575.000 +4235 367111.111 1079838.889 +4236 367133.333 788288.889 +4237 367150.000 799155.556 +4238 367161.111 770683.333 +4239 367161.111 809788.889 +4240 367222.222 865772.222 +4241 367233.333 844705.556 +4242 367236.111 1200588.889 +4243 367263.889 781291.667 +4244 367277.778 1102538.889 +4245 367280.556 765838.889 +4246 367280.556 918522.222 +4247 367280.556 1082180.556 +4248 367286.111 809991.667 +4249 367294.444 1025127.778 +4250 367341.667 1083591.667 +4251 367416.667 886366.667 +4252 367416.667 943988.889 +4253 367433.333 841597.222 +4254 367472.222 959805.556 +4255 367477.778 1197713.889 +4256 367511.111 948472.222 +4257 367533.333 861905.556 +4258 367536.111 1203805.556 +4259 367544.444 983563.889 +4260 367569.444 903927.778 +4261 367575.000 778472.222 +4262 367583.333 830272.222 +4263 367591.667 799905.556 +4264 367591.667 895866.667 +4265 367619.444 836950.000 +4266 367625.000 807350.000 +4267 367627.778 940558.333 +4268 367647.222 882952.778 +4269 367658.333 789286.111 +4270 367658.333 1217569.444 +4271 367758.333 873555.556 +4272 367786.111 956391.667 +4273 367797.222 893855.556 +4274 367819.444 966608.333 +4275 367855.556 1086863.889 +4276 367891.667 815822.222 +4277 367902.778 853705.556 +4278 367911.111 817713.889 +4279 367958.333 899577.778 +4280 367958.333 959352.778 +4281 367983.333 816825.000 +4282 367991.667 784586.111 +4283 368044.444 972825.000 +4284 368050.000 986661.111 +4285 368069.444 977333.333 +4286 368083.333 767444.444 +4287 368097.222 1022550.000 +4288 368100.000 871541.667 +4289 368125.000 898613.889 +4290 368141.667 774686.111 +4291 368161.111 1005194.444 +4292 368172.222 939205.556 +4293 368222.222 1079922.222 +4294 368252.778 1197019.444 +4295 368255.556 793983.333 +4296 368347.222 815150.000 +4297 368352.778 762986.111 +4298 368355.556 996300.000 +4299 368405.556 763105.556 +4300 368413.889 946108.333 +4301 368430.556 833219.444 +4302 368452.778 868872.222 +4303 368455.556 1215369.444 +4304 368466.667 762855.556 +4305 368472.222 896852.778 +4306 368486.111 832191.667 +4307 368519.444 833541.667 +4308 368525.000 1214005.556 +4309 368527.778 759783.333 +4310 368572.222 883502.778 +4311 368588.889 1204550.000 +4312 368600.000 1012130.556 +4313 368641.667 867102.778 +4314 368650.000 878352.778 +4315 368655.556 874886.111 +4316 368658.333 831905.556 +4317 368663.889 838888.889 +4318 368672.222 814236.111 +4319 368688.889 943677.778 +4320 368705.556 890097.222 +4321 368736.111 950955.556 +4322 368744.444 948772.222 +4323 368766.667 895877.778 +4324 368816.667 827472.222 +4325 368822.222 970530.556 +4326 368833.333 979216.667 +4327 368858.333 899291.667 +4328 368900.000 822797.222 +4329 368913.889 895383.333 +4330 368936.111 812761.111 +4331 368941.667 817769.444 +4332 368975.000 959258.333 +4333 369008.333 820802.778 +4334 369030.556 1065788.889 +4335 369033.333 1044386.111 +4336 369041.667 1217475.000 +4337 369052.778 935713.889 +4338 369066.667 827819.444 +4339 369069.444 1005388.889 +4340 369086.111 1114727.778 +4341 369094.444 894525.000 +4342 369102.778 1217558.333 +4343 369172.222 948794.444 +4344 369191.667 942550.000 +4345 369208.333 893505.556 +4346 369288.889 939275.000 +4347 369333.333 826291.667 +4348 369333.333 948727.778 +4349 369336.111 1069983.333 +4350 369352.778 1217719.444 +4351 369366.667 1218636.111 +4352 369438.889 824641.667 +4353 369444.444 940041.667 +4354 369455.556 1125258.333 +4355 369483.333 810850.000 +4356 369486.111 840969.444 +4357 369497.222 901583.333 +4358 369519.444 926602.778 +4359 369536.111 793591.667 +4360 369541.667 1010650.000 +4361 369544.444 947877.778 +4362 369605.556 840933.333 +4363 369608.333 1219630.556 +4364 369613.889 1200597.222 +4365 369619.444 781252.778 +4366 369638.889 937955.556 +4367 369647.222 829486.111 +4368 369647.222 890891.667 +4369 369661.111 829225.000 +4370 369683.333 1218991.667 +4371 369708.333 937177.778 +4372 369741.667 1220297.222 +4373 369752.778 1219522.222 +4374 369758.333 825758.333 +4375 369772.222 1218983.333 +4376 369780.556 829886.111 +4377 369783.333 822977.778 +4378 369786.111 764283.333 +4379 369800.000 856122.222 +4380 369847.222 850630.556 +4381 369861.111 1206255.556 +4382 369869.444 948305.556 +4383 369880.556 1219555.556 +4384 369888.889 846000.000 +4385 369902.778 864436.111 +4386 369911.111 914925.000 +4387 369922.222 919697.222 +4388 369927.778 786013.889 +4389 369944.444 956200.000 +4390 369947.222 782275.000 +4391 369952.778 917036.111 +4392 369952.778 943158.333 +4393 369955.556 910144.444 +4394 369958.333 859119.444 +4395 369975.000 798922.222 +4396 370011.111 930813.889 +4397 370030.556 936372.222 +4398 370052.778 891763.889 +4399 370058.333 1215672.222 +4400 370080.556 1018897.222 +4401 370097.222 913233.333 +4402 370113.889 959350.000 +4403 370161.111 819744.444 +4404 370172.222 984850.000 +4405 370175.000 885313.889 +4406 370208.333 932058.333 +4407 370236.111 898197.222 +4408 370297.222 763455.556 +4409 370302.778 934727.778 +4410 370322.222 976066.667 +4411 370333.333 883500.000 +4412 370358.333 770955.556 +4413 370369.444 944966.667 +4414 370372.222 950897.222 +4415 370372.222 956161.111 +4416 370402.778 784836.111 +4417 370405.556 944725.000 +4418 370430.556 1009205.556 +4419 370433.333 932941.667 +4420 370436.111 896102.778 +4421 370475.000 1125255.556 +4422 370477.778 807800.000 +4423 370477.778 874850.000 +4424 370500.000 789444.444 +4425 370511.111 1220136.111 +4426 370513.889 1220722.222 +4427 370516.667 890466.667 +4428 370525.000 862077.778 +4429 370561.111 850886.111 +4430 370563.889 786386.111 +4431 370583.333 1208488.889 +4432 370588.889 881325.000 +4433 370597.222 953591.667 +4434 370619.444 970380.556 +4435 370625.000 817519.444 +4436 370666.667 766766.667 +4437 370675.000 935519.444 +4438 370691.667 941163.889 +4439 370758.333 946394.444 +4440 370766.667 889736.111 +4441 370766.667 944591.667 +4442 370802.778 779975.000 +4443 370833.333 886000.000 +4444 370836.111 944133.333 +4445 370841.667 945130.556 +4446 370850.000 896552.778 +4447 370850.000 1216091.667 +4448 370852.778 891625.000 +4449 370869.444 818552.778 +4450 370891.667 1220852.778 +4451 370919.444 846041.667 +4452 370925.000 792966.667 +4453 370930.556 817938.889 +4454 370938.889 860463.889 +4455 370944.444 880802.778 +4456 371027.778 853063.889 +4457 371036.111 938183.333 +4458 371041.667 965000.000 +4459 371041.667 1135833.333 +4460 371044.444 899105.556 +4461 371055.556 806855.556 +4462 371066.667 925805.556 +4463 371091.667 878819.444 +4464 371116.667 792858.333 +4465 371141.667 891977.778 +4466 371147.222 815197.222 +4467 371150.000 1076325.000 +4468 371155.556 933700.000 +4469 371169.444 930555.556 +4470 371183.333 828269.444 +4471 371200.000 934800.000 +4472 371222.222 763461.111 +4473 371230.556 1202591.667 +4474 371236.111 826013.889 +4475 371236.111 886302.778 +4476 371238.889 921011.111 +4477 371261.111 1221211.111 +4478 371266.667 961866.667 +4479 371288.889 840833.333 +4480 371297.222 804091.667 +4481 371305.556 922633.333 +4482 371305.556 1135075.000 +4483 371305.556 1216533.333 +4484 371330.556 1136533.333 +4485 371366.667 859569.444 +4486 371388.889 884033.333 +4487 371425.000 945105.556 +4488 371463.889 927686.111 +4489 371463.889 944627.778 +4490 371491.667 944427.778 +4491 371500.000 824561.111 +4492 371505.556 913575.000 +4493 371511.111 887319.444 +4494 371533.333 980308.333 +4495 371536.111 837619.444 +4496 371544.444 906955.556 +4497 371575.000 929405.556 +4498 371658.333 872475.000 +4499 371672.222 876925.000 +4500 371675.000 951097.222 +4501 371686.111 1136786.111 +4502 371691.667 948438.889 +4503 371694.444 1045000.000 +4504 371730.556 781236.111 +4505 371733.333 826311.111 +4506 371741.667 1059369.444 +4507 371752.778 1013491.667 +4508 371752.778 1132891.667 +4509 371763.889 943100.000 +4510 371766.667 945652.778 +4511 371769.444 846358.333 +4512 371791.667 916566.667 +4513 371794.444 859069.444 +4514 371800.000 896550.000 +4515 371836.111 873836.111 +4516 371875.000 782016.667 +4517 371883.333 944700.000 +4518 371886.111 997652.778 +4519 371902.778 952969.444 +4520 371908.333 874527.778 +4521 371966.667 897361.111 +4522 372008.333 1054233.333 +4523 372011.111 871788.889 +4524 372011.111 1132688.889 +4525 372013.889 994836.111 +4526 372063.889 888447.222 +4527 372075.000 826719.444 +4528 372080.556 880566.667 +4529 372147.222 938397.222 +4530 372152.778 932980.556 +4531 372166.667 895244.444 +4532 372175.000 870488.889 +4533 372197.222 895088.889 +4534 372241.667 957080.556 +4535 372255.556 866836.111 +4536 372255.556 1075975.000 +4537 372266.667 1219736.111 +4538 372275.000 800130.556 +4539 372277.778 774022.222 +4540 372302.778 774777.778 +4541 372322.222 820991.667 +4542 372350.000 892700.000 +4543 372363.889 1219913.889 +4544 372366.667 874752.778 +4545 372369.444 871591.667 +4546 372397.222 969952.778 +4547 372400.000 774302.778 +4548 372413.889 982263.889 +4549 372416.667 909686.111 +4550 372422.222 784600.000 +4551 372494.444 831933.333 +4552 372508.333 925102.778 +4553 372525.000 812713.889 +4554 372538.889 764972.222 +4555 372577.778 1209977.778 +4556 372583.333 1059041.667 +4557 372608.333 854988.889 +4558 372638.889 1220219.444 +4559 372652.778 973713.889 +4560 372658.333 977652.778 +4561 372677.778 760177.778 +4562 372683.333 931169.444 +4563 372688.889 993263.889 +4564 372694.444 1070091.667 +4565 372697.222 812225.000 +4566 372702.778 955522.222 +4567 372705.556 767077.778 +4568 372708.333 799416.667 +4569 372722.222 858911.111 +4570 372741.667 875119.444 +4571 372741.667 971686.111 +4572 372750.000 1059597.222 +4573 372752.778 1078794.444 +4574 372769.444 891833.333 +4575 372775.000 948247.222 +4576 372777.778 820991.667 +4577 372808.333 798972.222 +4578 372811.111 985800.000 +4579 372855.556 1003397.222 +4580 372866.667 980255.556 +4581 372872.222 1219488.889 +4582 372894.444 759716.667 +4583 372908.333 1203175.000 +4584 372936.111 889752.778 +4585 372938.889 871233.333 +4586 372991.667 862286.111 +4587 373002.778 899811.111 +4588 373011.111 816911.111 +4589 373019.444 783922.222 +4590 373022.222 1204819.444 +4591 373038.889 823511.111 +4592 373050.000 934283.333 +4593 373058.333 895180.556 +4594 373058.333 899702.778 +4595 373100.000 947716.667 +4596 373125.000 812600.000 +4597 373127.778 967538.889 +4598 373138.889 1210197.222 +4599 373152.778 935850.000 +4600 373194.444 806391.667 +4601 373205.556 792577.778 +4602 373230.556 1220311.111 +4603 373250.000 813119.444 +4604 373261.111 919558.333 +4605 373263.889 807352.778 +4606 373280.556 874988.889 +4607 373280.556 1196483.333 +4608 373313.889 808113.889 +4609 373325.000 827211.111 +4610 373327.778 880811.111 +4611 373338.889 869961.111 +4612 373341.667 795233.333 +4613 373352.778 1218938.889 +4614 373358.333 814366.667 +4615 373358.333 829805.556 +4616 373361.111 943011.111 +4617 373386.111 929069.444 +4618 373402.778 952608.333 +4619 373411.111 799433.333 +4620 373433.333 853419.444 +4621 373441.667 867547.222 +4622 373450.000 1082886.111 +4623 373458.333 948086.111 +4624 373475.000 1212675.000 +4625 373488.889 1085852.778 +4626 373538.889 812527.778 +4627 373566.667 774419.444 +4628 373569.444 788255.556 +4629 373602.778 963036.111 +4630 373611.111 891658.333 +4631 373636.111 815502.778 +4632 373636.111 1183941.667 +4633 373661.111 811027.778 +4634 373661.111 1218261.111 +4635 373672.222 884863.889 +4636 373688.889 1220352.778 +4637 373783.333 798072.222 +4638 373797.222 1221363.889 +4639 373819.444 869225.000 +4640 373822.222 808227.778 +4641 373822.222 896661.111 +4642 373838.889 931511.111 +4643 373841.667 1222341.667 +4644 373855.556 939530.556 +4645 373855.556 1001952.778 +4646 373861.111 1022777.778 +4647 373869.444 1207225.000 +4648 373875.000 971138.889 +4649 373894.444 1206122.222 +4650 373902.778 976419.444 +4651 373930.556 940936.111 +4652 373938.889 972808.333 +4653 373972.222 807994.444 +4654 374019.444 868758.333 +4655 374027.778 1046527.778 +4656 374041.667 844138.889 +4657 374083.333 1026138.889 +4658 374108.333 947047.222 +4659 374111.111 935494.444 +4660 374136.111 791425.000 +4661 374152.778 888977.778 +4662 374152.778 938408.333 +4663 374158.333 872655.556 +4664 374183.333 956800.000 +4665 374200.000 812433.333 +4666 374208.333 814402.778 +4667 374216.667 774377.778 +4668 374222.222 810163.889 +4669 374236.111 883461.111 +4670 374241.667 864883.333 +4671 374255.556 815069.444 +4672 374283.333 1219055.556 +4673 374300.000 1222527.778 +4674 374302.778 839980.556 +4675 374308.333 791233.333 +4676 374322.222 1207775.000 +4677 374327.778 815847.222 +4678 374372.222 1019716.667 +4679 374419.444 1221419.444 +4680 374433.333 1000147.222 +4681 374450.000 828052.778 +4682 374450.000 871438.889 +4683 374511.111 869091.667 +4684 374516.667 892680.556 +4685 374538.889 1221811.111 +4686 374555.556 912094.444 +4687 374555.556 946888.889 +4688 374602.778 892469.444 +4689 374613.889 1221966.667 +4690 374636.111 1224275.000 +4691 374644.444 818138.889 +4692 374644.444 845066.667 +4693 374650.000 858933.333 +4694 374688.889 1221400.000 +4695 374694.444 1058694.444 +4696 374702.778 962633.333 +4697 374716.667 1211286.111 +4698 374738.889 1085038.889 +4699 374744.444 972436.111 +4700 374747.222 758586.111 +4701 374766.667 878200.000 +4702 374783.333 816536.111 +4703 374791.667 825188.889 +4704 374800.000 862938.889 +4705 374816.667 1008433.333 +4706 374850.000 1199652.778 +4707 374861.111 1222333.333 +4708 374930.556 871319.444 +4709 374930.556 954700.000 +4710 374947.222 1208455.556 +4711 374950.000 942763.889 +4712 374952.778 862213.889 +4713 374994.444 918569.444 +4714 375019.444 928208.333 +4715 375027.778 975041.667 +4716 375027.778 1224683.333 +4717 375050.000 1050072.222 +4718 375111.111 948377.778 +4719 375177.778 876902.778 +4720 375202.778 1222747.222 +4721 375238.889 956611.111 +4722 375263.889 1207958.333 +4723 375272.222 796800.000 +4724 375275.000 1225122.222 +4725 375297.222 1220391.667 +4726 375311.111 846619.444 +4727 375313.889 767966.667 +4728 375313.889 892533.333 +4729 375316.667 758233.333 +4730 375338.889 958263.889 +4731 375388.889 872583.333 +4732 375422.222 1225150.000 +4733 375427.778 784575.000 +4734 375438.889 947000.000 +4735 375455.556 972686.111 +4736 375458.333 773280.556 +4737 375466.667 879838.889 +4738 375472.222 996338.889 +4739 375536.111 774605.556 +4740 375544.444 889722.222 +4741 375547.222 763372.222 +4742 375569.444 946216.667 +4743 375580.556 945197.222 +4744 375583.333 971347.222 +4745 375586.111 1222700.000 +4746 375597.222 902938.889 +4747 375630.556 1223244.444 +4748 375658.333 973538.889 +4749 375686.111 842963.889 +4750 375697.222 852527.778 +4751 375716.667 837069.444 +4752 375727.778 827527.778 +4753 375738.889 857400.000 +4754 375741.667 1223783.333 +4755 375791.667 1061475.000 +4756 375808.333 774072.222 +4757 375813.889 1013547.222 +4758 375830.556 813805.556 +4759 375830.556 815372.222 +4760 375841.667 1223650.000 +4761 375850.000 790516.667 +4762 375866.667 847938.889 +4763 375880.556 906288.889 +4764 375900.000 775566.667 +4765 375913.889 805438.889 +4766 375950.000 1209566.667 +4767 375958.333 816361.111 +4768 375958.333 1004427.778 +4769 375969.444 1208650.000 +4770 375972.222 906272.222 +4771 375986.111 1223861.111 +4772 376027.778 992922.222 +4773 376036.111 774916.667 +4774 376069.444 875286.111 +4775 376075.000 774772.222 +4776 376133.333 779050.000 +4777 376141.667 818666.667 +4778 376144.444 934102.778 +4779 376150.000 1145111.111 +4780 376194.444 845780.556 +4781 376194.444 888366.667 +4782 376194.444 991061.111 +4783 376211.111 906402.778 +4784 376219.444 821633.333 +4785 376241.667 1047797.222 +4786 376241.667 1094775.000 +4787 376263.889 894977.778 +4788 376300.000 977822.222 +4789 376305.556 1224100.000 +4790 376338.889 794505.556 +4791 376352.778 854008.333 +4792 376361.111 867175.000 +4793 376375.000 765747.222 +4794 376413.889 1207594.444 +4795 376438.889 930922.222 +4796 376438.889 984308.333 +4797 376438.889 987372.222 +4798 376452.778 836488.889 +4799 376455.556 847722.222 +4800 376455.556 915358.333 +4801 376458.333 981133.333 +4802 376486.111 1189711.111 +4803 376547.222 1224066.667 +4804 376577.778 855911.111 +4805 376583.333 976833.333 +4806 376597.222 975750.000 +4807 376613.889 764194.444 +4808 376625.000 1218736.111 +4809 376655.556 827716.667 +4810 376658.333 775066.667 +4811 376719.444 822841.667 +4812 376738.889 808894.444 +4813 376741.667 822775.000 +4814 376775.000 1130611.111 +4815 376788.889 812105.556 +4816 376788.889 1063527.778 +4817 376791.667 954569.444 +4818 376805.556 926636.111 +4819 376808.333 1223988.889 +4820 376811.111 1221233.333 +4821 376819.444 1217669.444 +4822 376830.556 868713.889 +4823 376833.333 879166.667 +4824 376844.444 839530.556 +4825 376852.778 852222.222 +4826 376866.667 979763.889 +4827 376880.556 972633.333 +4828 376902.778 967819.444 +4829 376908.333 757163.889 +4830 376919.444 816241.667 +4831 376922.222 973372.222 +4832 376938.889 858591.667 +4833 376941.667 1220852.778 +4834 376947.222 1221127.778 +4835 376988.889 937958.333 +4836 377005.556 839738.889 +4837 377022.222 1219347.222 +4838 377033.333 822811.111 +4839 377075.000 812508.333 +4840 377102.778 763800.000 +4841 377105.556 821841.667 +4842 377116.667 757494.444 +4843 377130.556 881866.667 +4844 377138.889 971361.111 +4845 377152.778 911350.000 +4846 377194.444 756658.333 +4847 377202.778 1225258.333 +4848 377241.667 898611.111 +4849 377250.000 1221550.000 +4850 377258.333 806422.222 +4851 377272.222 892166.667 +4852 377305.556 818380.556 +4853 377305.556 889330.556 +4854 377338.889 883433.333 +4855 377341.667 793541.667 +4856 377347.222 812997.222 +4857 377361.111 1209344.444 +4858 377383.333 885405.556 +4859 377397.222 818777.778 +4860 377397.222 1214241.667 +4861 377405.556 812308.333 +4862 377416.667 1211233.333 +4863 377430.556 811230.556 +4864 377433.333 877038.889 +4865 377477.778 842947.222 +4866 377497.222 804630.556 +4867 377519.444 890677.778 +4868 377525.000 830688.889 +4869 377527.778 1000166.667 +4870 377530.556 1061080.556 +4871 377533.333 847666.667 +4872 377583.333 812127.778 +4873 377588.889 774802.778 +4874 377600.000 890772.222 +4875 377622.222 848433.333 +4876 377644.444 893350.000 +4877 377661.111 1089052.778 +4878 377666.667 1208461.111 +4879 377691.667 906247.222 +4880 377702.778 1116013.889 +4881 377708.333 812086.111 +4882 377733.333 1130236.111 +4883 377738.889 890263.889 +4884 377741.667 871133.333 +4885 377750.000 1224183.333 +4886 377752.778 879305.556 +4887 377780.556 811883.333 +4888 377791.667 964669.444 +4889 377791.667 975361.111 +4890 377800.000 864605.556 +4891 377800.000 980194.444 +4892 377800.000 1219769.444 +4893 377805.556 804572.222 +4894 377808.333 904216.667 +4895 377813.889 891191.667 +4896 377819.444 756538.889 +4897 377830.556 812661.111 +4898 377838.889 794430.556 +4899 377888.889 971083.333 +4900 377905.556 976291.667 +4901 377930.556 819877.778 +4902 377933.333 799941.667 +4903 377944.444 935777.778 +4904 377963.889 802977.778 +4905 377975.000 797913.889 +4906 377975.000 969994.444 +4907 377975.000 1209955.556 +4908 377975.000 1212150.000 +4909 377991.667 882611.111 +4910 378000.000 973180.556 +4911 378016.667 804458.333 +4912 378030.556 890275.000 +4913 378044.444 1222697.222 +4914 378066.667 1003477.778 +4915 378091.667 854669.444 +4916 378100.000 859813.889 +4917 378105.556 954366.667 +4918 378119.444 1076638.889 +4919 378133.333 820247.222 +4920 378136.111 884380.556 +4921 378144.444 828072.222 +4922 378158.333 811525.000 +4923 378161.111 798247.222 +4924 378172.222 968619.444 +4925 378175.000 892277.778 +4926 378205.556 889275.000 +4927 378216.667 1219988.889 +4928 378227.778 1124350.000 +4929 378227.778 1212755.556 +4930 378238.889 962888.889 +4931 378241.667 820597.222 +4932 378244.444 1222305.556 +4933 378261.111 759919.444 +4934 378286.111 922005.556 +4935 378313.889 1222841.667 +4936 378330.556 891427.778 +4937 378333.333 866327.778 +4938 378344.444 857319.444 +4939 378347.222 973730.556 +4940 378361.111 811350.000 +4941 378361.111 875900.000 +4942 378363.889 812019.444 +4943 378366.667 905327.778 +4944 378391.667 943544.444 +4945 378397.222 947080.556 +4946 378402.778 859491.667 +4947 378405.556 886091.667 +4948 378422.222 1128272.222 +4949 378436.111 824094.444 +4950 378455.556 838583.333 +4951 378486.111 819936.111 +4952 378491.667 1069258.333 +4953 378500.000 997563.889 +4954 378502.778 904986.111 +4955 378502.778 1220311.111 +4956 378511.111 905205.556 +4957 378566.667 924050.000 +4958 378588.889 808544.444 +4959 378591.667 839186.111 +4960 378591.667 1224841.667 +4961 378619.444 846616.667 +4962 378666.667 819866.667 +4963 378672.222 905930.556 +4964 378686.111 976647.222 +4965 378713.889 1093422.222 +4966 378716.667 1222716.667 +4967 378727.778 905277.778 +4968 378736.111 1224555.556 +4969 378769.444 891144.444 +4970 378772.222 1221786.111 +4971 378802.778 862838.889 +4972 378805.556 845730.556 +4973 378811.111 957330.556 +4974 378830.556 870494.444 +4975 378858.333 1221169.444 +4976 378869.444 1222966.667 +4977 378883.333 894947.222 +4978 378966.667 981783.333 +4979 378977.778 889313.889 +4980 378988.889 977825.000 +4981 378994.444 890519.444 +4982 379000.000 867550.000 +4983 379061.111 1225438.889 +4984 379063.889 1220638.889 +4985 379086.111 881291.667 +4986 379094.444 1226852.778 +4987 379100.000 892358.333 +4988 379102.778 853166.667 +4989 379105.556 1222791.667 +4990 379113.889 867444.444 +4991 379136.111 898219.444 +4992 379141.667 919025.000 +4993 379161.111 951700.000 +4994 379166.667 974222.222 +4995 379169.444 952988.889 +4996 379175.000 887622.222 +4997 379213.889 832597.222 +4998 379230.556 905552.778 +4999 379230.556 994094.444 +5000 379236.111 953458.333 +5001 379244.444 953997.222 +5002 379252.778 768594.444 +5003 379255.556 1225263.889 +5004 379330.556 753791.667 +5005 379358.333 1223466.667 +5006 379361.111 992522.222 +5007 379363.889 907877.778 +5008 379369.444 859916.667 +5009 379369.444 869022.222 +5010 379375.000 1078116.667 +5011 379388.889 970194.444 +5012 379402.778 918808.333 +5013 379405.556 1012544.444 +5014 379444.444 874052.778 +5015 379480.556 1220597.222 +5016 379488.889 922636.111 +5017 379508.333 836258.333 +5018 379513.889 867677.778 +5019 379513.889 917711.111 +5020 379533.333 1204216.667 +5021 379577.778 1212897.222 +5022 379586.111 767583.333 +5023 379622.222 986002.778 +5024 379622.222 1223444.444 +5025 379630.556 806897.222 +5026 379647.222 971472.222 +5027 379680.556 913547.222 +5028 379686.111 807672.222 +5029 379716.667 1008722.222 +5030 379725.000 890533.333 +5031 379736.111 820175.000 +5032 379736.111 838419.444 +5033 379736.111 1216944.444 +5034 379736.111 1225300.000 +5035 379747.222 758341.667 +5036 379747.222 815291.667 +5037 379747.222 875558.333 +5038 379747.222 1225605.556 +5039 379772.222 1222941.667 +5040 379780.556 1220300.000 +5041 379797.222 1011327.778 +5042 379805.556 1017522.222 +5043 379811.111 883291.667 +5044 379830.556 890161.111 +5045 379833.333 758541.667 +5046 379838.889 895894.444 +5047 379841.667 1203811.111 +5048 379850.000 1035433.333 +5049 379861.111 1009888.889 +5050 379872.222 1225877.778 +5051 379883.333 857158.333 +5052 379900.000 841797.222 +5053 379916.667 920936.111 +5054 379941.667 838877.778 +5055 379952.778 867977.778 +5056 379966.667 889200.000 +5057 379969.444 1035313.889 +5058 379975.000 1217113.889 +5059 379977.778 1202688.889 +5060 379988.889 861694.444 +5061 379994.444 859436.111 +5062 380013.889 975083.333 +5063 380044.444 1222977.778 +5064 380050.000 1218047.222 +5065 380072.222 896583.333 +5066 380080.556 927444.444 +5067 380127.778 1226441.667 +5068 380144.444 1036277.778 +5069 380147.222 870363.889 +5070 380150.000 1216394.444 +5071 380152.778 890425.000 +5072 380163.889 896186.111 +5073 380172.222 1222875.000 +5074 380227.778 1076708.333 +5075 380238.889 976694.444 +5076 380250.000 780044.444 +5077 380269.444 1219361.111 +5078 380280.556 979400.000 +5079 380280.556 1218836.111 +5080 380291.667 784769.444 +5081 380300.000 790338.889 +5082 380316.667 853425.000 +5083 380330.556 1222658.333 +5084 380372.222 848966.667 +5085 380397.222 1202316.667 +5086 380466.667 937041.667 +5087 380466.667 973447.222 +5088 380491.667 872741.667 +5089 380494.444 773469.444 +5090 380494.444 1221575.000 +5091 380500.000 855458.333 +5092 380522.222 1021222.222 +5093 380525.000 847300.000 +5094 380527.778 811041.667 +5095 380563.889 839433.333 +5096 380608.333 979294.444 +5097 380627.778 914033.333 +5098 380633.333 785027.778 +5099 380638.889 1023100.000 +5100 380666.667 1032222.222 +5101 380669.444 818194.444 +5102 380672.222 1172291.667 +5103 380683.333 788897.222 +5104 380694.444 787008.333 +5105 380722.222 973452.778 +5106 380755.556 755683.333 +5107 380786.111 793833.333 +5108 380802.778 893819.444 +5109 380808.333 818341.667 +5110 380830.556 900958.333 +5111 380838.889 956341.667 +5112 380844.444 998930.556 +5113 380863.889 831263.889 +5114 380872.222 1026202.778 +5115 380875.000 1060944.444 +5116 380902.778 899383.333 +5117 380902.778 922925.000 +5118 380908.333 881586.111 +5119 380916.667 890502.778 +5120 380933.333 885355.556 +5121 380988.889 813241.667 +5122 380991.667 875788.889 +5123 380994.444 883375.000 +5124 381041.667 1222555.556 +5125 381050.000 857588.889 +5126 381075.000 1225686.111 +5127 381088.889 788577.778 +5128 381111.111 858702.778 +5129 381141.667 826033.333 +5130 381161.111 825958.333 +5131 381169.444 784419.444 +5132 381200.000 869141.667 +5133 381230.556 897016.667 +5134 381236.111 857197.222 +5135 381291.667 1040227.778 +5136 381297.222 879350.000 +5137 381302.778 1212713.889 +5138 381344.444 977697.222 +5139 381355.556 961355.556 +5140 381361.111 810997.222 +5141 381372.222 781880.556 +5142 381375.000 1204586.111 +5143 381377.778 892300.000 +5144 381383.333 974311.111 +5145 381400.000 937266.667 +5146 381411.111 856877.778 +5147 381427.778 948133.333 +5148 381450.000 841113.889 +5149 381472.222 980833.333 +5150 381494.444 790719.444 +5151 381502.778 926177.778 +5152 381505.556 812875.000 +5153 381522.222 1212422.222 +5154 381541.667 1213002.778 +5155 381547.222 912438.889 +5156 381558.333 1216902.778 +5157 381597.222 855877.778 +5158 381597.222 874483.333 +5159 381600.000 856597.222 +5160 381616.667 880652.778 +5161 381619.444 834288.889 +5162 381619.444 1216105.556 +5163 381636.111 1211488.889 +5164 381683.333 811950.000 +5165 381688.889 869900.000 +5166 381694.444 971063.889 +5167 381700.000 877830.556 +5168 381769.444 753930.556 +5169 381777.778 947111.111 +5170 381783.333 857097.222 +5171 381802.778 813286.111 +5172 381805.556 990983.333 +5173 381811.111 813072.222 +5174 381863.889 896055.556 +5175 381866.667 919469.444 +5176 381869.444 813655.556 +5177 381875.000 877102.778 +5178 381905.556 940291.667 +5179 381941.667 855644.444 +5180 381944.444 957425.000 +5181 381950.000 856519.444 +5182 381961.111 872966.667 +5183 381961.111 1206794.444 +5184 381969.444 856633.333 +5185 381980.556 886844.444 +5186 382000.000 858227.778 +5187 382008.333 848733.333 +5188 382019.444 790086.111 +5189 382027.778 756927.778 +5190 382030.556 975188.889 +5191 382038.889 857252.778 +5192 382050.000 875741.667 +5193 382080.556 911602.778 +5194 382097.222 842530.556 +5195 382100.000 813841.667 +5196 382100.000 982066.667 +5197 382116.667 899941.667 +5198 382119.444 852236.111 +5199 382119.444 861219.444 +5200 382119.444 896825.000 +5201 382125.000 857402.778 +5202 382141.667 856138.889 +5203 382141.667 1129227.778 +5204 382152.778 814247.222 +5205 382180.556 814430.556 +5206 382180.556 1037555.556 +5207 382183.333 1085680.556 +5208 382205.556 903958.333 +5209 382211.111 903788.889 +5210 382213.889 824425.000 +5211 382225.000 853552.778 +5212 382233.333 800947.222 +5213 382238.889 868622.222 +5214 382247.222 805333.333 +5215 382288.889 856775.000 +5216 382319.444 815377.778 +5217 382319.444 977730.556 +5218 382322.222 905627.778 +5219 382325.000 1226355.556 +5220 382369.444 859858.333 +5221 382383.333 1220391.667 +5222 382402.778 855241.667 +5223 382430.556 933816.667 +5224 382444.444 969277.778 +5225 382452.778 781111.111 +5226 382452.778 815672.222 +5227 382455.556 870361.111 +5228 382494.444 1220388.889 +5229 382500.000 897500.000 +5230 382511.111 875811.111 +5231 382522.222 855922.222 +5232 382541.667 857594.444 +5233 382544.444 769638.889 +5234 382544.444 1046086.111 +5235 382547.222 856313.889 +5236 382547.222 1212988.889 +5237 382566.667 856016.667 +5238 382575.000 879936.111 +5239 382586.111 943302.778 +5240 382613.889 856291.667 +5241 382666.667 764541.667 +5242 382666.667 855330.556 +5243 382672.222 788261.111 +5244 382677.778 856716.667 +5245 382683.333 903800.000 +5246 382694.444 1085472.222 +5247 382716.667 846863.889 +5248 382719.444 876877.778 +5249 382722.222 855836.111 +5250 382730.556 856230.556 +5251 382738.889 856344.444 +5252 382750.000 856150.000 +5253 382769.444 1126402.778 +5254 382786.111 821030.556 +5255 382794.444 856500.000 +5256 382805.556 952416.667 +5257 382811.111 808527.778 +5258 382825.000 855744.444 +5259 382833.333 855911.111 +5260 382833.333 903950.000 +5261 382855.556 821958.333 +5262 382855.556 858241.667 +5263 382858.333 917202.778 +5264 382911.111 766361.111 +5265 382919.444 1224569.444 +5266 382944.444 903158.333 +5267 382972.222 856033.333 +5268 382972.222 1222844.444 +5269 382977.778 1224905.556 +5270 382988.889 869550.000 +5271 383000.000 831741.667 +5272 383002.778 765077.778 +5273 383016.667 916327.778 +5274 383019.444 841475.000 +5275 383027.778 855961.111 +5276 383050.000 899941.667 +5277 383055.556 856963.889 +5278 383083.333 959555.556 +5279 383105.556 854875.000 +5280 383119.444 840275.000 +5281 383138.889 1224808.333 +5282 383150.000 919225.000 +5283 383166.667 866958.333 +5284 383172.222 889030.556 +5285 383175.000 815211.111 +5286 383219.444 756205.556 +5287 383225.000 752180.556 +5288 383238.889 774686.111 +5289 383238.889 1218211.111 +5290 383263.889 898769.444 +5291 383269.444 1227061.111 +5292 383294.444 891908.333 +5293 383305.556 806533.333 +5294 383308.333 887258.333 +5295 383322.222 874452.778 +5296 383325.000 829486.111 +5297 383336.111 856536.111 +5298 383344.444 864641.667 +5299 383358.333 901497.222 +5300 383363.889 750852.778 +5301 383386.111 873450.000 +5302 383397.222 1227000.000 +5303 383422.222 862761.111 +5304 383436.111 893805.556 +5305 383450.000 856155.556 +5306 383450.000 982013.889 +5307 383452.778 885877.778 +5308 383455.556 915013.889 +5309 383483.333 925813.889 +5310 383483.333 970169.444 +5311 383488.889 1207730.556 +5312 383497.222 816327.778 +5313 383500.000 947611.111 +5314 383516.667 859416.667 +5315 383519.444 972041.667 +5316 383527.778 1209316.667 +5317 383550.000 983491.667 +5318 383552.778 875675.000 +5319 383555.556 985805.556 +5320 383566.667 1219866.667 +5321 383605.556 755997.222 +5322 383605.556 817375.000 +5323 383641.667 1225230.556 +5324 383644.444 987644.444 +5325 383683.333 816997.222 +5326 383700.000 851805.556 +5327 383708.333 976638.889 +5328 383722.222 965425.000 +5329 383755.556 863447.222 +5330 383775.000 880561.111 +5331 383819.444 789769.444 +5332 383819.444 975372.222 +5333 383822.222 872127.778 +5334 383861.111 974277.778 +5335 383902.778 842941.667 +5336 383902.778 1051180.556 +5337 383908.333 933344.444 +5338 383911.111 753488.889 +5339 383913.889 869311.111 +5340 383930.556 1208013.889 +5341 383938.889 956027.778 +5342 383952.778 754133.333 +5343 383963.889 825588.889 +5344 383969.444 1130100.000 +5345 383975.000 943513.889 +5346 383980.556 857550.000 +5347 383980.556 980116.667 +5348 383988.889 825783.333 +5349 383997.222 913305.556 +5350 384000.000 1052166.667 +5351 384016.667 1223597.222 +5352 384027.778 942536.111 +5353 384038.889 961813.889 +5354 384047.222 826005.556 +5355 384069.444 875855.556 +5356 384075.000 853788.889 +5357 384077.778 786238.889 +5358 384077.778 861100.000 +5359 384086.111 899919.444 +5360 384088.889 1213705.556 +5361 384094.444 805580.556 +5362 384094.444 822947.222 +5363 384108.333 877613.889 +5364 384147.222 789388.889 +5365 384147.222 818441.667 +5366 384166.667 958527.778 +5367 384177.778 825863.889 +5368 384191.667 824452.778 +5369 384200.000 756880.556 +5370 384200.000 820555.556 +5371 384222.222 837338.889 +5372 384275.000 899136.111 +5373 384277.778 824572.222 +5374 384291.667 1052194.444 +5375 384313.889 928408.333 +5376 384325.000 820202.778 +5377 384327.778 903775.000 +5378 384333.333 851697.222 +5379 384341.667 895502.778 +5380 384344.444 821325.000 +5381 384363.889 1228686.111 +5382 384369.444 823772.222 +5383 384391.667 891627.778 +5384 384405.556 1227133.333 +5385 384408.333 929916.667 +5386 384416.667 892741.667 +5387 384427.778 814805.556 +5388 384436.111 902011.111 +5389 384455.556 910055.556 +5390 384494.444 788691.667 +5391 384527.778 999061.111 +5392 384530.556 856702.778 +5393 384558.333 755777.778 +5394 384563.889 755775.000 +5395 384597.222 940005.556 +5396 384600.000 932025.000 +5397 384602.778 752211.111 +5398 384602.778 810852.778 +5399 384613.889 900916.667 +5400 384655.556 1230077.778 +5401 384697.222 1017522.222 +5402 384722.222 818144.444 +5403 384730.556 779969.444 +5404 384783.333 826380.556 +5405 384783.333 1078755.556 +5406 384794.444 946083.333 +5407 384797.222 1013583.333 +5408 384805.556 1027813.889 +5409 384808.333 767783.333 +5410 384816.667 943541.667 +5411 384819.444 907413.889 +5412 384819.444 1004666.667 +5413 384819.444 1208436.111 +5414 384825.000 1009066.667 +5415 384850.000 786252.778 +5416 384858.333 918502.778 +5417 384886.111 813483.333 +5418 384888.889 921741.667 +5419 384897.222 766825.000 +5420 384902.778 816475.000 +5421 384902.778 897930.556 +5422 384902.778 904869.444 +5423 384919.444 872786.111 +5424 384925.000 826902.778 +5425 384961.111 1214077.778 +5426 384972.222 949502.778 +5427 385019.444 1229950.000 +5428 385025.000 906277.778 +5429 385033.333 826472.222 +5430 385069.444 962616.667 +5431 385086.111 906025.000 +5432 385088.889 891405.556 +5433 385094.444 818400.000 +5434 385130.556 904358.333 +5435 385158.333 884375.000 +5436 385161.111 902102.778 +5437 385172.222 752352.778 +5438 385172.222 826977.778 +5439 385180.556 987777.778 +5440 385200.000 899838.889 +5441 385208.333 880047.222 +5442 385222.222 772938.889 +5443 385225.000 827172.222 +5444 385247.222 1186236.111 +5445 385250.000 891333.333 +5446 385250.000 985333.333 +5447 385250.000 1219697.222 +5448 385266.667 877097.222 +5449 385313.889 993083.333 +5450 385322.222 935219.444 +5451 385325.000 767841.667 +5452 385333.333 902869.444 +5453 385338.889 899888.889 +5454 385347.222 1059983.333 +5455 385363.889 848419.444 +5456 385363.889 859286.111 +5457 385366.667 826830.556 +5458 385369.444 903797.222 +5459 385375.000 819325.000 +5460 385386.111 903350.000 +5461 385388.889 904072.222 +5462 385400.000 827286.111 +5463 385402.778 765847.222 +5464 385411.111 902800.000 +5465 385416.667 857677.778 +5466 385419.444 902327.778 +5467 385425.000 757197.222 +5468 385433.333 896122.222 +5469 385450.000 1217394.444 +5470 385458.333 1069247.222 +5471 385466.667 773369.444 +5472 385488.889 866200.000 +5473 385491.667 904925.000 +5474 385502.778 827780.556 +5475 385505.556 903330.556 +5476 385530.556 903094.444 +5477 385536.111 895383.333 +5478 385541.667 903450.000 +5479 385555.556 978333.333 +5480 385561.111 864683.333 +5481 385563.889 755716.667 +5482 385569.444 903816.667 +5483 385580.556 910119.444 +5484 385594.444 835761.111 +5485 385611.111 941911.111 +5486 385613.889 898972.222 +5487 385630.556 760791.667 +5488 385672.222 866283.333 +5489 385675.000 773283.333 +5490 385708.333 901900.000 +5491 385722.222 948788.889 +5492 385730.556 828302.778 +5493 385733.333 1095491.667 +5494 385736.111 976741.667 +5495 385752.778 771558.333 +5496 385752.778 785027.778 +5497 385758.333 1224488.889 +5498 385766.667 921733.333 +5499 385788.889 1225786.111 +5500 385805.556 1215291.667 +5501 385816.667 1214933.333 +5502 385830.556 936944.444 +5503 385833.333 901250.000 +5504 385833.333 904066.667 +5505 385869.444 984108.333 +5506 385891.667 1213016.667 +5507 385897.222 901200.000 +5508 385902.778 769405.556 +5509 385902.778 903366.667 +5510 385908.333 822830.556 +5511 385913.889 752916.667 +5512 385922.222 899111.111 +5513 385925.000 853177.778 +5514 385925.000 903572.222 +5515 385925.000 905869.444 +5516 385950.000 905461.111 +5517 385969.444 905091.667 +5518 385991.667 833188.889 +5519 386000.000 771625.000 +5520 386008.333 904327.778 +5521 386038.889 898072.222 +5522 386050.000 1079816.667 +5523 386055.556 894358.333 +5524 386055.556 896819.444 +5525 386066.667 896075.000 +5526 386066.667 1212655.556 +5527 386072.222 903833.333 +5528 386075.000 903783.333 +5529 386083.333 912188.889 +5530 386086.111 771408.333 +5531 386102.778 893725.000 +5532 386105.556 895269.444 +5533 386105.556 1228680.556 +5534 386122.222 904633.333 +5535 386125.000 903244.444 +5536 386130.556 787991.667 +5537 386152.778 873544.444 +5538 386155.556 891141.667 +5539 386155.556 952675.000 +5540 386158.333 838086.111 +5541 386172.222 890522.222 +5542 386172.222 1213272.222 +5543 386175.000 819819.444 +5544 386175.000 903491.667 +5545 386183.333 905891.667 +5546 386194.444 946805.556 +5547 386241.667 758547.222 +5548 386244.444 769394.444 +5549 386269.444 770733.333 +5550 386269.444 889455.556 +5551 386275.000 925663.889 +5552 386283.333 910575.000 +5553 386286.111 903194.444 +5554 386300.000 1121200.000 +5555 386338.889 958255.556 +5556 386350.000 900927.778 +5557 386355.556 756102.778 +5558 386355.556 904150.000 +5559 386366.667 900255.556 +5560 386369.444 773113.889 +5561 386380.556 845605.556 +5562 386388.889 787741.667 +5563 386402.778 921222.222 +5564 386411.111 756113.889 +5565 386411.111 837444.444 +5566 386425.000 903236.111 +5567 386450.000 828488.889 +5568 386477.778 786716.667 +5569 386497.222 900930.556 +5570 386497.222 903805.556 +5571 386513.889 862611.111 +5572 386533.333 943486.111 +5573 386555.556 837611.111 +5574 386555.556 927797.222 +5575 386580.556 772500.000 +5576 386591.667 871727.778 +5577 386608.333 904225.000 +5578 386611.111 964916.667 +5579 386616.667 864263.889 +5580 386636.111 873094.444 +5581 386644.444 807100.000 +5582 386652.778 784597.222 +5583 386652.778 903758.333 +5584 386658.333 1209250.000 +5585 386663.889 867911.111 +5586 386675.000 770286.111 +5587 386688.889 884855.556 +5588 386702.778 899844.444 +5589 386711.111 969422.222 +5590 386722.222 901697.222 +5591 386727.778 902991.667 +5592 386730.556 807750.000 +5593 386752.778 917694.444 +5594 386763.889 1213352.778 +5595 386766.667 843302.778 +5596 386769.444 869141.667 +5597 386772.222 875286.111 +5598 386772.222 1231341.667 +5599 386780.556 1211750.000 +5600 386786.111 1212247.222 +5601 386800.000 930927.778 +5602 386808.333 851794.444 +5603 386819.444 845900.000 +5604 386822.222 1047002.778 +5605 386825.000 840658.333 +5606 386825.000 901569.444 +5607 386827.778 1121475.000 +5608 386833.333 902838.889 +5609 386833.333 903077.778 +5610 386858.333 903238.889 +5611 386858.333 1213711.111 +5612 386861.111 765350.000 +5613 386863.889 761719.444 +5614 386886.111 883541.667 +5615 386900.000 753858.333 +5616 386900.000 903425.000 +5617 386905.556 902872.222 +5618 386911.111 1214475.000 +5619 386922.222 1220161.111 +5620 386930.556 902822.222 +5621 386941.667 757738.889 +5622 386947.222 902783.333 +5623 386947.222 1208138.889 +5624 386952.778 903138.889 +5625 386966.667 768480.556 +5626 386975.000 882236.111 +5627 387000.000 902922.222 +5628 387008.333 903497.222 +5629 387011.111 903622.222 +5630 387013.889 901486.111 +5631 387019.444 903169.444 +5632 387025.000 903433.333 +5633 387041.667 772280.556 +5634 387041.667 902816.667 +5635 387041.667 914372.222 +5636 387044.444 932280.556 +5637 387058.333 877600.000 +5638 387072.222 765313.889 +5639 387072.222 1212800.000 +5640 387077.778 770863.889 +5641 387083.333 902927.778 +5642 387105.556 902980.556 +5643 387111.111 981569.444 +5644 387130.556 904297.222 +5645 387133.333 777955.556 +5646 387141.667 854736.111 +5647 387141.667 939911.111 +5648 387144.444 903672.222 +5649 387169.444 878613.889 +5650 387175.000 902655.556 +5651 387183.333 902922.222 +5652 387183.333 950813.889 +5653 387191.667 902602.778 +5654 387191.667 944583.333 +5655 387202.778 920911.111 +5656 387208.333 750763.889 +5657 387208.333 829583.333 +5658 387208.333 902747.222 +5659 387236.111 853694.444 +5660 387236.111 899558.333 +5661 387238.889 770100.000 +5662 387252.778 902966.667 +5663 387263.889 903586.111 +5664 387275.000 903108.333 +5665 387291.667 876816.667 +5666 387291.667 898830.556 +5667 387297.222 1207975.000 +5668 387302.778 828555.556 +5669 387305.556 982277.778 +5670 387308.333 880852.778 +5671 387313.889 799702.778 +5672 387316.667 829977.778 +5673 387316.667 900802.778 +5674 387327.778 763938.889 +5675 387358.333 853800.000 +5676 387358.333 903638.889 +5677 387383.333 771852.778 +5678 387394.444 896711.111 +5679 387400.000 903263.889 +5680 387402.778 902263.889 +5681 387422.222 1080683.333 +5682 387425.000 756047.222 +5683 387430.556 948252.778 +5684 387441.667 903061.111 +5685 387455.556 838450.000 +5686 387458.333 786425.000 +5687 387466.667 1051777.778 +5688 387469.444 902400.000 +5689 387475.000 770833.333 +5690 387477.778 850672.222 +5691 387483.333 899830.556 +5692 387494.444 902855.556 +5693 387508.333 774755.556 +5694 387516.667 769788.889 +5695 387522.222 829369.444 +5696 387544.444 903311.111 +5697 387547.222 828688.889 +5698 387552.778 890952.778 +5699 387552.778 950022.222 +5700 387583.333 830291.667 +5701 387583.333 858080.556 +5702 387594.444 874155.556 +5703 387613.889 1205855.556 +5704 387627.778 937358.333 +5705 387647.222 903136.111 +5706 387647.222 950077.778 +5707 387650.000 768986.111 +5708 387650.000 935563.889 +5709 387713.889 903708.333 +5710 387716.667 840058.333 +5711 387722.222 885025.000 +5712 387725.000 772213.889 +5713 387725.000 1120833.333 +5714 387733.333 888466.667 +5715 387741.667 760766.667 +5716 387741.667 873077.778 +5717 387744.444 751397.222 +5718 387744.444 922569.444 +5719 387750.000 951861.111 +5720 387763.889 765555.556 +5721 387775.000 753102.778 +5722 387800.000 895980.556 +5723 387805.556 955569.444 +5724 387816.667 957383.333 +5725 387819.444 771466.667 +5726 387827.778 846052.778 +5727 387833.333 849016.667 +5728 387838.889 774700.000 +5729 387861.111 829791.667 +5730 387863.889 843697.222 +5731 387863.889 897775.000 +5732 387875.000 942691.667 +5733 387877.778 902158.333 +5734 387891.667 903225.000 +5735 387908.333 1212347.222 +5736 387930.556 774480.556 +5737 387933.333 772719.444 +5738 387933.333 902672.222 +5739 387944.444 835452.778 +5740 387955.556 967355.556 +5741 387997.222 1077188.889 +5742 388005.556 858416.667 +5743 388019.444 813511.111 +5744 388019.444 944525.000 +5745 388033.333 769900.000 +5746 388038.889 769069.444 +5747 388041.667 772050.000 +5748 388047.222 770472.222 +5749 388061.111 871522.222 +5750 388069.444 755916.667 +5751 388072.222 753972.222 +5752 388094.444 769983.333 +5753 388097.222 822025.000 +5754 388105.556 906997.222 +5755 388108.333 949269.444 +5756 388113.889 899530.556 +5757 388113.889 908527.778 +5758 388113.889 911413.889 +5759 388119.444 945316.667 +5760 388133.333 827269.444 +5761 388138.889 769458.333 +5762 388158.333 767500.000 +5763 388183.333 771436.111 +5764 388186.111 817108.333 +5765 388186.111 956888.889 +5766 388188.889 769988.889 +5767 388208.333 785661.111 +5768 388213.889 1023527.778 +5769 388213.889 1211919.444 +5770 388250.000 861700.000 +5771 388250.000 984750.000 +5772 388275.000 910200.000 +5773 388277.778 895400.000 +5774 388283.333 1079702.778 +5775 388294.444 900627.778 +5776 388300.000 768916.667 +5777 388302.778 771966.667 +5778 388327.778 769597.222 +5779 388333.333 769519.444 +5780 388336.111 821383.333 +5781 388338.889 1048208.333 +5782 388341.667 887722.222 +5783 388388.889 774277.778 +5784 388388.889 840963.889 +5785 388402.778 976111.111 +5786 388416.667 765125.000 +5787 388422.222 1061305.556 +5788 388427.778 869913.889 +5789 388444.444 821372.222 +5790 388450.000 768752.778 +5791 388461.111 773066.667 +5792 388466.667 919477.778 +5793 388483.333 900761.111 +5794 388516.667 943436.111 +5795 388527.778 991472.222 +5796 388533.333 913058.333 +5797 388536.111 772597.222 +5798 388561.111 806550.000 +5799 388575.000 768897.222 +5800 388588.889 961088.889 +5801 388597.222 1049166.667 +5802 388611.111 864872.222 +5803 388611.111 900975.000 +5804 388683.333 1075913.889 +5805 388688.889 1179211.111 +5806 388697.222 1069872.222 +5807 388702.778 769213.889 +5808 388711.111 874413.889 +5809 388719.444 771555.556 +5810 388747.222 929113.889 +5811 388783.333 870858.333 +5812 388788.889 860419.444 +5813 388791.667 993263.889 +5814 388794.444 823805.556 +5815 388794.444 829969.444 +5816 388802.778 901111.111 +5817 388808.333 773011.111 +5818 388813.889 948188.889 +5819 388844.444 758275.000 +5820 388850.000 769161.111 +5821 388858.333 945327.778 +5822 388875.000 765122.222 +5823 388877.778 900847.222 +5824 388883.333 897313.889 +5825 388888.889 898452.778 +5826 388905.556 901841.667 +5827 388916.667 1212919.444 +5828 388922.222 894130.556 +5829 388933.333 772219.444 +5830 388941.667 774313.889 +5831 388950.000 770366.667 +5832 388950.000 772119.444 +5833 388952.778 988594.444 +5834 388961.111 769069.444 +5835 388963.889 871866.667 +5836 388966.667 1210758.333 +5837 388975.000 768305.556 +5838 388977.778 1017516.667 +5839 388983.333 900066.667 +5840 389008.333 769158.333 +5841 389008.333 865252.778 +5842 389011.111 772655.556 +5843 389016.667 1079258.333 +5844 389027.778 971166.667 +5845 389061.111 958158.333 +5846 389091.667 900405.556 +5847 389102.778 914480.556 +5848 389105.556 1226091.667 +5849 389125.000 754283.333 +5850 389127.778 772011.111 +5851 389144.444 900858.333 +5852 389172.222 972136.111 +5853 389177.778 839833.333 +5854 389180.556 781947.222 +5855 389186.111 772313.889 +5856 389194.444 973708.333 +5857 389205.556 886613.889 +5858 389208.333 768719.444 +5859 389222.222 1119333.333 +5860 389230.556 942438.889 +5861 389233.333 810961.111 +5862 389236.111 755780.556 +5863 389236.111 768802.778 +5864 389250.000 892688.889 +5865 389258.333 798469.444 +5866 389280.556 769161.111 +5867 389291.667 768619.444 +5868 389313.889 898388.889 +5869 389330.556 769461.111 +5870 389338.889 768969.444 +5871 389341.667 771777.778 +5872 389341.667 808377.778 +5873 389350.000 749063.889 +5874 389350.000 1050163.889 +5875 389377.778 764602.778 +5876 389380.556 769486.111 +5877 389380.556 995602.778 +5878 389386.111 749422.222 +5879 389391.667 769341.667 +5880 389400.000 764952.778 +5881 389413.889 769652.778 +5882 389419.444 835725.000 +5883 389430.556 768925.000 +5884 389430.556 769569.444 +5885 389430.556 845441.667 +5886 389433.333 950983.333 +5887 389452.778 769519.444 +5888 389458.333 846805.556 +5889 389458.333 1199702.778 +5890 389466.667 769313.889 +5891 389477.778 758847.222 +5892 389480.556 817611.111 +5893 389486.111 842800.000 +5894 389488.889 834058.333 +5895 389494.444 848538.889 +5896 389516.667 923338.889 +5897 389519.444 765783.333 +5898 389536.111 947333.333 +5899 389558.333 769458.333 +5900 389561.111 903597.222 +5901 389577.778 1118591.667 +5902 389580.556 762105.556 +5903 389591.667 858902.778 +5904 389591.667 989683.333 +5905 389605.556 890936.111 +5906 389636.111 769911.111 +5907 389636.111 934147.222 +5908 389658.333 770963.889 +5909 389666.667 946166.667 +5910 389683.333 874055.556 +5911 389686.111 773413.889 +5912 389686.111 777358.333 +5913 389688.889 1123227.778 +5914 389694.444 773863.889 +5915 389697.222 768802.778 +5916 389700.000 904313.889 +5917 389702.778 769422.222 +5918 389711.111 770766.667 +5919 389711.111 819144.444 +5920 389716.667 952350.000 +5921 389722.222 970222.222 +5922 389736.111 758052.778 +5923 389736.111 927430.556 +5924 389747.222 748338.889 +5925 389775.000 915047.222 +5926 389777.778 770077.778 +5927 389780.556 1228383.333 +5928 389783.333 764925.000 +5929 389786.111 799497.222 +5930 389791.667 949683.333 +5931 389794.444 765308.333 +5932 389794.444 909805.556 +5933 389805.556 749083.333 +5934 389805.556 769372.222 +5935 389805.556 771005.556 +5936 389819.444 749583.333 +5937 389822.222 946705.556 +5938 389833.333 935683.333 +5939 389858.333 1191619.444 +5940 389863.889 819736.111 +5941 389886.111 769816.667 +5942 389886.111 783588.889 +5943 389891.667 870822.222 +5944 389905.556 770263.889 +5945 389908.333 881625.000 +5946 389916.667 748152.778 +5947 389925.000 791241.667 +5948 389938.889 769108.333 +5949 389938.889 802322.222 +5950 389938.889 1050563.889 +5951 389952.778 1101611.111 +5952 389958.333 889527.778 +5953 389972.222 907383.333 +5954 389975.000 819741.667 +5955 389975.000 844963.889 +5956 389980.556 772886.111 +5957 389988.889 846266.667 +5958 389988.889 895736.111 +5959 389991.667 939533.333 +5960 390005.556 747997.222 +5961 390011.111 1210208.333 +5962 390016.667 766877.778 +5963 390016.667 820488.889 +5964 390019.444 879088.889 +5965 390030.556 769722.222 +5966 390036.111 774008.333 +5967 390036.111 876127.778 +5968 390038.889 819891.667 +5969 390044.444 768758.333 +5970 390052.778 877391.667 +5971 390061.111 856236.111 +5972 390061.111 1118611.111 +5973 390066.667 767794.444 +5974 390077.778 838086.111 +5975 390086.111 944633.333 +5976 390088.889 754661.111 +5977 390100.000 1214219.444 +5978 390122.222 897911.111 +5979 390125.000 846047.222 +5980 390130.556 1047002.778 +5981 390144.444 748819.444 +5982 390150.000 941983.333 +5983 390166.667 846008.333 +5984 390166.667 962888.889 +5985 390169.444 942813.889 +5986 390172.222 927372.222 +5987 390175.000 1220566.667 +5988 390177.778 850588.889 +5989 390177.778 946166.667 +5990 390180.556 918969.444 +5991 390202.778 1208169.444 +5992 390216.667 820291.667 +5993 390216.667 844400.000 +5994 390222.222 946316.667 +5995 390236.111 946933.333 +5996 390241.667 1226738.889 +5997 390250.000 799358.333 +5998 390250.000 998791.667 +5999 390252.778 844175.000 +6000 390252.778 885697.222 +6001 390255.556 770766.667 +6002 390263.889 769744.444 +6003 390272.222 845850.000 +6004 390275.000 820338.889 +6005 390275.000 839197.222 +6006 390277.778 946555.556 +6007 390283.333 842177.778 +6008 390286.111 749388.889 +6009 390286.111 968311.111 +6010 390294.444 895241.667 +6011 390297.222 843663.889 +6012 390302.778 770727.778 +6013 390305.556 975938.889 +6014 390319.444 765030.556 +6015 390330.556 844519.444 +6016 390344.444 843902.778 +6017 390347.222 769077.778 +6018 390347.222 871658.333 +6019 390355.556 845691.667 +6020 390355.556 1042966.667 +6021 390375.000 946319.444 +6022 390380.556 770933.333 +6023 390383.333 804675.000 +6024 390397.222 769933.333 +6025 390397.222 901405.556 +6026 390405.556 946166.667 +6027 390416.667 760666.667 +6028 390427.778 899516.667 +6029 390430.556 1085516.667 +6030 390430.556 1229147.222 +6031 390444.444 953944.444 +6032 390452.778 821305.556 +6033 390483.333 956777.778 +6034 390508.333 747583.333 +6035 390513.889 845816.667 +6036 390516.667 845341.667 +6037 390536.111 765694.444 +6038 390541.667 840530.556 +6039 390561.111 985361.111 +6040 390569.444 849013.889 +6041 390575.000 769361.111 +6042 390594.444 845475.000 +6043 390597.222 948833.333 +6044 390611.111 948194.444 +6045 390619.444 883797.222 +6046 390619.444 887480.556 +6047 390622.222 789697.222 +6048 390633.333 813952.778 +6049 390638.889 1085500.000 +6050 390644.444 1091808.333 +6051 390680.556 830144.444 +6052 390694.444 872600.000 +6053 390694.444 1002319.444 +6054 390702.778 765455.556 +6055 390708.333 898561.111 +6056 390713.889 845322.222 +6057 390719.444 844727.778 +6058 390719.444 852519.444 +6059 390719.444 915700.000 +6060 390722.222 897272.222 +6061 390725.000 937169.444 +6062 390750.000 844472.222 +6063 390755.556 770022.222 +6064 390758.333 953930.556 +6065 390761.111 769580.556 +6066 390769.444 841769.444 +6067 390775.000 846030.556 +6068 390794.444 770733.333 +6069 390825.000 748241.667 +6070 390833.333 782183.333 +6071 390836.111 845086.111 +6072 390838.889 767005.556 +6073 390838.889 771530.556 +6074 390891.667 893905.556 +6075 390908.333 848500.000 +6076 390911.111 944152.778 +6077 390913.889 844958.333 +6078 390916.667 1048722.222 +6079 390919.444 768180.556 +6080 390919.444 1084483.333 +6081 390925.000 845475.000 +6082 390927.778 846127.778 +6083 390927.778 898038.889 +6084 390936.111 1111325.000 +6085 390952.778 874058.333 +6086 390955.556 1215511.111 +6087 390963.889 796811.111 +6088 390991.667 768486.111 +6089 390997.222 945783.333 +6090 391008.333 1209522.222 +6091 391011.111 747180.556 +6092 391041.667 958583.333 +6093 391063.889 844788.889 +6094 391069.444 764852.778 +6095 391072.222 765713.889 +6096 391080.556 769980.556 +6097 391094.444 876563.889 +6098 391097.222 944444.444 +6099 391097.222 950875.000 +6100 391102.778 1083502.778 +6101 391111.111 769327.778 +6102 391111.111 967058.333 +6103 391127.778 844727.778 +6104 391133.333 755422.222 +6105 391133.333 850880.556 +6106 391136.111 826113.889 +6107 391141.667 946272.222 +6108 391155.556 775638.889 +6109 391175.000 900441.667 +6110 391177.778 772527.778 +6111 391180.556 755591.667 +6112 391200.000 885433.333 +6113 391200.000 903283.333 +6114 391211.111 846063.889 +6115 391211.111 851313.889 +6116 391219.444 977063.889 +6117 391222.222 1049166.667 +6118 391230.556 931966.667 +6119 391233.333 825330.556 +6120 391244.444 843616.667 +6121 391247.222 852891.667 +6122 391250.000 869794.444 +6123 391252.778 1118183.333 +6124 391277.778 1215497.222 +6125 391297.222 898194.444 +6126 391300.000 945619.444 +6127 391308.333 894919.444 +6128 391308.333 1231650.000 +6129 391316.667 755252.778 +6130 391319.444 755327.778 +6131 391325.000 941983.333 +6132 391330.556 884719.444 +6133 391333.333 1008633.333 +6134 391341.667 939825.000 +6135 391350.000 858133.333 +6136 391361.111 959513.889 +6137 391361.111 1034694.444 +6138 391366.667 777150.000 +6139 391366.667 847091.667 +6140 391369.444 766986.111 +6141 391394.444 765480.556 +6142 391397.222 771755.556 +6143 391405.556 1216158.333 +6144 391416.667 949383.333 +6145 391433.333 772016.667 +6146 391444.444 891086.111 +6147 391450.000 843744.444 +6148 391452.778 771444.444 +6149 391458.333 774172.222 +6150 391458.333 926836.111 +6151 391458.333 1215902.778 +6152 391488.889 794983.333 +6153 391488.889 1216658.333 +6154 391491.667 767755.556 +6155 391502.778 1232066.667 +6156 391516.667 779825.000 +6157 391522.222 800405.556 +6158 391525.000 847480.556 +6159 391530.556 770672.222 +6160 391530.556 846372.222 +6161 391533.333 746933.333 +6162 391541.667 945466.667 +6163 391547.222 1221483.333 +6164 391552.778 1118175.000 +6165 391566.667 906177.778 +6166 391569.444 846133.333 +6167 391580.556 755247.222 +6168 391588.889 1087283.333 +6169 391591.667 843072.222 +6170 391597.222 825269.444 +6171 391597.222 1217477.778 +6172 391611.111 803522.222 +6173 391611.111 894936.111 +6174 391616.667 847491.667 +6175 391619.444 844569.444 +6176 391625.000 766250.000 +6177 391630.556 871991.667 +6178 391638.889 1197663.889 +6179 391641.667 894636.111 +6180 391652.778 865263.889 +6181 391666.667 765083.333 +6182 391666.667 907808.333 +6183 391697.222 918827.778 +6184 391744.444 901430.556 +6185 391752.778 842944.444 +6186 391758.333 855730.556 +6187 391772.222 767433.333 +6188 391783.333 873936.111 +6189 391791.667 987888.889 +6190 391830.556 766405.556 +6191 391830.556 945925.000 +6192 391836.111 965713.889 +6193 391847.222 938797.222 +6194 391855.556 781636.111 +6195 391863.889 873016.667 +6196 391872.222 844463.889 +6197 391872.222 844880.556 +6198 391888.889 955694.444 +6199 391908.333 843636.111 +6200 391908.333 990283.333 +6201 391911.111 1068169.444 +6202 391927.778 844005.556 +6203 391950.000 946819.444 +6204 391958.333 952080.556 +6205 391963.889 755491.667 +6206 392008.333 804044.444 +6207 392013.889 859213.889 +6208 392019.444 963047.222 +6209 392022.222 836116.667 +6210 392025.000 944922.222 +6211 392038.889 945544.444 +6212 392047.222 760516.667 +6213 392047.222 844280.556 +6214 392052.778 843947.222 +6215 392058.333 894044.444 +6216 392088.889 760669.444 +6217 392094.444 810519.444 +6218 392094.444 935175.000 +6219 392102.778 921377.778 +6220 392105.556 843672.222 +6221 392122.222 1110188.889 +6222 392127.778 941225.000 +6223 392133.333 970052.778 +6224 392144.444 1220083.333 +6225 392150.000 844555.556 +6226 392152.778 953125.000 +6227 392172.222 766375.000 +6228 392180.556 930688.889 +6229 392183.333 845508.333 +6230 392191.667 1210600.000 +6231 392213.889 944511.111 +6232 392216.667 817975.000 +6233 392230.556 845869.444 +6234 392272.222 928463.889 +6235 392272.222 1110527.778 +6236 392275.000 822025.000 +6237 392280.556 843541.667 +6238 392283.333 766166.667 +6239 392300.000 1210755.556 +6240 392311.111 844658.333 +6241 392319.444 843783.333 +6242 392336.111 845458.333 +6243 392338.889 866250.000 +6244 392341.667 922805.556 +6245 392347.222 992977.778 +6246 392352.778 816313.889 +6247 392369.444 850947.222 +6248 392377.778 946958.333 +6249 392377.778 1200255.556 +6250 392402.778 768397.222 +6251 392416.667 748155.556 +6252 392419.444 764483.333 +6253 392425.000 916452.778 +6254 392458.333 750355.556 +6255 392463.889 824786.111 +6256 392463.889 845836.111 +6257 392475.000 1148877.778 +6258 392477.778 881633.333 +6259 392477.778 957061.111 +6260 392483.333 888622.222 +6261 392486.111 873819.444 +6262 392486.111 949000.000 +6263 392505.556 765208.333 +6264 392508.333 803125.000 +6265 392508.333 1062919.444 +6266 392519.444 844702.778 +6267 392544.444 767002.778 +6268 392561.111 844180.556 +6269 392563.889 893480.556 +6270 392566.667 802925.000 +6271 392580.556 758375.000 +6272 392616.667 1210150.000 +6273 392619.444 848200.000 +6274 392630.556 886297.222 +6275 392633.333 803200.000 +6276 392636.111 816294.444 +6277 392638.889 1036916.667 +6278 392666.667 815616.667 +6279 392672.222 767986.111 +6280 392680.556 844133.333 +6281 392680.556 845230.556 +6282 392683.333 1116361.111 +6283 392691.667 803125.000 +6284 392708.333 938341.667 +6285 392719.444 767322.222 +6286 392725.000 776369.444 +6287 392725.000 915744.444 +6288 392727.778 793647.222 +6289 392736.111 882436.111 +6290 392738.889 815730.556 +6291 392738.889 977716.667 +6292 392775.000 745750.000 +6293 392786.111 939766.667 +6294 392797.222 898816.667 +6295 392805.556 803447.222 +6296 392850.000 809686.111 +6297 392863.889 802563.889 +6298 392866.667 867625.000 +6299 392869.444 844852.778 +6300 392883.333 772041.667 +6301 392886.111 803061.111 +6302 392888.889 778600.000 +6303 392902.778 766125.000 +6304 392905.556 756347.222 +6305 392930.556 839888.889 +6306 392930.556 1030666.667 +6307 392950.000 778608.333 +6308 392958.333 859508.333 +6309 392963.889 807772.222 +6310 392963.889 1197747.222 +6311 392988.889 968305.556 +6312 392991.667 879925.000 +6313 392997.222 756050.000 +6314 392997.222 842633.333 +6315 393000.000 852222.222 +6316 393011.111 892850.000 +6317 393022.222 904069.444 +6318 393025.000 936772.222 +6319 393038.889 857713.889 +6320 393047.222 925125.000 +6321 393061.111 1022688.889 +6322 393077.778 1237983.333 +6323 393091.667 764752.778 +6324 393091.667 772975.000 +6325 393108.333 914883.333 +6326 393111.111 949222.222 +6327 393122.222 846505.556 +6328 393141.667 745252.778 +6329 393141.667 776280.556 +6330 393175.000 745950.000 +6331 393183.333 843688.889 +6332 393194.444 884527.778 +6333 393194.444 895719.444 +6334 393200.000 765158.333 +6335 393222.222 952666.667 +6336 393233.333 777530.556 +6337 393236.111 836911.111 +6338 393266.667 1109638.889 +6339 393269.444 815486.111 +6340 393277.778 745038.889 +6341 393280.556 1201822.222 +6342 393291.667 821013.889 +6343 393330.556 829825.000 +6344 393341.667 764397.222 +6345 393355.556 878819.444 +6346 393372.222 854836.111 +6347 393383.333 764800.000 +6348 393391.667 942258.333 +6349 393397.222 852044.444 +6350 393402.778 744777.778 +6351 393405.556 767225.000 +6352 393408.333 800191.667 +6353 393419.444 787569.444 +6354 393419.444 911950.000 +6355 393433.333 954600.000 +6356 393436.111 902125.000 +6357 393450.000 835530.556 +6358 393483.333 796711.111 +6359 393483.333 974458.333 +6360 393488.889 1108508.333 +6361 393508.333 866669.444 +6362 393508.333 1017097.222 +6363 393519.444 833827.778 +6364 393522.222 1125763.889 +6365 393544.444 841272.222 +6366 393566.667 978408.333 +6367 393575.000 1004413.889 +6368 393577.778 780402.778 +6369 393583.333 934955.556 +6370 393597.222 1115855.556 +6371 393600.000 843100.000 +6372 393602.778 1045963.889 +6373 393633.333 765208.333 +6374 393638.889 1216925.000 +6375 393641.667 744233.333 +6376 393647.222 998416.667 +6377 393672.222 767955.556 +6378 393677.778 943619.444 +6379 393688.889 821325.000 +6380 393688.889 1070322.222 +6381 393702.778 947822.222 +6382 393705.556 909050.000 +6383 393708.333 842133.333 +6384 393713.889 862611.111 +6385 393722.222 1048555.556 +6386 393736.111 769680.556 +6387 393738.889 803486.111 +6388 393741.667 767227.778 +6389 393761.111 771550.000 +6390 393772.222 765400.000 +6391 393794.444 812586.111 +6392 393816.667 752202.778 +6393 393869.444 945808.333 +6394 393877.778 889605.556 +6395 393888.889 890800.000 +6396 393913.889 876936.111 +6397 393916.667 797486.111 +6398 393930.556 793733.333 +6399 393938.889 964133.333 +6400 393941.667 765238.889 +6401 393950.000 865625.000 +6402 393955.556 803002.778 +6403 393958.333 1010519.444 +6404 393977.778 821294.444 +6405 393983.333 793819.444 +6406 394013.889 766022.222 +6407 394022.222 1072105.556 +6408 394036.111 769505.556 +6409 394038.889 758677.778 +6410 394050.000 1147777.778 +6411 394063.889 887900.000 +6412 394097.222 1233544.444 +6413 394100.000 743650.000 +6414 394111.111 949013.889 +6415 394119.444 747427.778 +6416 394125.000 764638.889 +6417 394125.000 1217116.667 +6418 394141.667 774108.333 +6419 394152.778 814550.000 +6420 394166.667 953333.333 +6421 394175.000 766213.889 +6422 394183.333 924380.556 +6423 394186.111 775038.889 +6424 394194.444 767805.556 +6425 394200.000 894555.556 +6426 394227.778 765850.000 +6427 394230.556 850127.778 +6428 394233.333 931302.778 +6429 394238.889 928013.889 +6430 394272.222 752344.444 +6431 394277.778 864283.333 +6432 394283.333 744961.111 +6433 394300.000 778044.444 +6434 394311.111 916750.000 +6435 394344.444 929380.556 +6436 394347.222 845369.444 +6437 394355.556 1215369.444 +6438 394369.444 904030.556 +6439 394380.556 992647.222 +6440 394383.333 942038.889 +6441 394388.889 986944.444 +6442 394405.556 925450.000 +6443 394408.333 789741.667 +6444 394408.333 885947.222 +6445 394433.333 896516.667 +6446 394452.778 838286.111 +6447 394455.556 795466.667 +6448 394458.333 1238041.667 +6449 394463.889 897808.333 +6450 394486.111 764180.556 +6451 394488.889 910513.889 +6452 394494.444 757166.667 +6453 394522.222 747280.556 +6454 394561.111 779641.667 +6455 394561.111 981058.333 +6456 394563.889 879961.111 +6457 394575.000 777491.667 +6458 394586.111 822319.444 +6459 394619.444 821819.444 +6460 394625.000 802183.333 +6461 394650.000 874500.000 +6462 394652.778 957361.111 +6463 394666.667 874138.889 +6464 394694.444 762047.222 +6465 394694.444 768297.222 +6466 394716.667 796836.111 +6467 394727.778 765233.333 +6468 394733.333 827394.444 +6469 394736.111 814791.667 +6470 394736.111 922097.222 +6471 394736.111 1187763.889 +6472 394738.889 829108.333 +6473 394783.333 745755.556 +6474 394800.000 845519.444 +6475 394808.333 844577.778 +6476 394808.333 920011.111 +6477 394811.111 766441.667 +6478 394816.667 1060377.778 +6479 394825.000 1114952.778 +6480 394830.556 883727.778 +6481 394838.889 903713.889 +6482 394847.222 820791.667 +6483 394850.000 801427.778 +6484 394852.778 790450.000 +6485 394861.111 750261.111 +6486 394861.111 773522.222 +6487 394886.111 836369.444 +6488 394888.889 961697.222 +6489 394919.444 872672.222 +6490 394922.222 809038.889 +6491 394950.000 798152.778 +6492 394961.111 881761.111 +6493 394966.667 1215511.111 +6494 395008.333 851863.889 +6495 395008.333 897677.778 +6496 395022.222 985463.889 +6497 395030.556 787688.889 +6498 395030.556 820847.222 +6499 395036.111 801669.444 +6500 395050.000 946330.556 +6501 395069.444 847452.778 +6502 395080.556 915286.111 +6503 395105.556 797986.111 +6504 395113.889 821636.111 +6505 395125.000 984333.333 +6506 395127.778 802491.667 +6507 395136.111 749250.000 +6508 395138.889 1215552.778 +6509 395144.444 764113.889 +6510 395147.222 867938.889 +6511 395161.111 843763.889 +6512 395202.778 890488.889 +6513 395205.556 744861.111 +6514 395208.333 861677.778 +6515 395213.889 857769.444 +6516 395219.444 947697.222 +6517 395222.222 954005.556 +6518 395225.000 887536.111 +6519 395236.111 871250.000 +6520 395244.444 1221925.000 +6521 395250.000 1115897.222 +6522 395258.333 871125.000 +6523 395286.111 746483.333 +6524 395297.222 801169.444 +6525 395297.222 840866.667 +6526 395297.222 1198127.778 +6527 395305.556 790177.778 +6528 395308.333 758077.778 +6529 395308.333 803436.111 +6530 395330.556 773150.000 +6531 395330.556 880222.222 +6532 395347.222 1077825.000 +6533 395350.000 1197516.667 +6534 395358.333 763486.111 +6535 395366.667 871058.333 +6536 395380.556 897630.556 +6537 395391.667 863691.667 +6538 395400.000 824072.222 +6539 395419.444 771083.333 +6540 395425.000 1107347.222 +6541 395463.889 750252.778 +6542 395469.444 1114547.222 +6543 395477.778 816397.222 +6544 395483.333 817930.556 +6545 395483.333 943297.222 +6546 395486.111 1076555.556 +6547 395488.889 892944.444 +6548 395491.667 760919.444 +6549 395500.000 860797.222 +6550 395505.556 1073241.667 +6551 395513.889 1103872.222 +6552 395522.222 797980.556 +6553 395522.222 842333.333 +6554 395522.222 940405.556 +6555 395527.778 879394.444 +6556 395538.889 832569.444 +6557 395580.556 801819.444 +6558 395580.556 860952.778 +6559 395588.889 843041.667 +6560 395591.667 742436.111 +6561 395600.000 760716.667 +6562 395608.333 753627.778 +6563 395630.556 951213.889 +6564 395641.667 809961.111 +6565 395655.556 896572.222 +6566 395655.556 944477.778 +6567 395658.333 789805.556 +6568 395672.222 972783.333 +6569 395675.000 848161.111 +6570 395688.889 771772.222 +6571 395708.333 976622.222 +6572 395716.667 754675.000 +6573 395727.778 1075358.333 +6574 395730.556 742319.444 +6575 395744.444 1060969.444 +6576 395752.778 769961.111 +6577 395777.778 755891.667 +6578 395777.778 822377.778 +6579 395852.778 914008.333 +6580 395855.556 902519.444 +6581 395863.889 1064302.778 +6582 395869.444 937958.333 +6583 395886.111 894144.444 +6584 395900.000 789500.000 +6585 395911.111 973986.111 +6586 395916.667 895802.778 +6587 395916.667 897463.889 +6588 395916.667 899527.778 +6589 395927.778 788336.111 +6590 395950.000 751705.556 +6591 395955.556 748819.444 +6592 395994.444 886077.778 +6593 395994.444 1108100.000 +6594 396000.000 759416.667 +6595 396005.556 778208.333 +6596 396005.556 829461.111 +6597 396011.111 1050316.667 +6598 396019.444 748430.556 +6599 396025.000 820883.333 +6600 396027.778 809369.444 +6601 396030.556 743405.556 +6602 396036.111 933422.222 +6603 396044.444 764780.556 +6604 396047.222 761155.556 +6605 396047.222 768502.778 +6606 396047.222 822116.667 +6607 396047.222 828291.667 +6608 396050.000 833955.556 +6609 396066.667 758336.111 +6610 396077.778 908050.000 +6611 396088.889 777047.222 +6612 396091.667 854463.889 +6613 396108.333 945991.667 +6614 396111.111 876961.111 +6615 396116.667 799047.222 +6616 396127.778 863741.667 +6617 396133.333 1050161.111 +6618 396144.444 787752.778 +6619 396172.222 1049502.778 +6620 396202.778 900438.889 +6621 396205.556 777591.667 +6622 396227.778 872833.333 +6623 396236.111 774111.111 +6624 396247.222 890188.889 +6625 396263.889 1114388.889 +6626 396283.333 1050494.444 +6627 396288.889 902188.889 +6628 396294.444 799561.111 +6629 396297.222 904561.111 +6630 396300.000 1116344.444 +6631 396313.889 1065216.667 +6632 396325.000 787847.222 +6633 396333.333 1053166.667 +6634 396344.444 799700.000 +6635 396355.556 840708.333 +6636 396355.556 849311.111 +6637 396363.889 748027.778 +6638 396375.000 1060613.889 +6639 396400.000 891927.778 +6640 396402.778 852622.222 +6641 396402.778 1063736.111 +6642 396413.889 787747.222 +6643 396416.667 777202.778 +6644 396416.667 1049588.889 +6645 396427.778 741808.333 +6646 396427.778 842866.667 +6647 396441.667 775861.111 +6648 396444.444 808577.778 +6649 396444.444 868647.222 +6650 396455.556 887380.556 +6651 396458.333 799875.000 +6652 396469.444 1050247.222 +6653 396469.444 1069511.111 +6654 396477.778 845272.222 +6655 396477.778 1049872.222 +6656 396486.111 818533.333 +6657 396491.667 818622.222 +6658 396494.444 827444.444 +6659 396511.111 776911.111 +6660 396513.889 753286.111 +6661 396525.000 788972.222 +6662 396527.778 787627.778 +6663 396527.778 837869.444 +6664 396533.333 755169.444 +6665 396536.111 835638.889 +6666 396536.111 917344.444 +6667 396538.889 880261.111 +6668 396547.222 775730.556 +6669 396552.778 1068280.556 +6670 396572.222 893894.444 +6671 396577.778 771747.222 +6672 396580.556 789286.111 +6673 396580.556 837350.000 +6674 396583.333 799866.667 +6675 396600.000 750925.000 +6676 396605.556 955261.111 +6677 396611.111 768852.778 +6678 396616.667 995700.000 +6679 396619.444 741655.556 +6680 396619.444 755666.667 +6681 396636.111 794055.556 +6682 396669.444 757272.222 +6683 396697.222 742322.222 +6684 396700.000 861313.889 +6685 396713.889 981533.333 +6686 396716.667 842527.778 +6687 396733.333 856986.111 +6688 396755.556 898466.667 +6689 396761.111 897044.444 +6690 396763.889 1202400.000 +6691 396794.444 844291.667 +6692 396802.778 874175.000 +6693 396819.444 966594.444 +6694 396830.556 776963.889 +6695 396836.111 757500.000 +6696 396841.667 1108538.889 +6697 396847.222 839297.222 +6698 396847.222 883063.889 +6699 396861.111 749955.556 +6700 396866.667 755847.222 +6701 396883.333 1234816.667 +6702 396891.667 865225.000 +6703 396894.444 841688.889 +6704 396911.111 967472.222 +6705 396927.778 777450.000 +6706 396927.778 787930.556 +6707 396938.889 920427.778 +6708 396941.667 910388.889 +6709 396952.778 742591.667 +6710 396955.556 788800.000 +6711 396977.778 760630.556 +6712 396988.889 781800.000 +6713 397011.111 891230.556 +6714 397016.667 824269.444 +6715 397027.778 751122.222 +6716 397044.444 773272.222 +6717 397047.222 1050808.333 +6718 397055.556 964166.667 +6719 397061.111 842194.444 +6720 397061.111 1056969.444 +6721 397069.444 912066.667 +6722 397083.333 913583.333 +6723 397086.111 902280.556 +6724 397088.889 907244.444 +6725 397102.778 1118355.556 +6726 397111.111 754705.556 +6727 397119.444 888044.444 +6728 397119.444 929480.556 +6729 397127.778 889969.444 +6730 397136.111 756097.222 +6731 397136.111 825994.444 +6732 397147.222 884722.222 +6733 397155.556 756411.111 +6734 397155.556 829530.556 +6735 397155.556 886325.000 +6736 397161.111 838777.778 +6737 397183.333 829869.444 +6738 397194.444 832652.778 +6739 397211.111 822988.889 +6740 397219.444 858891.667 +6741 397252.778 899105.556 +6742 397269.444 763269.444 +6743 397277.778 764522.222 +6744 397286.111 1218363.889 +6745 397294.444 754683.333 +6746 397294.444 1048313.889 +6747 397322.222 748813.889 +6748 397327.778 751319.444 +6749 397338.889 902288.889 +6750 397366.667 775352.778 +6751 397377.778 767016.667 +6752 397383.333 855719.444 +6753 397383.333 1043227.778 +6754 397388.889 798988.889 +6755 397391.667 752244.444 +6756 397391.667 755983.333 +6757 397391.667 1049841.667 +6758 397419.444 922583.333 +6759 397422.222 924725.000 +6760 397425.000 1050130.556 +6761 397427.778 1220125.000 +6762 397436.111 775541.667 +6763 397436.111 939980.556 +6764 397441.667 838086.111 +6765 397444.444 770883.333 +6766 397444.444 845322.222 +6767 397452.778 843850.000 +6768 397458.333 755469.444 +6769 397469.444 925638.889 +6770 397475.000 753108.333 +6771 397475.000 1221952.778 +6772 397477.778 815166.667 +6773 397500.000 755000.000 +6774 397508.333 944963.889 +6775 397508.333 1015325.000 +6776 397519.444 905350.000 +6777 397527.778 790811.111 +6778 397530.556 742233.333 +6779 397530.556 1050636.111 +6780 397536.111 765916.667 +6781 397555.556 948722.222 +6782 397555.556 1052205.556 +6783 397558.333 775780.556 +6784 397561.111 993236.111 +6785 397572.222 896536.111 +6786 397575.000 741066.667 +6787 397588.889 841916.667 +6788 397588.889 1044269.444 +6789 397591.667 949494.444 +6790 397605.556 865263.889 +6791 397611.111 799816.667 +6792 397611.111 868119.444 +6793 397622.222 938041.667 +6794 397625.000 811155.556 +6795 397625.000 872291.667 +6796 397655.556 808713.889 +6797 397658.333 903988.889 +6798 397661.111 755097.222 +6799 397661.111 892616.667 +6800 397661.111 1050766.667 +6801 397669.444 990313.889 +6802 397675.000 896805.556 +6803 397683.333 861580.556 +6804 397686.111 766800.000 +6805 397688.889 820922.222 +6806 397713.889 888741.667 +6807 397761.111 859572.222 +6808 397769.444 896791.667 +6809 397791.667 987847.222 +6810 397811.111 769636.111 +6811 397816.667 928900.000 +6812 397819.444 860502.778 +6813 397830.556 950897.222 +6814 397841.667 749925.000 +6815 397844.444 930733.333 +6816 397850.000 857694.444 +6817 397852.778 759791.667 +6818 397872.222 982097.222 +6819 397894.444 769983.333 +6820 397902.778 777280.556 +6821 397911.111 749294.444 +6822 397913.889 741955.556 +6823 397927.778 873708.333 +6824 397930.556 767305.556 +6825 397930.556 1232469.444 +6826 397941.667 915230.556 +6827 397944.444 751491.667 +6828 397952.778 935522.222 +6829 397955.556 855263.889 +6830 397969.444 885916.667 +6831 397972.222 843113.889 +6832 397975.000 842536.111 +6833 397986.111 879858.333 +6834 397988.889 827011.111 +6835 397991.667 882830.556 +6836 397994.444 884622.222 +6837 398005.556 754600.000 +6838 398016.667 896436.111 +6839 398022.222 750644.444 +6840 398022.222 862672.222 +6841 398027.778 828063.889 +6842 398027.778 1050869.444 +6843 398030.556 798080.556 +6844 398036.111 876736.111 +6845 398058.333 920413.889 +6846 398063.889 838869.444 +6847 398066.667 1010416.667 +6848 398069.444 822972.222 +6849 398072.222 770116.667 +6850 398072.222 820713.889 +6851 398077.778 874950.000 +6852 398088.889 755491.667 +6853 398091.667 754869.444 +6854 398094.444 893972.222 +6855 398097.222 825222.222 +6856 398097.222 863225.000 +6857 398105.556 1204680.556 +6858 398113.889 749833.333 +6859 398119.444 771375.000 +6860 398122.222 852088.889 +6861 398125.000 851716.667 +6862 398127.778 793569.444 +6863 398136.111 790250.000 +6864 398161.111 1118547.222 +6865 398169.444 751555.556 +6866 398169.444 912422.222 +6867 398180.556 970505.556 +6868 398183.333 1005277.778 +6869 398191.667 754188.889 +6870 398200.000 750066.667 +6871 398208.333 840194.444 +6872 398219.444 758277.778 +6873 398222.222 1049333.333 +6874 398230.556 787183.333 +6875 398241.667 749980.556 +6876 398244.444 976322.222 +6877 398247.222 797547.222 +6878 398252.778 836344.444 +6879 398266.667 750158.333 +6880 398269.444 805666.667 +6881 398275.000 754147.222 +6882 398277.778 779036.111 +6883 398288.889 848902.778 +6884 398302.778 752408.333 +6885 398308.333 772313.889 +6886 398311.111 905594.444 +6887 398313.889 757577.778 +6888 398338.889 998911.111 +6889 398341.667 960638.889 +6890 398366.667 844113.889 +6891 398366.667 1049586.111 +6892 398366.667 1050366.667 +6893 398380.556 749652.778 +6894 398380.556 751530.556 +6895 398383.333 854388.889 +6896 398386.111 860252.778 +6897 398394.444 750738.889 +6898 398402.778 825461.111 +6899 398402.778 889547.222 +6900 398411.111 966469.444 +6901 398427.778 828047.222 +6902 398433.333 863977.778 +6903 398438.889 750230.556 +6904 398438.889 841247.222 +6905 398441.667 775586.111 +6906 398441.667 895394.444 +6907 398452.778 826008.333 +6908 398461.111 845397.222 +6909 398466.667 757119.444 +6910 398466.667 799000.000 +6911 398480.556 861725.000 +6912 398483.333 810369.444 +6913 398488.889 868022.222 +6914 398494.444 753561.111 +6915 398513.889 1049980.556 +6916 398522.222 750683.333 +6917 398525.000 894086.111 +6918 398525.000 955355.556 +6919 398527.778 894633.333 +6920 398536.111 831830.556 +6921 398536.111 892419.444 +6922 398538.889 890838.889 +6923 398538.889 891661.111 +6924 398555.556 767077.778 +6925 398555.556 767688.889 +6926 398569.444 847933.333 +6927 398583.333 748033.333 +6928 398597.222 866425.000 +6929 398600.000 753447.222 +6930 398600.000 808155.556 +6931 398611.111 819069.444 +6932 398630.556 790583.333 +6933 398636.111 770561.111 +6934 398638.889 864669.444 +6935 398647.222 750555.556 +6936 398652.778 776127.778 +6937 398658.333 751791.667 +6938 398663.889 750286.111 +6939 398675.000 750950.000 +6940 398680.556 1049713.889 +6941 398691.667 753827.778 +6942 398727.778 899211.111 +6943 398744.444 768661.111 +6944 398769.444 870444.444 +6945 398772.222 750650.000 +6946 398772.222 797022.222 +6947 398775.000 843022.222 +6948 398780.556 751211.111 +6949 398780.556 839369.444 +6950 398783.333 750930.556 +6951 398783.333 799250.000 +6952 398788.889 829508.333 +6953 398811.111 753241.667 +6954 398813.889 830930.556 +6955 398830.556 767108.333 +6956 398841.667 827536.111 +6957 398841.667 874086.111 +6958 398850.000 906558.333 +6959 398855.556 1049866.667 +6960 398863.889 769850.000 +6961 398877.778 900077.778 +6962 398891.667 840266.667 +6963 398891.667 943616.667 +6964 398900.000 754758.333 +6965 398900.000 861572.222 +6966 398905.556 841988.889 +6967 398905.556 887280.556 +6968 398908.333 750733.333 +6969 398908.333 752841.667 +6970 398911.111 749222.222 +6971 398913.889 750380.556 +6972 398916.667 751166.667 +6973 398916.667 753000.000 +6974 398919.444 855769.444 +6975 398922.222 747025.000 +6976 398922.222 997066.667 +6977 398925.000 797472.222 +6978 398936.111 896047.222 +6979 398938.889 968791.667 +6980 398955.556 876519.444 +6981 398963.889 801794.444 +6982 398963.889 824202.778 +6983 398966.667 799747.222 +6984 398969.444 761638.889 +6985 398975.000 830869.444 +6986 398977.778 843063.889 +6987 398991.667 820063.889 +6988 398994.444 766405.556 +6989 399000.000 752894.444 +6990 399000.000 825341.667 +6991 399008.333 750850.000 +6992 399016.667 753288.889 +6993 399019.444 753502.778 +6994 399019.444 846750.000 +6995 399022.222 958005.556 +6996 399033.333 844855.556 +6997 399044.444 844016.667 +6998 399063.889 752719.444 +6999 399088.889 766372.222 +7000 399097.222 753238.889 +7001 399097.222 878211.111 +7002 399111.111 851616.667 +7003 399116.667 752775.000 +7004 399122.222 752541.667 +7005 399136.111 868011.111 +7006 399144.444 939619.444 +7007 399147.222 882733.333 +7008 399161.111 765847.222 +7009 399166.667 753880.556 +7010 399175.000 797175.000 +7011 399180.556 750716.667 +7012 399183.333 752594.444 +7013 399202.778 807433.333 +7014 399205.556 789580.556 +7015 399205.556 1050861.111 +7016 399213.889 752883.333 +7017 399219.444 885719.444 +7018 399230.556 772988.889 +7019 399241.667 838088.889 +7020 399258.333 751200.000 +7021 399266.667 740775.000 +7022 399266.667 741341.667 +7023 399277.778 1221780.556 +7024 399283.333 752741.667 +7025 399286.111 749441.667 +7026 399288.889 853702.778 +7027 399291.667 752966.667 +7028 399302.778 772483.333 +7029 399322.222 858480.556 +7030 399325.000 779991.667 +7031 399325.000 889511.111 +7032 399327.778 890619.444 +7033 399336.111 824725.000 +7034 399355.556 914097.222 +7035 399358.333 741713.889 +7036 399361.111 840255.556 +7037 399375.000 776613.889 +7038 399380.556 752722.222 +7039 399386.111 888655.556 +7040 399388.889 741933.333 +7041 399388.889 752558.333 +7042 399402.778 820133.333 +7043 399416.667 948300.000 +7044 399419.444 741502.778 +7045 399419.444 742047.222 +7046 399425.000 745444.444 +7047 399441.667 740733.333 +7048 399444.444 899372.222 +7049 399452.778 799958.333 +7050 399455.556 752616.667 +7051 399472.222 750669.444 +7052 399477.778 810575.000 +7053 399480.556 743611.111 +7054 399486.111 741375.000 +7055 399486.111 874597.222 +7056 399491.667 759738.889 +7057 399508.333 862619.444 +7058 399511.111 902122.222 +7059 399522.222 751641.667 +7060 399525.000 767516.667 +7061 399530.556 1119000.000 +7062 399536.111 741983.333 +7063 399541.667 895486.111 +7064 399541.667 1121194.444 +7065 399547.222 759972.222 +7066 399547.222 828122.222 +7067 399555.556 849175.000 +7068 399555.556 860138.889 +7069 399569.444 858052.778 +7070 399583.333 841722.222 +7071 399586.111 759197.222 +7072 399594.444 825958.333 +7073 399605.556 756058.333 +7074 399608.333 897238.889 +7075 399611.111 829988.889 +7076 399613.889 1055102.778 +7077 399616.667 824913.889 +7078 399625.000 746791.667 +7079 399625.000 767280.556 +7080 399625.000 843280.556 +7081 399633.333 752505.556 +7082 399666.667 758000.000 +7083 399666.667 828855.556 +7084 399675.000 872775.000 +7085 399677.778 847091.667 +7086 399680.556 753416.667 +7087 399686.111 891622.222 +7088 399688.889 829377.778 +7089 399697.222 815366.667 +7090 399700.000 812994.444 +7091 399702.778 740691.667 +7092 399708.333 807508.333 +7093 399719.444 746833.333 +7094 399719.444 765202.778 +7095 399741.667 758202.778 +7096 399747.222 938008.333 +7097 399755.556 1117844.444 +7098 399777.778 796147.222 +7099 399777.778 1051313.889 +7100 399780.556 767333.333 +7101 399783.333 861180.556 +7102 399786.111 820036.111 +7103 399813.889 740666.667 +7104 399819.444 888227.778 +7105 399825.000 772497.222 +7106 399830.556 758241.667 +7107 399830.556 761844.444 +7108 399836.111 768227.778 +7109 399852.778 1048200.000 +7110 399861.111 882588.889 +7111 399866.667 830616.667 +7112 399869.444 951447.222 +7113 399872.222 907633.333 +7114 399880.556 807316.667 +7115 399880.556 811766.667 +7116 399927.778 747880.556 +7117 399936.111 817341.667 +7118 399936.111 1050891.667 +7119 399947.222 844080.556 +7120 399955.556 826744.444 +7121 399958.333 866200.000 +7122 399963.889 1118425.000 +7123 399966.667 749930.556 +7124 399966.667 795861.111 +7125 399969.444 767069.444 +7126 399975.000 857466.667 +7127 399977.778 763544.444 +7128 400016.667 768505.556 +7129 400025.000 799983.333 +7130 400063.889 757036.111 +7131 400069.444 881580.556 +7132 400083.333 752608.333 +7133 400083.333 790783.333 +7134 400088.889 771158.333 +7135 400102.778 799011.111 +7136 400108.333 892822.222 +7137 400113.889 750152.778 +7138 400113.889 783736.111 +7139 400144.444 743116.667 +7140 400150.000 1052700.000 +7141 400158.333 741452.778 +7142 400161.111 810727.778 +7143 400175.000 904241.667 +7144 400177.778 795897.222 +7145 400180.556 807344.444 +7146 400186.111 785041.667 +7147 400191.667 828794.444 +7148 400208.333 980697.222 +7149 400213.889 1220991.667 +7150 400216.667 767283.333 +7151 400227.778 824447.222 +7152 400241.667 798908.333 +7153 400247.222 801002.778 +7154 400250.000 880733.333 +7155 400272.222 808152.778 +7156 400277.778 748694.444 +7157 400277.778 885733.333 +7158 400288.889 756211.111 +7159 400291.667 810391.667 +7160 400297.222 746188.889 +7161 400313.889 909605.556 +7162 400322.222 859125.000 +7163 400330.556 796616.667 +7164 400333.333 831583.333 +7165 400336.111 765047.222 +7166 400347.222 879580.556 +7167 400361.111 746183.333 +7168 400361.111 755141.667 +7169 400363.889 889569.444 +7170 400375.000 1079125.000 +7171 400377.778 763058.333 +7172 400391.667 764311.111 +7173 400391.667 910691.667 +7174 400394.444 842033.333 +7175 400411.111 868744.444 +7176 400419.444 754766.667 +7177 400422.222 876386.111 +7178 400427.778 914975.000 +7179 400444.444 1117313.889 +7180 400455.556 860086.111 +7181 400455.556 878305.556 +7182 400466.667 941355.556 +7183 400469.444 796547.222 +7184 400480.556 901550.000 +7185 400483.333 864691.667 +7186 400491.667 1015325.000 +7187 400497.222 849397.222 +7188 400502.778 1050494.444 +7189 400505.556 749538.889 +7190 400505.556 775205.556 +7191 400513.889 874333.333 +7192 400513.889 945238.889 +7193 400525.000 806286.111 +7194 400530.556 1116727.778 +7195 400547.222 882516.667 +7196 400552.778 840261.111 +7197 400569.444 765525.000 +7198 400580.556 824013.889 +7199 400588.889 1063883.333 +7200 400608.333 956016.667 +7201 400613.889 876380.556 +7202 400630.556 767041.667 +7203 400638.889 807211.111 +7204 400650.000 877019.444 +7205 400652.778 749194.444 +7206 400652.778 800238.889 +7207 400675.000 745311.111 +7208 400680.556 749011.111 +7209 400680.556 825197.222 +7210 400683.333 858483.333 +7211 400691.667 807838.889 +7212 400697.222 753166.667 +7213 400705.556 807611.111 +7214 400711.111 748652.778 +7215 400716.667 740547.222 +7216 400736.111 1046425.000 +7217 400755.556 798983.333 +7218 400758.333 1022227.778 +7219 400763.889 829438.889 +7220 400788.889 936163.889 +7221 400791.667 753019.444 +7222 400794.444 798658.333 +7223 400811.111 750900.000 +7224 400819.444 830252.778 +7225 400830.556 897380.556 +7226 400833.333 798483.333 +7227 400847.222 1048125.000 +7228 400847.222 1049388.889 +7229 400861.111 918130.556 +7230 400861.111 1059388.889 +7231 400869.444 797508.333 +7232 400875.000 805705.556 +7233 400875.000 870597.222 +7234 400877.778 1088097.222 +7235 400883.333 912836.111 +7236 400886.111 829166.667 +7237 400888.889 985191.667 +7238 400911.111 740483.333 +7239 400911.111 795877.778 +7240 400930.556 830180.556 +7241 400941.667 759116.667 +7242 400952.778 876475.000 +7243 400958.333 751255.556 +7244 400958.333 807247.222 +7245 400961.111 989522.222 +7246 400975.000 993616.667 +7247 400977.778 742180.556 +7248 400991.667 1049366.667 +7249 401002.778 795872.222 +7250 401002.778 798408.333 +7251 401002.778 895908.333 +7252 401005.556 748522.222 +7253 401011.111 800675.000 +7254 401016.667 760855.556 +7255 401027.778 846330.556 +7256 401036.111 798694.444 +7257 401052.778 856802.778 +7258 401072.222 808413.889 +7259 401075.000 832675.000 +7260 401077.778 740569.444 +7261 401083.333 837525.000 +7262 401083.333 961541.667 +7263 401083.333 1045194.444 +7264 401091.667 910175.000 +7265 401097.222 765036.111 +7266 401100.000 867719.444 +7267 401105.556 882072.222 +7268 401108.333 767161.111 +7269 401108.333 770352.778 +7270 401119.444 800175.000 +7271 401125.000 855969.444 +7272 401125.000 1049361.111 +7273 401130.556 872625.000 +7274 401138.889 878730.556 +7275 401138.889 879561.111 +7276 401150.000 1116541.667 +7277 401161.111 877783.333 +7278 401163.889 882433.333 +7279 401166.667 800086.111 +7280 401172.222 821194.444 +7281 401172.222 843538.889 +7282 401177.778 804105.556 +7283 401183.333 771902.778 +7284 401188.889 788183.333 +7285 401202.778 1238222.222 +7286 401211.111 887452.778 +7287 401211.111 905630.556 +7288 401213.889 753402.778 +7289 401213.889 820108.333 +7290 401222.222 886452.778 +7291 401222.222 966622.222 +7292 401222.222 1027247.222 +7293 401236.111 876533.333 +7294 401238.889 860133.333 +7295 401244.444 798800.000 +7296 401244.444 876300.000 +7297 401250.000 798666.667 +7298 401250.000 916250.000 +7299 401261.111 740497.222 +7300 401261.111 829291.667 +7301 401291.667 798683.333 +7302 401291.667 994550.000 +7303 401300.000 765708.333 +7304 401302.778 755152.778 +7305 401302.778 1115777.778 +7306 401311.111 952313.889 +7307 401313.889 750677.778 +7308 401319.444 740350.000 +7309 401322.222 844308.333 +7310 401350.000 862205.556 +7311 401363.889 747291.667 +7312 401372.222 971802.778 +7313 401375.000 998291.667 +7314 401377.778 798983.333 +7315 401391.667 748150.000 +7316 401394.444 966588.889 +7317 401408.333 977225.000 +7318 401411.111 806883.333 +7319 401416.667 873947.222 +7320 401447.222 842425.000 +7321 401461.111 747122.222 +7322 401469.444 789122.222 +7323 401483.333 798880.556 +7324 401483.333 893647.222 +7325 401488.889 1029625.000 +7326 401494.444 810663.889 +7327 401497.222 754022.222 +7328 401497.222 771286.111 +7329 401500.000 742138.889 +7330 401502.778 740313.889 +7331 401511.111 762513.889 +7332 401511.111 799077.778 +7333 401519.444 749169.444 +7334 401527.778 766030.556 +7335 401533.333 740286.111 +7336 401536.111 826852.778 +7337 401536.111 889644.444 +7338 401538.889 797413.889 +7339 401544.444 752219.444 +7340 401544.444 807105.556 +7341 401566.667 758330.556 +7342 401566.667 762025.000 +7343 401572.222 760508.333 +7344 401572.222 763072.222 +7345 401597.222 790666.667 +7346 401605.556 1032138.889 +7347 401613.889 790291.667 +7348 401633.333 763952.778 +7349 401633.333 1104022.222 +7350 401638.889 959447.222 +7351 401652.778 1116100.000 +7352 401663.889 975855.556 +7353 401666.667 807000.000 +7354 401669.444 749180.556 +7355 401672.222 1051013.889 +7356 401675.000 921725.000 +7357 401697.222 805938.889 +7358 401708.333 740277.778 +7359 401719.444 849813.889 +7360 401733.333 798577.778 +7361 401736.111 802377.778 +7362 401736.111 854941.667 +7363 401741.667 751072.222 +7364 401744.444 749230.556 +7365 401755.556 1010125.000 +7366 401758.333 860216.667 +7367 401766.667 755480.556 +7368 401777.778 745838.889 +7369 401783.333 740222.222 +7370 401783.333 751288.889 +7371 401786.111 834355.556 +7372 401786.111 1222347.222 +7373 401794.444 1184725.000 +7374 401797.222 761791.667 +7375 401808.333 754294.444 +7376 401825.000 806913.889 +7377 401830.556 798244.444 +7378 401841.667 755383.333 +7379 401855.556 754519.444 +7380 401872.222 767302.778 +7381 401877.778 851275.000 +7382 401880.556 869038.889 +7383 401888.889 852041.667 +7384 401905.556 747027.778 +7385 401916.667 852688.889 +7386 401922.222 740163.889 +7387 401933.333 853863.889 +7388 401933.333 863605.556 +7389 401944.444 1100611.111 +7390 401947.222 925830.556 +7391 401950.000 779833.333 +7392 401950.000 866672.222 +7393 401952.778 884041.667 +7394 401963.889 762013.889 +7395 401963.889 807752.778 +7396 401988.889 754766.667 +7397 401994.444 848052.778 +7398 402000.000 740283.333 +7399 402013.889 771891.667 +7400 402016.667 980675.000 +7401 402019.444 848091.667 +7402 402019.444 1006252.778 +7403 402022.222 740125.000 +7404 402022.222 896980.556 +7405 402022.222 931250.000 +7406 402030.556 799263.889 +7407 402052.778 742141.667 +7408 402055.556 805569.444 +7409 402066.667 751000.000 +7410 402077.778 750730.556 +7411 402077.778 799472.222 +7412 402088.889 789838.889 +7413 402097.222 797672.222 +7414 402105.556 812663.889 +7415 402108.333 752786.111 +7416 402108.333 767913.889 +7417 402113.889 761236.111 +7418 402113.889 885061.111 +7419 402144.444 846369.444 +7420 402150.000 750111.111 +7421 402150.000 1048222.222 +7422 402152.778 782447.222 +7423 402152.778 860263.889 +7424 402169.444 747433.333 +7425 402177.778 945380.556 +7426 402186.111 808730.556 +7427 402191.667 796097.222 +7428 402200.000 744736.111 +7429 402202.778 740125.000 +7430 402202.778 889619.444 +7431 402225.000 844844.444 +7432 402227.778 857788.889 +7433 402230.556 835575.000 +7434 402233.333 769538.889 +7435 402247.222 1052708.333 +7436 402263.889 806516.667 +7437 402269.444 789366.667 +7438 402275.000 903594.444 +7439 402297.222 1008380.556 +7440 402300.000 909500.000 +7441 402305.556 1040722.222 +7442 402313.889 756344.444 +7443 402319.444 927083.333 +7444 402322.222 768850.000 +7445 402330.556 761375.000 +7446 402333.333 740161.111 +7447 402333.333 910625.000 +7448 402338.889 1116577.778 +7449 402344.444 1004169.444 +7450 402352.778 768416.667 +7451 402361.111 740011.111 +7452 402388.889 891230.556 +7453 402394.444 756513.889 +7454 402397.222 769202.778 +7455 402397.222 788352.778 +7456 402402.778 795769.444 +7457 402411.111 760566.667 +7458 402411.111 768944.444 +7459 402413.889 752841.667 +7460 402416.667 881841.667 +7461 402419.444 743016.667 +7462 402427.778 778933.333 +7463 402430.556 740011.111 +7464 402430.556 792377.778 +7465 402433.333 886425.000 +7466 402436.111 788491.667 +7467 402450.000 755955.556 +7468 402452.778 756500.000 +7469 402455.556 748463.889 +7470 402463.889 802116.667 +7471 402469.444 867250.000 +7472 402472.222 796775.000 +7473 402483.333 996330.556 +7474 402497.222 788491.667 +7475 402502.778 1037994.444 +7476 402525.000 756777.778 +7477 402561.111 754641.667 +7478 402588.889 768322.222 +7479 402588.889 1036233.333 +7480 402594.444 892333.333 +7481 402600.000 742741.667 +7482 402625.000 801875.000 +7483 402627.778 769141.667 +7484 402627.778 856758.333 +7485 402638.889 744916.667 +7486 402644.444 758044.444 +7487 402647.222 806263.889 +7488 402652.778 767086.111 +7489 402680.556 967466.667 +7490 402686.111 929530.556 +7491 402691.667 798900.000 +7492 402694.444 745236.111 +7493 402694.444 857280.556 +7494 402700.000 873866.667 +7495 402708.333 798994.444 +7496 402708.333 807816.667 +7497 402719.444 806097.222 +7498 402719.444 818597.222 +7499 402722.222 816061.111 +7500 402727.778 809969.444 +7501 402736.111 764063.889 +7502 402736.111 768847.222 +7503 402750.000 769158.333 +7504 402750.000 1069577.778 +7505 402752.778 768483.333 +7506 402752.778 817511.111 +7507 402761.111 748494.444 +7508 402769.444 858419.444 +7509 402783.333 795450.000 +7510 402794.444 753875.000 +7511 402794.444 865108.333 +7512 402808.333 742516.667 +7513 402819.444 1001652.778 +7514 402819.444 1047772.222 +7515 402822.222 860411.111 +7516 402841.667 841555.556 +7517 402858.333 759847.222 +7518 402858.333 766505.556 +7519 402872.222 788897.222 +7520 402883.333 752094.444 +7521 402883.333 872938.889 +7522 402891.667 850288.889 +7523 402902.778 740180.556 +7524 402908.333 788691.667 +7525 402911.111 795472.222 +7526 402916.667 793894.444 +7527 402916.667 909188.889 +7528 402922.222 798819.444 +7529 402941.667 872488.889 +7530 402941.667 904277.778 +7531 402961.111 740513.889 +7532 402966.667 784500.000 +7533 402969.444 1116938.889 +7534 402972.222 743586.111 +7535 402986.111 830680.556 +7536 402986.111 894850.000 +7537 402988.889 751813.889 +7538 402988.889 788925.000 +7539 402991.667 839688.889 +7540 402994.444 1099880.556 +7541 403000.000 900608.333 +7542 403008.333 852419.444 +7543 403013.889 795391.667 +7544 403030.556 969886.111 +7545 403041.667 739927.778 +7546 403041.667 741008.333 +7547 403041.667 999000.000 +7548 403044.444 826963.889 +7549 403050.000 878005.556 +7550 403055.556 896027.778 +7551 403058.333 880211.111 +7552 403063.889 1212308.333 +7553 403077.778 759658.333 +7554 403083.333 881558.333 +7555 403083.333 1050805.556 +7556 403088.889 765936.111 +7557 403105.556 759397.222 +7558 403105.556 789388.889 +7559 403111.111 783244.444 +7560 403116.667 753255.556 +7561 403119.444 839158.333 +7562 403133.333 889736.111 +7563 403138.889 855005.556 +7564 403144.444 891697.222 +7565 403147.222 883500.000 +7566 403155.556 798313.889 +7567 403161.111 745141.667 +7568 403172.222 746202.778 +7569 403180.556 740155.556 +7570 403200.000 756105.556 +7571 403211.111 793797.222 +7572 403216.667 806100.000 +7573 403219.444 753283.333 +7574 403230.556 793127.778 +7575 403244.444 797013.889 +7576 403247.222 798925.000 +7577 403247.222 805777.778 +7578 403252.778 809013.889 +7579 403272.222 760113.889 +7580 403275.000 805961.111 +7581 403277.778 906069.444 +7582 403280.556 758911.111 +7583 403280.556 796155.556 +7584 403283.333 747911.111 +7585 403288.889 796413.889 +7586 403294.444 759655.556 +7587 403294.444 765155.556 +7588 403294.444 1048547.222 +7589 403300.000 760808.333 +7590 403302.778 739819.444 +7591 403325.000 984483.333 +7592 403336.111 756377.778 +7593 403336.111 759477.778 +7594 403352.778 820069.444 +7595 403355.556 759272.222 +7596 403358.333 783911.111 +7597 403358.333 798700.000 +7598 403366.667 740475.000 +7599 403366.667 754694.444 +7600 403369.444 1049116.667 +7601 403372.222 764758.333 +7602 403375.000 759800.000 +7603 403375.000 797136.111 +7604 403386.111 856444.444 +7605 403386.111 953930.556 +7606 403391.667 767258.333 +7607 403402.778 853508.333 +7608 403408.333 764116.667 +7609 403433.333 1117200.000 +7610 403444.444 866652.778 +7611 403452.778 756333.333 +7612 403455.556 763902.778 +7613 403461.111 742883.333 +7614 403461.111 948722.222 +7615 403469.444 925688.889 +7616 403477.778 798644.444 +7617 403486.111 746594.444 +7618 403486.111 788838.889 +7619 403488.889 851500.000 +7620 403488.889 1047013.889 +7621 403494.444 762136.111 +7622 403505.556 798863.889 +7623 403513.889 843738.889 +7624 403513.889 903244.444 +7625 403516.667 761347.222 +7626 403519.444 887641.667 +7627 403525.000 744405.556 +7628 403538.889 753052.778 +7629 403552.778 800497.222 +7630 403561.111 801102.778 +7631 403583.333 814344.444 +7632 403591.667 914344.444 +7633 403605.556 740386.111 +7634 403611.111 837597.222 +7635 403613.889 739744.444 +7636 403616.667 761844.444 +7637 403641.667 749516.667 +7638 403641.667 1117377.778 +7639 403647.222 800225.000 +7640 403650.000 804141.667 +7641 403658.333 749433.333 +7642 403666.667 961958.333 +7643 403672.222 769313.889 +7644 403672.222 787916.667 +7645 403677.778 810055.556 +7646 403697.222 806341.667 +7647 403705.556 799750.000 +7648 403708.333 802350.000 +7649 403716.667 752019.444 +7650 403719.444 739994.444 +7651 403719.444 752930.556 +7652 403722.222 979711.111 +7653 403725.000 895472.222 +7654 403733.333 756294.444 +7655 403741.667 867688.889 +7656 403752.778 807038.889 +7657 403755.556 823972.222 +7658 403763.889 1046916.667 +7659 403766.667 744250.000 +7660 403769.444 1117950.000 +7661 403772.222 1055211.111 +7662 403780.556 939366.667 +7663 403788.889 745469.444 +7664 403791.667 876686.111 +7665 403794.444 860886.111 +7666 403802.778 790755.556 +7667 403813.889 798600.000 +7668 403816.667 824925.000 +7669 403819.444 803930.556 +7670 403830.556 798066.667 +7671 403844.444 778825.000 +7672 403855.556 797591.667 +7673 403858.333 1222797.222 +7674 403875.000 1045611.111 +7675 403880.556 759183.333 +7676 403886.111 786725.000 +7677 403886.111 854994.444 +7678 403908.333 754925.000 +7679 403908.333 798102.778 +7680 403916.667 743988.889 +7681 403916.667 1118500.000 +7682 403922.222 799002.778 +7683 403922.222 800911.111 +7684 403927.778 958386.111 +7685 403930.556 813466.667 +7686 403930.556 843761.111 +7687 403930.556 901547.222 +7688 403933.333 813338.889 +7689 403933.333 824858.333 +7690 403936.111 779413.889 +7691 403936.111 797863.889 +7692 403936.111 969225.000 +7693 403938.889 799122.222 +7694 403944.444 841727.778 +7695 403947.222 814072.222 +7696 403955.556 798388.889 +7697 403958.333 800333.333 +7698 403958.333 810850.000 +7699 403963.889 913388.889 +7700 403969.444 791519.444 +7701 403969.444 888705.556 +7702 403972.222 913847.222 +7703 403977.778 1050744.444 +7704 403980.556 770233.333 +7705 403983.333 798900.000 +7706 403986.111 794222.222 +7707 403988.889 798411.111 +7708 403997.222 746347.222 +7709 404008.333 935802.778 +7710 404019.444 835452.778 +7711 404022.222 755875.000 +7712 404030.556 797783.333 +7713 404036.111 739919.444 +7714 404058.333 798252.778 +7715 404058.333 799122.222 +7716 404063.889 755022.222 +7717 404075.000 896427.778 +7718 404077.778 740347.222 +7719 404077.778 749786.111 +7720 404086.111 759219.444 +7721 404086.111 798391.667 +7722 404086.111 800836.111 +7723 404088.889 829555.556 +7724 404091.667 925675.000 +7725 404105.556 753786.111 +7726 404125.000 798794.444 +7727 404127.778 847763.889 +7728 404130.556 795705.556 +7729 404141.667 790202.778 +7730 404141.667 799880.556 +7731 404141.667 822411.111 +7732 404147.222 742300.000 +7733 404147.222 743658.333 +7734 404152.778 856505.556 +7735 404155.556 741913.889 +7736 404163.889 1206519.444 +7737 404166.667 868750.000 +7738 404169.444 865947.222 +7739 404172.222 798652.778 +7740 404175.000 862713.889 +7741 404183.333 1013708.333 +7742 404188.889 805897.222 +7743 404197.222 798502.778 +7744 404202.778 917194.444 +7745 404208.333 745611.111 +7746 404208.333 894144.444 +7747 404233.333 784341.667 +7748 404233.333 1047086.111 +7749 404236.111 798830.556 +7750 404255.556 800941.667 +7751 404258.333 786202.778 +7752 404258.333 869080.556 +7753 404258.333 897791.667 +7754 404263.889 832969.444 +7755 404263.889 907925.000 +7756 404266.667 885261.111 +7757 404272.222 783891.667 +7758 404272.222 861255.556 +7759 404311.111 792611.111 +7760 404316.667 981055.556 +7761 404330.556 742000.000 +7762 404333.333 807719.444 +7763 404336.111 893130.556 +7764 404338.889 830738.889 +7765 404344.444 800825.000 +7766 404344.444 849777.778 +7767 404347.222 892177.778 +7768 404350.000 800663.889 +7769 404369.444 843797.222 +7770 404377.778 813733.333 +7771 404383.333 798433.333 +7772 404400.000 816991.667 +7773 404402.778 953775.000 +7774 404402.778 993694.444 +7775 404405.556 799961.111 +7776 404416.667 741302.778 +7777 404416.667 753419.444 +7778 404416.667 798822.222 +7779 404455.556 950658.333 +7780 404461.111 800677.778 +7781 404463.889 741786.111 +7782 404463.889 743863.889 +7783 404469.444 759666.667 +7784 404483.333 1222966.667 +7785 404502.778 831886.111 +7786 404511.111 853700.000 +7787 404513.889 743083.333 +7788 404533.333 1117772.222 +7789 404538.889 758183.333 +7790 404555.556 1095280.556 +7791 404566.667 742469.444 +7792 404577.778 921711.111 +7793 404591.667 743613.889 +7794 404591.667 906716.667 +7795 404591.667 963772.222 +7796 404597.222 785919.444 +7797 404597.222 795233.333 +7798 404602.778 880952.778 +7799 404608.333 799511.111 +7800 404613.889 836700.000 +7801 404641.667 806011.111 +7802 404650.000 878963.889 +7803 404655.556 800658.333 +7804 404672.222 876683.333 +7805 404677.778 841805.556 +7806 404680.556 769322.222 +7807 404700.000 753208.333 +7808 404711.111 838927.778 +7809 404741.667 957333.333 +7810 404755.556 854944.444 +7811 404769.444 930030.556 +7812 404772.222 1095861.111 +7813 404775.000 1049008.333 +7814 404777.778 742911.111 +7815 404780.556 785411.111 +7816 404780.556 859666.667 +7817 404783.333 991263.889 +7818 404791.667 792000.000 +7819 404797.222 846283.333 +7820 404797.222 856277.778 +7821 404800.000 799786.111 +7822 404802.778 863947.222 +7823 404813.889 789188.889 +7824 404813.889 969602.778 +7825 404819.444 757580.556 +7826 404822.222 785519.444 +7827 404841.667 889936.111 +7828 404847.222 780105.556 +7829 404850.000 787250.000 +7830 404850.000 1068311.111 +7831 404861.111 744522.222 +7832 404863.889 794516.667 +7833 404863.889 861336.111 +7834 404872.222 856130.556 +7835 404875.000 944108.333 +7836 404897.222 814458.333 +7837 404897.222 1119380.556 +7838 404905.556 870963.889 +7839 404913.889 799050.000 +7840 404919.444 1072569.444 +7841 404933.333 798608.333 +7842 404936.111 843147.222 +7843 404944.444 896516.667 +7844 404950.000 819847.222 +7845 404966.667 806069.444 +7846 404986.111 989475.000 +7847 404991.667 743994.444 +7848 405005.556 828936.111 +7849 405008.333 759702.778 +7850 405008.333 800677.778 +7851 405030.556 786305.556 +7852 405033.333 757016.667 +7853 405041.667 799491.667 +7854 405063.889 798433.333 +7855 405066.667 742658.333 +7856 405066.667 837480.556 +7857 405083.333 858255.556 +7858 405083.333 868416.667 +7859 405100.000 800947.222 +7860 405108.333 756033.333 +7861 405113.889 753908.333 +7862 405122.222 748597.222 +7863 405122.222 1114736.111 +7864 405141.667 889905.556 +7865 405152.778 1075458.333 +7866 405158.333 755555.556 +7867 405169.444 1016427.778 +7868 405183.333 801669.444 +7869 405186.111 783950.000 +7870 405194.444 808841.667 +7871 405197.222 872477.778 +7872 405205.556 814741.667 +7873 405208.333 925277.778 +7874 405211.111 873783.333 +7875 405216.667 980550.000 +7876 405219.444 1119383.333 +7877 405222.222 800344.444 +7878 405247.222 1118630.556 +7879 405261.111 750619.444 +7880 405266.667 996333.333 +7881 405269.444 975955.556 +7882 405275.000 894925.000 +7883 405288.889 794616.667 +7884 405294.444 891772.222 +7885 405302.778 1047108.333 +7886 405308.333 1122975.000 +7887 405316.667 801691.667 +7888 405322.222 914147.222 +7889 405344.444 835205.556 +7890 405363.889 801847.222 +7891 405369.444 893575.000 +7892 405394.444 754972.222 +7893 405394.444 769611.111 +7894 405408.333 745880.556 +7895 405416.667 797994.444 +7896 405430.556 743636.111 +7897 405433.333 787880.556 +7898 405433.333 791625.000 +7899 405488.889 768122.222 +7900 405488.889 784294.444 +7901 405488.889 845702.778 +7902 405491.667 828275.000 +7903 405500.000 913847.222 +7904 405508.333 948191.667 +7905 405511.111 801930.556 +7906 405527.778 905061.111 +7907 405530.556 797575.000 +7908 405533.333 745319.444 +7909 405538.889 852775.000 +7910 405544.444 819180.556 +7911 405544.444 1231819.444 +7912 405555.556 759822.222 +7913 405561.111 908658.333 +7914 405575.000 828625.000 +7915 405580.556 900350.000 +7916 405588.889 791513.889 +7917 405622.222 1119288.889 +7918 405630.556 802086.111 +7919 405638.889 888988.889 +7920 405644.444 871069.444 +7921 405647.222 878930.556 +7922 405666.667 767008.333 +7923 405669.444 886163.889 +7924 405675.000 882477.778 +7925 405675.000 896405.556 +7926 405677.778 841936.111 +7927 405683.333 745388.889 +7928 405686.111 750950.000 +7929 405694.444 746333.333 +7930 405694.444 774030.556 +7931 405697.222 773972.222 +7932 405697.222 797650.000 +7933 405716.667 807266.667 +7934 405719.444 857691.667 +7935 405725.000 744930.556 +7936 405725.000 898133.333 +7937 405727.778 810858.333 +7938 405733.333 766916.667 +7939 405736.111 802358.333 +7940 405741.667 746102.778 +7941 405747.222 769894.444 +7942 405763.889 1242627.778 +7943 405772.222 742286.111 +7944 405788.889 861902.778 +7945 405791.667 744119.444 +7946 405794.444 753411.111 +7947 405800.000 797669.444 +7948 405813.889 795666.667 +7949 405825.000 1047313.889 +7950 405833.333 909691.667 +7951 405844.444 1023019.444 +7952 405852.778 1050838.889 +7953 405861.111 795316.667 +7954 405861.111 983880.556 +7955 405866.667 1223905.556 +7956 405875.000 866750.000 +7957 405883.333 736583.333 +7958 405883.333 824250.000 +7959 405886.111 831286.111 +7960 405888.889 737294.444 +7961 405891.667 744722.222 +7962 405891.667 765527.778 +7963 405891.667 802252.778 +7964 405900.000 985058.333 +7965 405902.778 998605.556 +7966 405916.667 1118833.333 +7967 405941.667 751947.222 +7968 405947.222 815269.444 +7969 405961.111 795558.333 +7970 405969.444 880380.556 +7971 405980.556 795613.889 +7972 405983.333 760936.111 +7973 405983.333 1241561.111 +7974 406000.000 1124636.111 +7975 406005.556 839752.778 +7976 406011.111 813613.889 +7977 406013.889 753955.556 +7978 406013.889 797600.000 +7979 406027.778 787088.889 +7980 406027.778 795650.000 +7981 406027.778 806491.667 +7982 406027.778 868672.222 +7983 406033.333 783250.000 +7984 406041.667 736558.333 +7985 406044.444 956575.000 +7986 406050.000 777258.333 +7987 406055.556 978588.889 +7988 406058.333 889872.222 +7989 406080.556 742780.556 +7990 406080.556 797413.889 +7991 406086.111 865400.000 +7992 406097.222 1119383.333 +7993 406111.111 1118991.667 +7994 406113.889 798372.222 +7995 406116.667 767188.889 +7996 406127.778 894591.667 +7997 406130.556 805630.556 +7998 406150.000 896222.222 +7999 406155.556 737300.000 +8000 406166.667 873208.333 +8001 406172.222 855047.222 +8002 406175.000 896002.778 +8003 406183.333 806044.444 +8004 406186.111 805775.000 +8005 406188.889 980969.444 +8006 406197.222 1118094.444 +8007 406200.000 825108.333 +8008 406200.000 966288.889 +8009 406211.111 904619.444 +8010 406211.111 986572.222 +8011 406213.889 791527.778 +8012 406219.444 742450.000 +8013 406225.000 808380.556 +8014 406227.778 737247.222 +8015 406227.778 939338.889 +8016 406238.889 737088.889 +8017 406255.556 1032072.222 +8018 406263.889 753461.111 +8019 406266.667 761930.556 +8020 406283.333 763875.000 +8021 406283.333 876961.111 +8022 406297.222 892747.222 +8023 406297.222 913150.000 +8024 406300.000 744277.778 +8025 406300.000 893325.000 +8026 406300.000 1005152.778 +8027 406305.556 761713.889 +8028 406308.333 929244.444 +8029 406319.444 737130.556 +8030 406336.111 744077.778 +8031 406350.000 802283.333 +8032 406352.778 822333.333 +8033 406355.556 1047547.222 +8034 406358.333 782961.111 +8035 406361.111 736819.444 +8036 406361.111 911672.222 +8037 406363.889 829691.667 +8038 406366.667 791444.444 +8039 406366.667 802402.778 +8040 406369.444 975850.000 +8041 406377.778 744513.889 +8042 406386.111 736405.556 +8043 406386.111 775688.889 +8044 406386.111 1119380.556 +8045 406402.778 917427.778 +8046 406408.333 743111.111 +8047 406408.333 743838.889 +8048 406408.333 748816.667 +8049 406411.111 1026263.889 +8050 406413.889 887833.333 +8051 406416.667 748363.889 +8052 406419.444 736700.000 +8053 406422.222 798511.111 +8054 406425.000 742858.333 +8055 406427.778 787730.556 +8056 406427.778 915644.444 +8057 406430.556 736961.111 +8058 406430.556 775808.333 +8059 406430.556 1112800.000 +8060 406441.667 974500.000 +8061 406444.444 804163.889 +8062 406458.333 805980.556 +8063 406461.111 1114972.222 +8064 406469.444 836097.222 +8065 406472.222 895911.111 +8066 406472.222 971130.556 +8067 406500.000 814522.222 +8068 406502.778 896519.444 +8069 406511.111 812991.667 +8070 406530.556 815811.111 +8071 406536.111 972858.333 +8072 406538.889 750869.444 +8073 406541.667 841508.333 +8074 406547.222 736722.222 +8075 406547.222 754750.000 +8076 406547.222 761011.111 +8077 406552.778 743902.778 +8078 406572.222 961861.111 +8079 406575.000 735836.111 +8080 406577.778 849519.444 +8081 406583.333 743000.000 +8082 406586.111 736416.667 +8083 406588.889 743477.778 +8084 406594.444 743233.333 +8085 406597.222 754772.222 +8086 406597.222 802394.444 +8087 406600.000 1119955.556 +8088 406608.333 862419.444 +8089 406625.000 787802.778 +8090 406627.778 735519.444 +8091 406630.556 868694.444 +8092 406638.889 742111.111 +8093 406638.889 775961.111 +8094 406641.667 737088.889 +8095 406641.667 742636.111 +8096 406641.667 904347.222 +8097 406644.444 742647.222 +8098 406658.333 734886.111 +8099 406661.111 806233.333 +8100 406661.111 895800.000 +8101 406669.444 751577.778 +8102 406669.444 947211.111 +8103 406669.444 1118872.222 +8104 406672.222 813550.000 +8105 406677.778 1119380.556 +8106 406686.111 735275.000 +8107 406686.111 741147.222 +8108 406688.889 1118238.889 +8109 406700.000 754958.333 +8110 406705.556 782388.889 +8111 406722.222 743577.778 +8112 406733.333 805766.667 +8113 406733.333 845188.889 +8114 406733.333 921619.444 +8115 406738.889 857213.889 +8116 406763.889 742911.111 +8117 406766.667 818705.556 +8118 406766.667 958588.889 +8119 406786.111 735894.444 +8120 406786.111 752372.222 +8121 406788.889 734175.000 +8122 406788.889 736744.444 +8123 406788.889 910727.778 +8124 406791.667 804950.000 +8125 406800.000 965061.111 +8126 406800.000 1223508.333 +8127 406802.778 734555.556 +8128 406805.556 734747.222 +8129 406805.556 1223700.000 +8130 406813.889 734002.778 +8131 406813.889 820219.444 +8132 406825.000 931208.333 +8133 406827.778 854272.222 +8134 406833.333 744430.556 +8135 406836.111 735105.556 +8136 406841.667 746361.111 +8137 406844.444 803291.667 +8138 406844.444 896800.000 +8139 406850.000 737022.222 +8140 406855.556 761958.333 +8141 406858.333 926772.222 +8142 406861.111 754972.222 +8143 406866.667 733738.889 +8144 406866.667 841377.778 +8145 406872.222 802716.667 +8146 406875.000 802541.667 +8147 406911.111 735636.111 +8148 406913.889 735338.889 +8149 406916.667 811813.889 +8150 406916.667 897950.000 +8151 406925.000 896277.778 +8152 406927.778 837855.556 +8153 406933.333 735080.556 +8154 406936.111 751905.556 +8155 406936.111 895888.889 +8156 406952.778 803050.000 +8157 406955.556 733261.111 +8158 406958.333 800119.444 +8159 406963.889 761691.667 +8160 406966.667 749411.111 +8161 406975.000 734255.556 +8162 406983.333 744019.444 +8163 406994.444 990811.111 +8164 407000.000 802683.333 +8165 407000.000 1118097.222 +8166 407002.778 735933.333 +8167 407008.333 734625.000 +8168 407008.333 737133.333 +8169 407011.111 742305.556 +8170 407022.222 802866.667 +8171 407036.111 894072.222 +8172 407038.889 1050080.556 +8173 407044.444 963872.222 +8174 407047.222 736505.556 +8175 407061.111 733066.667 +8176 407061.111 838438.889 +8177 407063.889 839213.889 +8178 407063.889 933650.000 +8179 407069.444 749563.889 +8180 407069.444 815983.333 +8181 407072.222 736763.889 +8182 407086.111 732816.667 +8183 407088.889 843536.111 +8184 407091.667 1121008.333 +8185 407105.556 902661.111 +8186 407138.889 775908.333 +8187 407138.889 1161030.556 +8188 407141.667 733819.444 +8189 407141.667 737005.556 +8190 407141.667 740063.889 +8191 407147.222 942350.000 +8192 407150.000 880061.111 +8193 407163.889 733222.222 +8194 407166.667 914500.000 +8195 407172.222 734841.667 +8196 407180.556 733547.222 +8197 407186.111 745697.222 +8198 407188.889 1118875.000 +8199 407191.667 736888.889 +8200 407194.444 748361.111 +8201 407194.444 761161.111 +8202 407194.444 993716.667 +8203 407205.556 734405.556 +8204 407208.333 740177.778 +8205 407213.889 892727.778 +8206 407219.444 954805.556 +8207 407236.111 737052.778 +8208 407241.667 737155.556 +8209 407244.444 815222.222 +8210 407250.000 732458.333 +8211 407255.556 753944.444 +8212 407258.333 735147.222 +8213 407263.889 788069.444 +8214 407266.667 736347.222 +8215 407277.778 730980.556 +8216 407280.556 740780.556 +8217 407294.444 760858.333 +8218 407297.222 732108.333 +8219 407297.222 811055.556 +8220 407302.778 803102.778 +8221 407302.778 919622.222 +8222 407311.111 948994.444 +8223 407311.111 1229408.333 +8224 407316.667 1062830.556 +8225 407319.444 731861.111 +8226 407322.222 906644.444 +8227 407336.111 778858.333 +8228 407336.111 827900.000 +8229 407350.000 736883.333 +8230 407355.556 741727.778 +8231 407358.333 730825.000 +8232 407361.111 732630.556 +8233 407372.222 1140366.667 +8234 407383.333 730511.111 +8235 407386.111 851716.667 +8236 407386.111 995372.222 +8237 407391.667 890163.889 +8238 407394.444 743044.444 +8239 407394.444 803294.444 +8240 407397.222 937475.000 +8241 407402.778 753100.000 +8242 407408.333 736630.556 +8243 407408.333 743841.667 +8244 407408.333 752575.000 +8245 407413.889 743600.000 +8246 407416.667 887197.222 +8247 407419.444 950380.556 +8248 407430.556 731930.556 +8249 407433.333 888813.889 +8250 407438.889 740327.778 +8251 407441.667 734825.000 +8252 407452.778 867647.222 +8253 407463.889 741566.667 +8254 407469.444 909038.889 +8255 407472.222 731702.778 +8256 407472.222 885147.222 +8257 407472.222 895738.889 +8258 407477.778 785347.222 +8259 407483.333 741622.222 +8260 407483.333 756122.222 +8261 407483.333 956472.222 +8262 407483.333 988444.444 +8263 407486.111 847911.111 +8264 407491.667 736411.111 +8265 407494.444 868716.667 +8266 407502.778 786711.111 +8267 407516.667 763363.889 +8268 407516.667 818394.444 +8269 407516.667 924147.222 +8270 407519.444 803194.444 +8271 407519.444 884111.111 +8272 407525.000 736108.333 +8273 407536.111 860688.889 +8274 407536.111 882919.444 +8275 407538.889 733608.333 +8276 407538.889 752625.000 +8277 407538.889 798102.778 +8278 407541.667 755991.667 +8279 407544.444 863566.667 +8280 407552.778 736672.222 +8281 407563.889 736452.778 +8282 407566.667 881911.111 +8283 407569.444 729397.222 +8284 407569.444 933186.111 +8285 407580.556 870416.667 +8286 407583.333 736352.778 +8287 407583.333 825155.556 +8288 407588.889 735700.000 +8289 407594.444 825902.778 +8290 407597.222 744175.000 +8291 407608.333 871508.333 +8292 407608.333 1118902.778 +8293 407616.667 733297.222 +8294 407625.000 734536.111 +8295 407630.556 769397.222 +8296 407633.333 872936.111 +8297 407655.556 730155.556 +8298 407655.556 953719.444 +8299 407663.889 894677.778 +8300 407666.667 728525.000 +8301 407666.667 879922.222 +8302 407669.444 729966.667 +8303 407672.222 742052.778 +8304 407683.333 735255.556 +8305 407683.333 741458.333 +8306 407691.667 731155.556 +8307 407691.667 800630.556 +8308 407691.667 875638.889 +8309 407694.444 740208.333 +8310 407694.444 838227.778 +8311 407700.000 1241416.667 +8312 407702.778 874452.778 +8313 407705.556 737180.556 +8314 407705.556 742330.556 +8315 407713.889 846155.556 +8316 407719.444 983691.667 +8317 407733.333 736436.111 +8318 407738.889 742738.889 +8319 407741.667 729433.333 +8320 407744.444 785536.111 +8321 407744.444 970502.778 +8322 407755.556 777927.778 +8323 407758.333 746011.111 +8324 407761.111 877363.889 +8325 407763.889 734677.778 +8326 407775.000 929436.111 +8327 407777.778 899663.889 +8328 407786.111 900147.222 +8329 407794.444 740241.667 +8330 407797.222 978119.444 +8331 407800.000 803386.111 +8332 407808.333 736769.444 +8333 407808.333 997411.111 +8334 407811.111 732466.667 +8335 407811.111 737250.000 +8336 407811.111 766733.333 +8337 407838.889 762305.556 +8338 407841.667 746972.222 +8339 407858.333 747805.556 +8340 407861.111 737141.667 +8341 407866.667 737269.444 +8342 407869.444 730094.444 +8343 407869.444 737372.222 +8344 407872.222 812827.778 +8345 407875.000 827366.667 +8346 407877.778 740147.222 +8347 407877.778 743886.111 +8348 407883.333 741336.111 +8349 407886.111 736000.000 +8350 407886.111 736477.778 +8351 407886.111 842038.889 +8352 407888.889 765591.667 +8353 407891.667 836433.333 +8354 407894.444 740569.444 +8355 407905.556 732022.222 +8356 407905.556 893605.556 +8357 407913.889 762838.889 +8358 407919.444 740041.667 +8359 407933.333 734155.556 +8360 407933.333 764727.778 +8361 407933.333 778602.778 +8362 407936.111 736275.000 +8363 407936.111 741505.556 +8364 407941.667 736608.333 +8365 407941.667 737488.889 +8366 407944.444 801369.444 +8367 407952.778 814736.111 +8368 407958.333 743152.778 +8369 407961.111 891972.222 +8370 407972.222 759697.222 +8371 407977.778 737000.000 +8372 407977.778 858205.556 +8373 407980.556 783975.000 +8374 407986.111 736802.778 +8375 407986.111 742394.444 +8376 407988.889 768625.000 +8377 407988.889 813786.111 +8378 407988.889 816955.556 +8379 407994.444 762127.778 +8380 407994.444 780544.444 +8381 407997.222 736513.889 +8382 407997.222 756622.222 +8383 407997.222 764280.556 +8384 408000.000 966666.667 +8385 408002.778 727902.778 +8386 408005.556 737288.889 +8387 408013.889 756105.556 +8388 408016.667 835105.556 +8389 408019.444 728413.889 +8390 408022.222 1241625.000 +8391 408025.000 737047.222 +8392 408030.556 726150.000 +8393 408030.556 749900.000 +8394 408041.667 740125.000 +8395 408041.667 763408.333 +8396 408041.667 764652.778 +8397 408041.667 821958.333 +8398 408044.444 904016.667 +8399 408050.000 819352.778 +8400 408052.778 742041.667 +8401 408066.667 737038.889 +8402 408066.667 741858.333 +8403 408072.222 736816.667 +8404 408075.000 911127.778 +8405 408083.333 829755.556 +8406 408102.778 795297.222 +8407 408105.556 778186.111 +8408 408119.444 741247.222 +8409 408122.222 730788.889 +8410 408125.000 761419.444 +8411 408152.778 730455.556 +8412 408161.111 736977.778 +8413 408163.889 736375.000 +8414 408163.889 795222.222 +8415 408166.667 964300.000 +8416 408175.000 730005.556 +8417 408177.778 800144.444 +8418 408191.667 831305.556 +8419 408197.222 737355.556 +8420 408202.778 762011.111 +8421 408202.778 879777.778 +8422 408205.556 742941.667 +8423 408205.556 985997.222 +8424 408213.889 739880.556 +8425 408216.667 744813.889 +8426 408222.222 741602.778 +8427 408230.556 726100.000 +8428 408236.111 733991.667 +8429 408236.111 759805.556 +8430 408238.889 735480.556 +8431 408244.444 726666.667 +8432 408244.444 742850.000 +8433 408250.000 783513.889 +8434 408250.000 911563.889 +8435 408255.556 732030.556 +8436 408255.556 736986.111 +8437 408258.333 742094.444 +8438 408261.111 735025.000 +8439 408263.889 741072.222 +8440 408269.444 739761.111 +8441 408272.222 832813.889 +8442 408275.000 762072.222 +8443 408291.667 853355.556 +8444 408297.222 742405.556 +8445 408297.222 750780.556 +8446 408311.111 730300.000 +8447 408316.667 758827.778 +8448 408316.667 768361.111 +8449 408325.000 1157622.222 +8450 408336.111 757141.667 +8451 408336.111 953080.556 +8452 408338.889 740975.000 +8453 408338.889 805405.556 +8454 408341.667 740091.667 +8455 408341.667 803225.000 +8456 408347.222 736958.333 +8457 408350.000 731316.667 +8458 408355.556 803997.222 +8459 408375.000 796322.222 +8460 408380.556 857302.778 +8461 408386.111 735655.556 +8462 408388.889 898863.889 +8463 408397.222 742769.444 +8464 408402.778 740911.111 +8465 408405.556 725819.444 +8466 408408.333 743022.222 +8467 408411.111 740455.556 +8468 408416.667 962933.333 +8469 408419.444 1017247.222 +8470 408427.778 732933.333 +8471 408430.556 737152.778 +8472 408436.111 817641.667 +8473 408447.222 737022.222 +8474 408450.000 806147.222 +8475 408452.778 733355.556 +8476 408455.556 740883.333 +8477 408475.000 776863.889 +8478 408480.556 739980.556 +8479 408480.556 752919.444 +8480 408483.333 799622.222 +8481 408486.111 768200.000 +8482 408486.111 1119061.111 +8483 408488.889 736452.778 +8484 408500.000 782708.333 +8485 408508.333 739705.556 +8486 408516.667 737191.667 +8487 408519.444 731544.444 +8488 408527.778 731155.556 +8489 408527.778 740425.000 +8490 408530.556 741141.667 +8491 408533.333 734119.444 +8492 408538.889 748294.444 +8493 408541.667 1069652.778 +8494 408555.556 1118922.222 +8495 408558.333 732011.111 +8496 408561.111 731877.778 +8497 408566.667 734700.000 +8498 408566.667 741288.889 +8499 408569.444 740219.444 +8500 408580.556 740811.111 +8501 408583.333 731000.000 +8502 408583.333 741641.667 +8503 408588.889 934972.222 +8504 408597.222 999869.444 +8505 408611.111 798955.556 +8506 408613.889 739886.111 +8507 408616.667 896786.111 +8508 408622.222 736341.667 +8509 408625.000 767947.222 +8510 408625.000 856016.667 +8511 408638.889 802591.667 +8512 408644.444 758113.889 +8513 408644.444 765527.778 +8514 408644.444 864997.222 +8515 408644.444 913144.444 +8516 408655.556 735325.000 +8517 408655.556 752069.444 +8518 408658.333 907483.333 +8519 408661.111 860775.000 +8520 408663.889 730361.111 +8521 408663.889 873636.111 +8522 408666.667 1240816.667 +8523 408672.222 980038.889 +8524 408677.778 868788.889 +8525 408680.556 734261.111 +8526 408680.556 777469.444 +8527 408680.556 975916.667 +8528 408686.111 730019.444 +8529 408686.111 752552.778 +8530 408686.111 823183.333 +8531 408688.889 725180.556 +8532 408688.889 733655.556 +8533 408688.889 742086.111 +8534 408694.444 845841.667 +8535 408700.000 961402.778 +8536 408708.333 735113.889 +8537 408711.111 747344.444 +8538 408711.111 984677.778 +8539 408713.889 734572.222 +8540 408716.667 1118913.889 +8541 408727.778 787244.444 +8542 408758.333 745427.778 +8543 408758.333 757327.778 +8544 408758.333 814025.000 +8545 408761.111 735769.444 +8546 408761.111 740302.778 +8547 408766.667 733250.000 +8548 408772.222 807555.556 +8549 408777.778 798466.667 +8550 408777.778 882691.667 +8551 408780.556 888611.111 +8552 408788.889 769872.222 +8553 408794.444 751841.667 +8554 408802.778 879550.000 +8555 408805.556 752150.000 +8556 408805.556 851663.889 +8557 408813.889 741136.111 +8558 408813.889 826619.444 +8559 408816.667 945616.667 +8560 408822.222 740836.111 +8561 408825.000 1216597.222 +8562 408830.556 854975.000 +8563 408830.556 895025.000 +8564 408830.556 1239827.778 +8565 408838.889 745625.000 +8566 408841.667 723900.000 +8567 408841.667 729377.778 +8568 408852.778 739527.778 +8569 408858.333 740438.889 +8570 408858.333 782211.111 +8571 408861.111 732577.778 +8572 408869.444 735555.556 +8573 408880.556 803383.333 +8574 408883.333 738286.111 +8575 408883.333 806941.667 +8576 408894.444 1118800.000 +8577 408897.222 741952.778 +8578 408897.222 782286.111 +8579 408897.222 815977.778 +8580 408908.333 724641.667 +8581 408908.333 774769.444 +8582 408908.333 928150.000 +8583 408916.667 767977.778 +8584 408927.778 739730.556 +8585 408930.556 745822.222 +8586 408938.889 1119011.111 +8587 408947.222 744333.333 +8588 408952.778 736013.889 +8589 408952.778 738075.000 +8590 408952.778 838888.889 +8591 408975.000 740163.889 +8592 408983.333 956711.111 +8593 408988.889 740930.556 +8594 408988.889 747069.444 +8595 408994.444 973991.667 +8596 408997.222 734152.778 +8597 409002.778 807641.667 +8598 409008.333 733436.111 +8599 409011.111 745147.222 +8600 409022.222 817341.667 +8601 409025.000 740622.222 +8602 409025.000 744075.000 +8603 409027.778 747094.444 +8604 409033.333 731583.333 +8605 409033.333 734602.778 +8606 409038.889 741188.889 +8607 409044.444 890344.444 +8608 409050.000 742102.778 +8609 409063.889 842966.667 +8610 409069.444 970986.111 +8611 409072.222 740755.556 +8612 409083.333 902847.222 +8613 409097.222 738083.333 +8614 409100.000 759916.667 +8615 409105.556 735625.000 +8616 409113.889 737827.778 +8617 409113.889 906472.222 +8618 409116.667 859244.444 +8619 409116.667 871552.778 +8620 409125.000 733013.889 +8621 409133.333 759669.444 +8622 409133.333 777786.111 +8623 409152.778 811061.111 +8624 409166.667 741722.222 +8625 409166.667 847027.778 +8626 409169.444 726625.000 +8627 409175.000 770480.556 +8628 409175.000 965280.556 +8629 409177.778 1113986.111 +8630 409180.556 1118713.889 +8631 409186.111 922227.778 +8632 409191.667 892911.111 +8633 409194.444 840569.444 +8634 409222.222 894861.111 +8635 409225.000 900144.444 +8636 409227.778 810191.667 +8637 409230.556 750969.444 +8638 409230.556 809938.889 +8639 409250.000 983416.667 +8640 409252.778 730477.778 +8641 409252.778 739633.333 +8642 409252.778 742769.444 +8643 409255.556 731413.889 +8644 409258.333 746352.778 +8645 409269.444 913994.444 +8646 409275.000 739977.778 +8647 409277.778 733602.778 +8648 409277.778 737522.222 +8649 409280.556 759150.000 +8650 409286.111 740402.778 +8651 409294.444 1001602.778 +8652 409297.222 897575.000 +8653 409297.222 949758.333 +8654 409311.111 738991.667 +8655 409319.444 909469.444 +8656 409322.222 843388.889 +8657 409327.778 724147.222 +8658 409327.778 746597.222 +8659 409327.778 803636.111 +8660 409350.000 740194.444 +8661 409352.778 879344.444 +8662 409355.556 741866.667 +8663 409366.667 871508.333 +8664 409377.778 723013.889 +8665 409380.556 738325.000 +8666 409402.778 741322.222 +8667 409405.556 739972.222 +8668 409413.889 739597.222 +8669 409416.667 777852.778 +8670 409436.111 789711.111 +8671 409444.444 740758.333 +8672 409461.111 874533.333 +8673 409463.889 730697.222 +8674 409466.667 1240994.444 +8675 409469.444 730300.000 +8676 409477.778 903100.000 +8677 409477.778 903711.111 +8678 409480.556 797430.556 +8679 409480.556 839611.111 +8680 409486.111 737330.556 +8681 409491.667 741541.667 +8682 409494.444 725819.444 +8683 409508.333 730844.444 +8684 409519.444 764600.000 +8685 409525.000 833825.000 +8686 409550.000 741863.889 +8687 409558.333 739316.667 +8688 409561.111 729683.333 +8689 409566.667 744983.333 +8690 409572.222 729080.556 +8691 409572.222 739638.889 +8692 409583.333 759750.000 +8693 409586.111 740372.222 +8694 409586.111 759963.889 +8695 409588.889 768994.444 +8696 409597.222 729966.667 +8697 409597.222 730683.333 +8698 409597.222 731300.000 +8699 409608.333 739905.556 +8700 409622.222 828544.444 +8701 409625.000 853733.333 +8702 409627.778 741333.333 +8703 409627.778 964408.333 +8704 409633.333 711833.333 +8705 409633.333 766130.556 +8706 409636.111 813313.889 +8707 409636.111 915577.778 +8708 409644.444 768847.222 +8709 409688.889 737130.556 +8710 409700.000 816966.667 +8711 409713.889 821100.000 +8712 409730.556 739619.444 +8713 409730.556 1177347.222 +8714 409736.111 721441.667 +8715 409747.222 848683.333 +8716 409755.556 785252.778 +8717 409761.111 740266.667 +8718 409777.778 803452.778 +8719 409780.556 817822.222 +8720 409791.667 741169.444 +8721 409805.556 736841.667 +8722 409805.556 1118866.667 +8723 409816.667 951038.889 +8724 409819.444 931983.333 +8725 409827.778 841994.444 +8726 409836.111 739802.778 +8727 409852.778 868794.444 +8728 409858.333 747425.000 +8729 409858.333 796133.333 +8730 409866.667 751950.000 +8731 409869.444 818938.889 +8732 409883.333 1022638.889 +8733 409891.667 741411.111 +8734 409900.000 752166.667 +8735 409900.000 887291.667 +8736 409900.000 947405.556 +8737 409911.111 725347.222 +8738 409911.111 740330.556 +8739 409919.444 760569.444 +8740 409938.889 743038.889 +8741 409941.667 921672.222 +8742 409952.778 740125.000 +8743 409955.556 723416.667 +8744 409963.889 741016.667 +8745 409977.778 722930.556 +8746 409977.778 961619.444 +8747 409980.556 739622.222 +8748 409994.444 751816.667 +8749 410005.556 857686.111 +8750 410011.111 986072.222 +8751 410016.667 736661.111 +8752 410016.667 743675.000 +8753 410016.667 793316.667 +8754 410025.000 784636.111 +8755 410027.778 738791.667 +8756 410027.778 955850.000 +8757 410030.556 879080.556 +8758 410036.111 743419.444 +8759 410036.111 885252.778 +8760 410041.667 923736.111 +8761 410050.000 737850.000 +8762 410052.778 742911.111 +8763 410061.111 764102.778 +8764 410063.889 739494.444 +8765 410080.556 911638.889 +8766 410086.111 919625.000 +8767 410094.444 741733.333 +8768 410097.222 952252.778 +8769 410100.000 818625.000 +8770 410105.556 738441.667 +8771 410105.556 739916.667 +8772 410105.556 741183.333 +8773 410113.889 958819.444 +8774 410127.778 723133.333 +8775 410127.778 816052.778 +8776 410138.889 933063.889 +8777 410144.444 738730.556 +8778 410144.444 763813.889 +8779 410161.111 721597.222 +8780 410166.667 742061.111 +8781 410166.667 758975.000 +8782 410166.667 1114975.000 +8783 410172.222 954019.444 +8784 410186.111 864133.333 +8785 410186.111 957988.889 +8786 410188.889 737986.111 +8787 410191.667 840472.222 +8788 410208.333 814361.111 +8789 410219.444 739477.778 +8790 410233.333 740669.444 +8791 410241.667 806150.000 +8792 410241.667 806630.556 +8793 410247.222 894111.111 +8794 410250.000 807611.111 +8795 410252.778 902797.222 +8796 410255.556 817300.000 +8797 410261.111 989122.222 +8798 410263.889 819333.333 +8799 410266.667 928055.556 +8800 410275.000 941977.778 +8801 410286.111 894383.333 +8802 410288.889 840791.667 +8803 410300.000 825158.333 +8804 410308.333 779497.222 +8805 410316.667 741025.000 +8806 410322.222 1119013.889 +8807 410333.333 820122.222 +8808 410338.889 737633.333 +8809 410338.889 937652.778 +8810 410352.778 805366.667 +8811 410352.778 1119377.778 +8812 410358.333 719550.000 +8813 410375.000 740411.111 +8814 410380.556 742944.444 +8815 410383.333 860280.556 +8816 410388.889 738655.556 +8817 410391.667 963680.556 +8818 410413.889 741294.444 +8819 410413.889 795033.333 +8820 410416.667 939491.667 +8821 410419.444 739186.111 +8822 410441.667 836500.000 +8823 410458.333 762825.000 +8824 410463.889 813980.556 +8825 410466.667 740233.333 +8826 410469.444 957422.222 +8827 410477.778 724636.111 +8828 410491.667 880977.778 +8829 410502.778 788225.000 +8830 410513.889 866030.556 +8831 410519.444 762211.111 +8832 410519.444 830150.000 +8833 410525.000 806080.556 +8834 410525.000 890502.778 +8835 410530.556 827263.889 +8836 410533.333 735391.667 +8837 410544.444 762336.111 +8838 410547.222 797269.444 +8839 410550.000 738205.556 +8840 410572.222 741413.889 +8841 410572.222 966444.444 +8842 410580.556 747530.556 +8843 410583.333 740988.889 +8844 410586.111 943611.111 +8845 410588.889 740222.222 +8846 410602.778 1119702.778 +8847 410605.556 757744.444 +8848 410613.889 1020738.889 +8849 410616.667 897730.556 +8850 410619.444 762227.778 +8851 410633.333 905558.333 +8852 410638.889 800566.667 +8853 410647.222 724266.667 +8854 410647.222 828877.778 +8855 410647.222 862158.333 +8856 410680.556 723391.667 +8857 410705.556 850144.444 +8858 410722.222 858916.667 +8859 410722.222 902252.778 +8860 410758.333 775888.889 +8861 410766.667 818963.889 +8862 410775.000 847272.222 +8863 410780.556 764147.222 +8864 410783.333 805994.444 +8865 410786.111 734697.222 +8866 410797.222 878113.889 +8867 410805.556 868919.444 +8868 410811.111 1119191.667 +8869 410813.889 815191.667 +8870 410816.667 745927.778 +8871 410819.444 961341.667 +8872 410830.556 739205.556 +8873 410844.444 768641.667 +8874 410847.222 856280.556 +8875 410855.556 738588.889 +8876 410886.111 740138.889 +8877 410891.667 906380.556 +8878 410894.444 1120638.889 +8879 410905.556 739183.333 +8880 410927.778 1024702.778 +8881 410936.111 898647.222 +8882 410944.444 884250.000 +8883 410958.333 796827.778 +8884 410961.111 912575.000 +8885 410963.889 739733.333 +8886 410969.444 788888.889 +8887 410972.222 1048144.444 +8888 410983.333 839847.222 +8889 410994.444 909425.000 +8890 410997.222 806497.222 +8891 411000.000 813466.667 +8892 411002.778 821233.333 +8893 411002.778 842663.889 +8894 411013.889 814419.444 +8895 411016.667 807647.222 +8896 411019.444 767713.889 +8897 411033.333 723597.222 +8898 411038.889 826119.444 +8899 411069.444 739205.556 +8900 411072.222 737963.889 +8901 411072.222 774847.222 +8902 411075.000 837927.778 +8903 411077.778 787713.889 +8904 411083.333 835169.444 +8905 411108.333 1120252.778 +8906 411111.111 740688.889 +8907 411113.889 893563.889 +8908 411116.667 1149636.111 +8909 411133.333 742458.333 +8910 411141.667 975986.111 +8911 411144.444 831780.556 +8912 411147.222 741500.000 +8913 411147.222 901644.444 +8914 411158.333 980013.889 +8915 411161.111 791869.444 +8916 411169.444 809836.111 +8917 411175.000 734083.333 +8918 411180.556 739558.333 +8919 411183.333 1120833.333 +8920 411191.667 787602.778 +8921 411200.000 878611.111 +8922 411202.778 765302.778 +8923 411208.333 888352.778 +8924 411219.444 753650.000 +8925 411219.444 830158.333 +8926 411222.222 803330.556 +8927 411230.556 914411.111 +8928 411233.333 737794.444 +8929 411238.889 741697.222 +8930 411238.889 1007650.000 +8931 411241.667 1013558.333 +8932 411247.222 774300.000 +8933 411252.778 848533.333 +8934 411263.889 737144.444 +8935 411263.889 774719.444 +8936 411280.556 1017191.667 +8937 411305.556 851288.889 +8938 411325.000 1119294.444 +8939 411333.333 1048166.667 +8940 411338.889 814847.222 +8941 411358.333 929038.889 +8942 411363.889 740827.778 +8943 411363.889 1120302.778 +8944 411366.667 800094.444 +8945 411366.667 958905.556 +8946 411369.444 774472.222 +8947 411380.556 845805.556 +8948 411383.333 818638.889 +8949 411408.333 962394.444 +8950 411413.889 733583.333 +8951 411416.667 878750.000 +8952 411419.444 878611.111 +8953 411427.778 890600.000 +8954 411427.778 1029775.000 +8955 411444.444 814400.000 +8956 411450.000 788047.222 +8957 411455.556 738241.667 +8958 411458.333 774216.667 +8959 411463.889 747527.778 +8960 411472.222 916605.556 +8961 411475.000 739897.222 +8962 411505.556 739458.333 +8963 411530.556 761505.556 +8964 411533.333 745766.667 +8965 411536.111 813580.556 +8966 411538.889 807016.667 +8967 411544.444 741933.333 +8968 411544.444 960419.444 +8969 411550.000 759786.111 +8970 411563.889 805694.444 +8971 411569.444 834169.444 +8972 411569.444 1011258.333 +8973 411572.222 854883.333 +8974 411575.000 812422.222 +8975 411577.778 800888.889 +8976 411586.111 1010022.222 +8977 411588.889 814544.444 +8978 411594.444 814405.556 +8979 411605.556 926311.111 +8980 411611.111 790833.333 +8981 411616.667 1120255.556 +8982 411627.778 738619.444 +8983 411655.556 808577.778 +8984 411666.667 876627.778 +8985 411669.444 732052.778 +8986 411669.444 740436.111 +8987 411675.000 900425.000 +8988 411688.889 822180.556 +8989 411702.778 909966.667 +8990 411725.000 835563.889 +8991 411725.000 923086.111 +8992 411727.778 882766.667 +8993 411727.778 1119758.333 +8994 411733.333 860347.222 +8995 411741.667 804536.111 +8996 411747.222 918194.444 +8997 411750.000 760750.000 +8998 411769.444 1120030.556 +8999 411772.222 744691.667 +9000 411772.222 797080.556 +9001 411772.222 896575.000 +9002 411788.889 903158.333 +9003 411797.222 975472.222 +9004 411813.889 847405.556 +9005 411813.889 911852.778 +9006 411816.667 743825.000 +9007 411819.444 1040686.111 +9008 411822.222 937286.111 +9009 411827.778 807655.556 +9010 411827.778 836783.333 +9011 411847.222 773141.667 +9012 411855.556 883097.222 +9013 411855.556 919927.778 +9014 411883.333 809783.333 +9015 411916.667 903800.000 +9016 411919.444 1119705.556 +9017 411922.222 974250.000 +9018 411966.667 908802.778 +9019 411969.444 759286.111 +9020 411975.000 739650.000 +9021 411991.667 798730.556 +9022 411997.222 907491.667 +9023 412002.778 857055.556 +9024 412022.222 793277.778 +9025 412030.556 905869.444 +9026 412041.667 737275.000 +9027 412044.444 928825.000 +9028 412052.778 760052.778 +9029 412052.778 960422.222 +9030 412055.556 767858.333 +9031 412069.444 830552.778 +9032 412075.000 838991.667 +9033 412083.333 738916.667 +9034 412094.444 739858.333 +9035 412094.444 1067891.667 +9036 412097.222 746080.556 +9037 412102.778 758969.444 +9038 412108.333 849669.444 +9039 412111.111 805380.556 +9040 412113.889 966200.000 +9041 412122.222 804969.444 +9042 412125.000 924352.778 +9043 412147.222 793855.556 +9044 412150.000 867758.333 +9045 412158.333 890666.667 +9046 412188.889 864230.556 +9047 412197.222 1222738.889 +9048 412219.444 932411.111 +9049 412222.222 730569.444 +9050 412222.222 758633.333 +9051 412225.000 742947.222 +9052 412225.000 770372.222 +9053 412230.556 1119730.556 +9054 412269.444 802400.000 +9055 412269.444 882647.222 +9056 412272.222 858219.444 +9057 412277.778 964875.000 +9058 412283.333 851725.000 +9059 412291.667 840341.667 +9060 412305.556 853194.444 +9061 412319.444 769994.444 +9062 412325.000 956127.778 +9063 412330.556 804936.111 +9064 412338.889 805697.222 +9065 412344.444 795375.000 +9066 412350.000 810494.444 +9067 412350.000 951372.222 +9068 412358.333 1036625.000 +9069 412366.667 954177.778 +9070 412369.444 888313.889 +9071 412375.000 808186.111 +9072 412380.556 818419.444 +9073 412380.556 858530.556 +9074 412391.667 813461.111 +9075 412397.222 816383.333 +9076 412400.000 814408.333 +9077 412400.000 836433.333 +9078 412402.778 759450.000 +9079 412411.111 767241.667 +9080 412411.111 770013.889 +9081 412411.111 815527.778 +9082 412413.889 884194.444 +9083 412425.000 826158.333 +9084 412427.778 732011.111 +9085 412450.000 759311.111 +9086 412450.000 963969.444 +9087 412455.556 899247.222 +9088 412458.333 758816.667 +9089 412463.889 832358.333 +9090 412488.889 841330.556 +9091 412491.667 787997.222 +9092 412502.778 794597.222 +9093 412505.556 878313.889 +9094 412527.778 971297.222 +9095 412538.889 836044.444 +9096 412541.667 769208.333 +9097 412541.667 893422.222 +9098 412541.667 947680.556 +9099 412544.444 823997.222 +9100 412555.556 734352.778 +9101 412558.333 1221383.333 +9102 412561.111 830516.667 +9103 412563.889 743602.778 +9104 412586.111 959375.000 +9105 412591.667 804722.222 +9106 412597.222 906077.778 +9107 412608.333 1117691.667 +9108 412611.111 892275.000 +9109 412611.111 961316.667 +9110 412619.444 739386.111 +9111 412619.444 958608.333 +9112 412647.222 815133.333 +9113 412650.000 882122.222 +9114 412683.333 1109625.000 +9115 412694.444 759166.667 +9116 412705.556 729475.000 +9117 412708.333 737780.556 +9118 412725.000 820547.222 +9119 412736.111 828416.667 +9120 412752.778 758505.556 +9121 412755.556 989663.889 +9122 412761.111 728688.889 +9123 412769.444 926794.444 +9124 412780.556 758975.000 +9125 412783.333 730261.111 +9126 412786.111 725280.556 +9127 412788.889 758786.111 +9128 412794.444 725988.889 +9129 412794.444 728155.556 +9130 412797.222 767133.333 +9131 412800.000 759125.000 +9132 412800.000 913605.556 +9133 412813.889 734986.111 +9134 412813.889 1119875.000 +9135 412833.333 701000.000 +9136 412838.889 812241.667 +9137 412841.667 810966.667 +9138 412844.444 843558.333 +9139 412852.778 723994.444 +9140 412852.778 724480.556 +9141 412861.111 804277.778 +9142 412863.889 962341.667 +9143 412872.222 845536.111 +9144 412877.778 882855.556 +9145 412877.778 993813.889 +9146 412886.111 882516.667 +9147 412888.889 726822.222 +9148 412888.889 758058.333 +9149 412888.889 915522.222 +9150 412897.222 945613.889 +9151 412900.000 739208.333 +9152 412905.556 959177.778 +9153 412916.667 723766.667 +9154 412916.667 758750.000 +9155 412916.667 934422.222 +9156 412919.444 999222.222 +9157 412922.222 895061.111 +9158 412930.556 847619.444 +9159 412938.889 822175.000 +9160 412938.889 902919.444 +9161 412941.667 882711.111 +9162 412952.778 890594.444 +9163 412955.556 861163.889 +9164 412958.333 897902.778 +9165 412963.889 926441.667 +9166 412975.000 826055.556 +9167 412980.556 1120852.778 +9168 412991.667 916927.778 +9169 413036.111 901927.778 +9170 413041.667 829752.778 +9171 413052.778 944611.111 +9172 413072.222 1119594.444 +9173 413077.778 881466.667 +9174 413080.556 729286.111 +9175 413083.333 741450.000 +9176 413088.889 820058.333 +9177 413097.222 742294.444 +9178 413100.000 721458.333 +9179 413100.000 1223094.444 +9180 413111.111 886097.222 +9181 413113.889 1055905.556 +9182 413116.667 758377.778 +9183 413125.000 811438.889 +9184 413125.000 814402.778 +9185 413127.778 963458.333 +9186 413136.111 817247.222 +9187 413138.889 816852.778 +9188 413144.444 818358.333 +9189 413163.889 730936.111 +9190 413166.667 870258.333 +9191 413175.000 868913.889 +9192 413186.111 872002.778 +9193 413188.889 905058.333 +9194 413197.222 758463.889 +9195 413197.222 816269.444 +9196 413205.556 730894.444 +9197 413205.556 758194.444 +9198 413208.333 931091.667 +9199 413216.667 802588.889 +9200 413230.556 777486.111 +9201 413241.667 834386.111 +9202 413250.000 757458.333 +9203 413252.778 721936.111 +9204 413252.778 824933.333 +9205 413255.556 856977.778 +9206 413258.333 757897.222 +9207 413261.111 896788.889 +9208 413263.889 777511.111 +9209 413269.444 757736.111 +9210 413275.000 757933.333 +9211 413275.000 891288.889 +9212 413275.000 891997.222 +9213 413275.000 1102922.222 +9214 413277.778 719911.111 +9215 413277.778 831322.222 +9216 413297.222 906702.778 +9217 413302.778 807255.556 +9218 413305.556 741872.222 +9219 413308.333 887080.556 +9220 413308.333 940136.111 +9221 413316.667 741213.889 +9222 413316.667 743572.222 +9223 413319.444 858500.000 +9224 413322.222 877852.778 +9225 413333.333 922044.444 +9226 413336.111 888780.556 +9227 413358.333 719063.889 +9228 413361.111 759636.111 +9229 413366.667 755188.889 +9230 413391.667 801052.778 +9231 413397.222 757366.667 +9232 413405.556 876213.889 +9233 413436.111 863097.222 +9234 413438.889 757388.889 +9235 413447.222 837972.222 +9236 413450.000 720252.778 +9237 413450.000 815286.111 +9238 413455.556 888425.000 +9239 413458.333 813952.778 +9240 413461.111 730794.444 +9241 413469.444 741266.667 +9242 413486.111 800825.000 +9243 413494.444 851355.556 +9244 413500.000 720788.889 +9245 413502.778 831219.444 +9246 413505.556 719825.000 +9247 413533.333 723911.111 +9248 413533.333 757386.111 +9249 413541.667 719669.444 +9250 413547.222 903813.889 +9251 413555.556 721000.000 +9252 413558.333 822538.889 +9253 413572.222 884211.111 +9254 413577.778 891761.111 +9255 413580.556 935572.222 +9256 413583.333 897372.222 +9257 413613.889 818130.556 +9258 413625.000 742716.667 +9259 413633.333 979688.889 +9260 413638.889 919536.111 +9261 413647.222 961575.000 +9262 413650.000 958577.778 +9263 413652.778 895838.889 +9264 413655.556 815613.889 +9265 413658.333 852388.889 +9266 413661.111 818544.444 +9267 413669.444 799294.444 +9268 413669.444 850588.889 +9269 413680.556 894647.222 +9270 413683.333 821077.778 +9271 413691.667 739666.667 +9272 413711.111 734144.444 +9273 413713.889 839419.444 +9274 413722.222 737338.889 +9275 413747.222 836513.889 +9276 413750.000 746930.556 +9277 413750.000 819083.333 +9278 413772.222 718341.667 +9279 413775.000 718277.778 +9280 413825.000 892188.889 +9281 413833.333 760250.000 +9282 413844.444 833205.556 +9283 413855.556 724361.111 +9284 413858.333 932691.667 +9285 413888.889 705138.889 +9286 413897.222 814413.889 +9287 413900.000 817597.222 +9288 413905.556 809736.111 +9289 413908.333 728600.000 +9290 413913.889 739563.889 +9291 413922.222 841252.778 +9292 413930.556 815366.667 +9293 413947.222 734544.444 +9294 413947.222 757069.444 +9295 413952.778 816763.889 +9296 413969.444 966111.111 +9297 413972.222 736175.000 +9298 413972.222 899044.444 +9299 413977.778 822225.000 +9300 413983.333 818047.222 +9301 413988.889 717475.000 +9302 414000.000 747236.111 +9303 414000.000 828086.111 +9304 414013.889 923544.444 +9305 414019.444 743247.222 +9306 414019.444 996388.889 +9307 414030.556 724513.889 +9308 414036.111 950136.111 +9309 414038.889 881116.667 +9310 414047.222 817230.556 +9311 414050.000 1023438.889 +9312 414061.111 736330.556 +9313 414080.556 929161.111 +9314 414088.889 756627.778 +9315 414091.667 741955.556 +9316 414091.667 1120352.778 +9317 414097.222 797119.444 +9318 414108.333 834611.111 +9319 414119.444 838644.444 +9320 414138.889 733038.889 +9321 414152.778 815661.111 +9322 414155.556 819236.111 +9323 414169.444 815275.000 +9324 414169.444 816061.111 +9325 414169.444 873652.778 +9326 414180.556 864858.333 +9327 414188.889 832213.889 +9328 414197.222 756327.778 +9329 414200.000 877416.667 +9330 414202.778 787288.889 +9331 414208.333 900150.000 +9332 414211.111 820963.889 +9333 414213.889 798813.889 +9334 414219.444 823647.222 +9335 414225.000 879858.333 +9336 414225.000 1001930.556 +9337 414227.778 1223850.000 +9338 414233.333 717861.111 +9339 414244.444 739469.444 +9340 414252.778 816883.333 +9341 414269.444 892133.333 +9342 414277.778 741663.889 +9343 414277.778 857525.000 +9344 414286.111 904608.333 +9345 414294.444 882286.111 +9346 414297.222 720825.000 +9347 414297.222 813908.333 +9348 414297.222 848713.889 +9349 414297.222 973680.556 +9350 414305.556 868983.333 +9351 414313.889 813655.556 +9352 414322.222 714569.444 +9353 414333.333 964977.778 +9354 414344.444 721102.778 +9355 414347.222 815258.333 +9356 414350.000 815363.889 +9357 414352.778 816575.000 +9358 414391.667 740455.556 +9359 414391.667 907175.000 +9360 414397.222 817355.556 +9361 414413.889 818644.444 +9362 414413.889 852650.000 +9363 414427.778 860013.889 +9364 414433.333 840088.889 +9365 414441.667 744002.778 +9366 414444.444 876313.889 +9367 414452.778 947644.444 +9368 414458.333 744233.333 +9369 414463.889 861480.556 +9370 414472.222 970591.667 +9371 414477.778 814277.778 +9372 414480.556 901541.667 +9373 414486.111 847480.556 +9374 414486.111 977302.778 +9375 414488.889 827080.556 +9376 414488.889 956152.778 +9377 414500.000 816636.111 +9378 414505.556 834875.000 +9379 414513.889 756122.222 +9380 414516.667 820355.556 +9381 414525.000 963508.333 +9382 414527.778 821825.000 +9383 414530.556 905719.444 +9384 414541.667 705625.000 +9385 414541.667 706041.667 +9386 414541.667 740580.556 +9387 414550.000 1068058.333 +9388 414552.778 819180.556 +9389 414552.778 882616.667 +9390 414558.333 960261.111 +9391 414563.889 907233.333 +9392 414569.444 728236.111 +9393 414569.444 1228936.111 +9394 414594.444 934047.222 +9395 414613.889 736713.889 +9396 414619.444 810738.889 +9397 414619.444 967794.444 +9398 414622.222 814808.333 +9399 414641.667 918380.556 +9400 414644.444 815088.889 +9401 414647.222 837061.111 +9402 414658.333 855875.000 +9403 414666.667 864830.556 +9404 414683.333 756033.333 +9405 414686.111 755625.000 +9406 414688.889 796911.111 +9407 414700.000 876363.889 +9408 414700.000 926511.111 +9409 414705.556 811452.778 +9410 414713.889 756080.556 +9411 414730.556 870611.111 +9412 414730.556 903575.000 +9413 414733.333 745388.889 +9414 414738.889 815372.222 +9415 414747.222 845525.000 +9416 414755.556 818394.444 +9417 414755.556 936786.111 +9418 414758.333 751825.000 +9419 414761.111 832958.333 +9420 414766.667 740241.667 +9421 414766.667 953377.778 +9422 414775.000 952216.667 +9423 414783.333 814638.889 +9424 414802.778 715230.556 +9425 414805.556 866916.667 +9426 414808.333 755950.000 +9427 414808.333 876377.778 +9428 414813.889 743605.556 +9429 414816.667 726816.667 +9430 414819.444 817983.333 +9431 414827.778 873327.778 +9432 414830.556 917058.333 +9433 414838.889 742180.556 +9434 414838.889 903530.556 +9435 414844.444 877033.333 +9436 414847.222 819222.222 +9437 414858.333 730511.111 +9438 414872.222 1205413.889 +9439 414875.000 821016.667 +9440 414880.556 914258.333 +9441 414883.333 875675.000 +9442 414886.111 757088.889 +9443 414891.667 814019.444 +9444 414900.000 713133.333 +9445 414913.889 876744.444 +9446 414919.444 941238.889 +9447 414927.778 757000.000 +9448 414941.667 875216.667 +9449 414947.222 755372.222 +9450 414947.222 903905.556 +9451 414952.778 794561.111 +9452 414958.333 878486.111 +9453 414961.111 853766.667 +9454 414969.444 713677.778 +9455 414969.444 725575.000 +9456 414977.778 815375.000 +9457 414988.889 729011.111 +9458 414994.444 816955.556 +9459 415002.778 858280.556 +9460 415005.556 874613.889 +9461 415005.556 946433.333 +9462 415008.333 837183.333 +9463 415008.333 904441.667 +9464 415008.333 934908.333 +9465 415027.778 724505.556 +9466 415033.333 740108.333 +9467 415033.333 943183.333 +9468 415036.111 844141.667 +9469 415038.889 877130.556 +9470 415047.222 739700.000 +9471 415052.778 820283.333 +9472 415061.111 876355.556 +9473 415061.111 881144.444 +9474 415063.889 875916.667 +9475 415066.667 905150.000 +9476 415075.000 717166.667 +9477 415088.889 907658.333 +9478 415094.444 905786.111 +9479 415102.778 1120147.222 +9480 415119.444 829377.778 +9481 415119.444 879655.556 +9482 415122.222 782352.778 +9483 415122.222 904150.000 +9484 415133.333 876741.667 +9485 415138.889 920761.111 +9486 415161.111 954500.000 +9487 415175.000 814036.111 +9488 415183.333 942261.111 +9489 415188.889 838038.889 +9490 415191.667 814580.556 +9491 415200.000 800486.111 +9492 415200.000 814888.889 +9493 415200.000 815563.889 +9494 415200.000 882016.667 +9495 415213.889 843072.222 +9496 415216.667 739269.444 +9497 415222.222 813380.556 +9498 415222.222 931016.667 +9499 415230.556 815186.111 +9500 415236.111 905775.000 +9501 415241.667 720763.889 +9502 415241.667 764011.111 +9503 415244.444 862733.333 +9504 415244.444 905155.556 +9505 415250.000 880816.667 +9506 415255.556 741533.333 +9507 415258.333 853666.667 +9508 415261.111 878891.667 +9509 415263.889 706736.111 +9510 415263.889 875386.111 +9511 415272.222 850655.556 +9512 415275.000 742372.222 +9513 415283.333 874236.111 +9514 415286.111 1094655.556 +9515 415300.000 886797.222 +9516 415305.556 739780.556 +9517 415308.333 755458.333 +9518 415316.667 940094.444 +9519 415319.444 939538.889 +9520 415322.222 872550.000 +9521 415330.556 815791.667 +9522 415341.667 757363.889 +9523 415341.667 864272.222 +9524 415347.222 740152.778 +9525 415350.000 740705.556 +9526 415350.000 808683.333 +9527 415355.556 738994.444 +9528 415355.556 878475.000 +9529 415369.444 885833.333 +9530 415380.556 728075.000 +9531 415386.111 759469.444 +9532 415391.667 855397.222 +9533 415397.222 740986.111 +9534 415413.889 869005.556 +9535 415425.000 816263.889 +9536 415425.000 876022.222 +9537 415427.778 876847.222 +9538 415438.889 738686.111 +9539 415444.444 732094.444 +9540 415444.444 961247.222 +9541 415472.222 891175.000 +9542 415475.000 865822.222 +9543 415486.111 985308.333 +9544 415486.111 987305.556 +9545 415491.667 841416.667 +9546 415511.111 1121094.444 +9547 415513.889 706152.778 +9548 415519.444 814786.111 +9549 415527.778 815102.778 +9550 415541.667 915347.222 +9551 415547.222 880986.111 +9552 415558.333 904091.667 +9553 415563.889 847688.889 +9554 415563.889 958875.000 +9555 415569.444 836272.222 +9556 415572.222 876655.556 +9557 415575.000 894608.333 +9558 415580.556 730519.444 +9559 415583.333 872744.444 +9560 415600.000 740036.111 +9561 415619.444 736030.556 +9562 415622.222 726511.111 +9563 415644.444 875125.000 +9564 415647.222 875388.889 +9565 415661.111 834247.222 +9566 415680.556 876080.556 +9567 415680.556 877202.778 +9568 415688.889 1118372.222 +9569 415700.000 912636.111 +9570 415716.667 876944.444 +9571 415727.778 726411.111 +9572 415733.333 877844.444 +9573 415736.111 755022.222 +9574 415736.111 840052.778 +9575 415736.111 876463.889 +9576 415750.000 872388.889 +9577 415755.556 723325.000 +9578 415758.333 725030.556 +9579 415758.333 871761.111 +9580 415766.667 744875.000 +9581 415766.667 752591.667 +9582 415769.444 734088.889 +9583 415772.222 937111.111 +9584 415783.333 705591.667 +9585 415783.333 928447.222 +9586 415802.778 754086.111 +9587 415816.667 903433.333 +9588 415833.333 875000.000 +9589 415838.889 738091.667 +9590 415838.889 935197.222 +9591 415847.222 907719.444 +9592 415852.778 878430.556 +9593 415858.333 925272.222 +9594 415861.111 844350.000 +9595 415869.444 712838.889 +9596 415875.000 1092022.222 +9597 415877.778 834933.333 +9598 415886.111 838911.111 +9599 415888.889 910166.667 +9600 415894.444 880577.778 +9601 415894.444 889219.444 +9602 415894.444 941958.333 +9603 415908.333 948752.778 +9604 415916.667 950597.222 +9605 415930.556 815269.444 +9606 415933.333 730858.333 +9607 415933.333 873463.889 +9608 415963.889 739113.889 +9609 415977.778 937080.556 +9610 415983.333 814186.111 +9611 415994.444 932350.000 +9612 415997.222 909105.556 +9613 416005.556 936088.889 +9614 416008.333 876069.444 +9615 416027.778 877438.889 +9616 416030.556 937238.889 +9617 416033.333 803055.556 +9618 416033.333 989258.333 +9619 416055.556 739719.444 +9620 416055.556 741844.444 +9621 416061.111 738733.333 +9622 416063.889 903352.778 +9623 416066.667 719813.889 +9624 416066.667 805725.000 +9625 416077.778 1228391.667 +9626 416097.222 835644.444 +9627 416100.000 876466.667 +9628 416105.556 867225.000 +9629 416105.556 965477.778 +9630 416111.111 876347.222 +9631 416116.667 938850.000 +9632 416125.000 887994.444 +9633 416136.111 901727.778 +9634 416141.667 760469.444 +9635 416141.667 811491.667 +9636 416144.444 940172.222 +9637 416147.222 1121258.333 +9638 416155.556 870741.667 +9639 416155.556 875294.444 +9640 416186.111 813841.667 +9641 416216.667 837116.667 +9642 416227.778 738711.111 +9643 416238.889 813072.222 +9644 416252.778 877175.000 +9645 416258.333 712138.889 +9646 416258.333 871902.778 +9647 416261.111 757808.333 +9648 416266.667 937119.444 +9649 416269.444 796738.889 +9650 416269.444 882038.889 +9651 416283.333 703875.000 +9652 416288.889 813616.667 +9653 416302.778 878538.889 +9654 416302.778 897861.111 +9655 416311.111 780916.667 +9656 416313.889 724602.778 +9657 416316.667 876608.333 +9658 416330.556 754708.333 +9659 416330.556 814688.889 +9660 416336.111 886811.111 +9661 416341.667 1118513.889 +9662 416347.222 849994.444 +9663 416352.778 727691.667 +9664 416361.111 709347.222 +9665 416377.778 859216.667 +9666 416386.111 1119330.556 +9667 416386.111 1120786.111 +9668 416388.889 875566.667 +9669 416388.889 876072.222 +9670 416391.667 874547.222 +9671 416397.222 732088.889 +9672 416397.222 814066.667 +9673 416405.556 993708.333 +9674 416411.111 884472.222 +9675 416413.889 801516.667 +9676 416416.667 854166.667 +9677 416430.556 957886.111 +9678 416436.111 834869.444 +9679 416438.889 877036.111 +9680 416441.667 934644.444 +9681 416458.333 886216.667 +9682 416475.000 880894.444 +9683 416500.000 702416.667 +9684 416513.889 754669.444 +9685 416525.000 797272.222 +9686 416527.778 702833.333 +9687 416530.556 953252.778 +9688 416538.889 814505.556 +9689 416555.556 738752.778 +9690 416555.556 746897.222 +9691 416561.111 804241.667 +9692 416563.889 768536.111 +9693 416563.889 900791.667 +9694 416572.222 876800.000 +9695 416580.556 905844.444 +9696 416583.333 701291.667 +9697 416583.333 708166.667 +9698 416602.778 808608.333 +9699 416611.111 727800.000 +9700 416611.111 877525.000 +9701 416611.111 915300.000 +9702 416611.111 920088.889 +9703 416619.444 861586.111 +9704 416627.778 788113.889 +9705 416627.778 876605.556 +9706 416627.778 885369.444 +9707 416638.889 835552.778 +9708 416641.667 836433.333 +9709 416644.444 701733.333 +9710 416650.000 860758.333 +9711 416652.778 1030986.111 +9712 416658.333 814433.333 +9713 416658.333 1111813.889 +9714 416661.111 813397.222 +9715 416666.667 701852.778 +9716 416666.667 966655.556 +9717 416672.222 878302.778 +9718 416680.556 762622.222 +9719 416680.556 877963.889 +9720 416686.111 933575.000 +9721 416688.889 877386.111 +9722 416713.889 899361.111 +9723 416713.889 913463.889 +9724 416716.667 729497.222 +9725 416730.556 936975.000 +9726 416730.556 1079786.111 +9727 416733.333 843269.444 +9728 416736.111 880016.667 +9729 416747.222 903402.778 +9730 416750.000 712711.111 +9731 416750.000 733522.222 +9732 416763.889 719155.556 +9733 416763.889 915802.778 +9734 416772.222 945030.556 +9735 416777.778 932450.000 +9736 416780.556 730113.889 +9737 416794.444 721708.333 +9738 416794.444 770641.667 +9739 416797.222 874944.444 +9740 416800.000 845530.556 +9741 416802.778 903188.889 +9742 416811.111 699916.667 +9743 416816.667 1118222.222 +9744 416819.444 699602.778 +9745 416819.444 859766.667 +9746 416819.444 869602.778 +9747 416827.778 883513.889 +9748 416833.333 862500.000 +9749 416841.667 877002.778 +9750 416844.444 939608.333 +9751 416861.111 700763.889 +9752 416883.333 937908.333 +9753 416888.889 889811.111 +9754 416888.889 983630.556 +9755 416897.222 877972.222 +9756 416908.333 980033.333 +9757 416916.667 943627.778 +9758 416916.667 974841.667 +9759 416919.444 713791.667 +9760 416925.000 869775.000 +9761 416947.222 740516.667 +9762 416966.667 878169.444 +9763 416972.222 862450.000 +9764 416975.000 905825.000 +9765 416977.778 727241.667 +9766 416983.333 868591.667 +9767 416986.111 880683.333 +9768 416994.444 840702.778 +9769 416997.222 930477.778 +9770 417000.000 703000.000 +9771 417000.000 707633.333 +9772 417002.778 739213.889 +9773 417002.778 865094.444 +9774 417005.556 934619.444 +9775 417013.889 711555.556 +9776 417013.889 877791.667 +9777 417019.444 702500.000 +9778 417038.889 790358.333 +9779 417050.000 813605.556 +9780 417052.778 972377.778 +9781 417061.111 715236.111 +9782 417063.889 1118163.889 +9783 417075.000 868950.000 +9784 417091.667 746288.889 +9785 417102.778 865341.667 +9786 417105.556 722086.111 +9787 417105.556 745747.222 +9788 417116.667 839097.222 +9789 417119.444 1121647.222 +9790 417122.222 726086.111 +9791 417127.778 718813.889 +9792 417141.667 726530.556 +9793 417141.667 893286.111 +9794 417161.111 862525.000 +9795 417169.444 743961.111 +9796 417175.000 899258.333 +9797 417180.556 929072.222 +9798 417180.556 949322.222 +9799 417183.333 738530.556 +9800 417188.889 801477.778 +9801 417188.889 837130.556 +9802 417194.444 842180.556 +9803 417205.556 877016.667 +9804 417208.333 739605.556 +9805 417208.333 877541.667 +9806 417211.111 968825.000 +9807 417213.889 858175.000 +9808 417216.667 1118205.556 +9809 417233.333 917902.778 +9810 417244.444 732366.667 +9811 417244.444 812458.333 +9812 417250.000 970025.000 +9813 417255.556 786386.111 +9814 417255.556 878250.000 +9815 417266.667 971219.444 +9816 417277.778 844188.889 +9817 417283.333 1225266.667 +9818 417297.222 936055.556 +9819 417305.556 883458.333 +9820 417308.333 849327.778 +9821 417316.667 922977.778 +9822 417330.556 776422.222 +9823 417336.111 924452.778 +9824 417344.444 877313.889 +9825 417355.556 1118336.111 +9826 417355.556 1226333.333 +9827 417383.333 957025.000 +9828 417405.556 713091.667 +9829 417408.333 878602.778 +9830 417411.111 705994.444 +9831 417411.111 735769.444 +9832 417411.111 1121608.333 +9833 417416.667 706583.333 +9834 417430.556 927222.222 +9835 417438.889 743719.444 +9836 417444.444 878377.778 +9837 417452.778 706186.111 +9838 417455.556 868508.333 +9839 417472.222 731891.667 +9840 417475.000 740872.222 +9841 417486.111 773008.333 +9842 417488.889 879183.333 +9843 417491.667 915977.778 +9844 417500.000 878041.667 +9845 417500.000 977750.000 +9846 417550.000 1033236.111 +9847 417561.111 1242005.556 +9848 417577.778 803680.556 +9849 417588.889 704944.444 +9850 417600.000 700833.333 +9851 417602.778 811411.111 +9852 417605.556 883200.000 +9853 417611.111 938241.667 +9854 417619.444 727425.000 +9855 417619.444 1089661.111 +9856 417625.000 707222.222 +9857 417627.778 878000.000 +9858 417636.111 726855.556 +9859 417652.778 721986.111 +9860 417658.333 836280.556 +9861 417675.000 764430.556 +9862 417680.556 888769.444 +9863 417688.889 878577.778 +9864 417688.889 886408.333 +9865 417694.444 711291.667 +9866 417694.444 1118038.889 +9867 417697.222 911277.778 +9868 417700.000 705288.889 +9869 417702.778 879022.222 +9870 417711.111 730602.778 +9871 417711.111 810500.000 +9872 417713.889 937127.778 +9873 417716.667 887736.111 +9874 417747.222 742986.111 +9875 417747.222 780208.333 +9876 417750.000 1071125.000 +9877 417755.556 954172.222 +9878 417758.333 725219.444 +9879 417783.333 962208.333 +9880 417794.444 1105377.778 +9881 417797.222 714377.778 +9882 417797.222 896888.889 +9883 417800.000 790933.333 +9884 417808.333 749341.667 +9885 417816.667 991327.778 +9886 417822.222 726125.000 +9887 417827.778 878780.556 +9888 417850.000 736944.444 +9889 417858.333 881472.222 +9890 417880.556 902561.111 +9891 417886.111 896961.111 +9892 417894.444 902191.667 +9893 417897.222 699902.778 +9894 417897.222 707608.333 +9895 417911.111 1072380.556 +9896 417925.000 1105369.444 +9897 417938.889 867438.889 +9898 417955.556 860808.333 +9899 417958.333 879755.556 +9900 417966.667 718977.778 +9901 417975.000 879547.222 +9902 417980.556 856433.333 +9903 417980.556 864991.667 +9904 417980.556 920705.556 +9905 417986.111 866105.556 +9906 417988.889 1118183.333 +9907 417991.667 854191.667 +9908 418005.556 731216.667 +9909 418005.556 803691.667 +9910 418008.333 879369.444 +9911 418011.111 747469.444 +9912 418011.111 880747.222 +9913 418019.444 810491.667 +9914 418025.000 718863.889 +9915 418036.111 800566.667 +9916 418061.111 883272.222 +9917 418069.444 834425.000 +9918 418072.222 770777.778 +9919 418072.222 914938.889 +9920 418083.333 722500.000 +9921 418086.111 877933.333 +9922 418088.889 880111.111 +9923 418094.444 1035033.333 +9924 418097.222 728311.111 +9925 418097.222 879005.556 +9926 418097.222 899650.000 +9927 418108.333 782800.000 +9928 418111.111 784450.000 +9929 418127.778 729205.556 +9930 418133.333 878180.556 +9931 418136.111 713705.556 +9932 418177.778 881733.333 +9933 418213.889 877827.778 +9934 418233.333 905380.556 +9935 418238.889 714133.333 +9936 418238.889 878516.667 +9937 418241.667 906477.778 +9938 418244.444 728941.667 +9939 418258.333 1036600.000 +9940 418261.111 931513.889 +9941 418272.222 863611.111 +9942 418280.556 866925.000 +9943 418283.333 974547.222 +9944 418288.889 740688.889 +9945 418297.222 862541.667 +9946 418316.667 908380.556 +9947 418325.000 838625.000 +9948 418327.778 879288.889 +9949 418347.222 878616.667 +9950 418350.000 878227.778 +9951 418358.333 964666.667 +9952 418383.333 1118319.444 +9953 418386.111 941069.444 +9954 418388.889 894794.444 +9955 418394.444 847480.556 +9956 418411.111 856686.111 +9957 418416.667 893002.778 +9958 418416.667 967083.333 +9959 418427.778 878230.556 +9960 418438.889 791452.778 +9961 418444.444 901886.111 +9962 418455.556 877538.889 +9963 418455.556 916927.778 +9964 418458.333 709500.000 +9965 418472.222 853186.111 +9966 418475.000 1036611.111 +9967 418491.667 735572.222 +9968 418500.000 876500.000 +9969 418500.000 879644.444 +9970 418500.000 883125.000 +9971 418505.556 877936.111 +9972 418505.556 878819.444 +9973 418519.444 945580.556 +9974 418525.000 726441.667 +9975 418544.444 956002.778 +9976 418550.000 843538.889 +9977 418569.444 939216.667 +9978 418575.000 909280.556 +9979 418594.444 809541.667 +9980 418616.667 881608.333 +9981 418627.778 1119900.000 +9982 418638.889 711250.000 +9983 418638.889 878533.333 +9984 418650.000 699916.667 +9985 418650.000 807900.000 +9986 418661.111 881069.444 +9987 418661.111 892211.111 +9988 418666.667 1036666.667 +9989 418672.222 901594.444 +9990 418700.000 1065613.889 +9991 418708.333 786616.667 +9992 418708.333 946772.222 +9993 418711.111 715525.000 +9994 418722.222 851947.222 +9995 418725.000 757275.000 +9996 418727.778 807730.556 +9997 418730.556 728586.111 +9998 418741.667 791525.000 +9999 418741.667 801319.444 +10000 418758.333 728016.667 +10001 418766.667 938230.556 +10002 418775.000 880669.444 +10003 418777.778 879027.778 +10004 418777.778 936783.333 +10005 418786.111 713830.556 +10006 418788.889 927891.667 +10007 418791.667 878430.556 +10008 418800.000 880077.778 +10009 418813.889 878830.556 +10010 418822.222 729775.000 +10011 418847.222 882038.889 +10012 418850.000 877844.444 +10013 418875.000 883052.778 +10014 418888.889 837788.889 +10015 418888.889 879033.333 +10016 418888.889 910563.889 +10017 418897.222 879888.889 +10018 418897.222 952319.444 +10019 418905.556 713927.778 +10020 418908.333 806763.889 +10021 418919.444 933994.444 +10022 418922.222 884722.222 +10023 418930.556 911505.556 +10024 418955.556 1062041.667 +10025 418969.444 922780.556 +10026 418975.000 840372.222 +10027 418977.778 878138.889 +10028 418983.333 935288.889 +10029 418994.444 798455.556 +10030 418994.444 879402.778 +10031 419000.000 710902.778 +10032 419002.778 748286.111 +10033 419005.556 878566.667 +10034 419011.111 837150.000 +10035 419027.778 919213.889 +10036 419038.889 777622.222 +10037 419044.444 912544.444 +10038 419050.000 803438.889 +10039 419052.778 739766.667 +10040 419055.556 878836.111 +10041 419058.333 806905.556 +10042 419066.667 713911.111 +10043 419075.000 885991.667 +10044 419086.111 727605.556 +10045 419086.111 771333.333 +10046 419091.667 950647.222 +10047 419094.444 920841.667 +10048 419102.778 880716.667 +10049 419116.667 860100.000 +10050 419125.000 881347.222 +10051 419150.000 719094.444 +10052 419163.889 833977.778 +10053 419172.222 878955.556 +10054 419172.222 1040386.111 +10055 419183.333 834305.556 +10056 419191.667 775391.667 +10057 419194.444 917808.333 +10058 419200.000 846305.556 +10059 419200.000 886886.111 +10060 419202.778 796405.556 +10061 419202.778 1120491.667 +10062 419211.111 730605.556 +10063 419211.111 878091.667 +10064 419211.111 913852.778 +10065 419219.444 914166.667 +10066 419227.778 1118127.778 +10067 419233.333 855283.333 +10068 419236.111 710527.778 +10069 419238.889 890686.111 +10070 419244.444 740616.667 +10071 419258.333 878358.333 +10072 419266.667 739130.556 +10073 419269.444 739977.778 +10074 419288.889 954936.111 +10075 419291.667 726277.778 +10076 419294.444 887502.778 +10077 419297.222 888608.333 +10078 419300.000 968113.889 +10079 419308.333 889644.444 +10080 419311.111 833269.444 +10081 419316.667 879888.889 +10082 419352.778 878655.556 +10083 419375.000 964769.444 +10084 419386.111 761361.111 +10085 419388.889 719600.000 +10086 419402.778 850005.556 +10087 419402.778 1038080.556 +10088 419413.889 931030.556 +10089 419438.889 856325.000 +10090 419441.667 848838.889 +10091 419444.444 712861.111 +10092 419463.889 863388.889 +10093 419475.000 805544.444 +10094 419502.778 972236.111 +10095 419508.333 882422.222 +10096 419511.111 890644.444 +10097 419536.111 735111.111 +10098 419538.889 727891.667 +10099 419538.889 752808.333 +10100 419538.889 860647.222 +10101 419541.667 723027.778 +10102 419550.000 879400.000 +10103 419555.556 717027.778 +10104 419558.333 786441.667 +10105 419558.333 878708.333 +10106 419561.111 1214763.889 +10107 419572.222 765183.333 +10108 419572.222 836597.222 +10109 419575.000 864855.556 +10110 419575.000 880808.333 +10111 419577.778 783855.556 +10112 419583.333 706677.778 +10113 419583.333 853250.000 +10114 419588.889 900991.667 +10115 419611.111 757436.111 +10116 419633.333 878272.222 +10117 419633.333 879788.889 +10118 419633.333 897744.444 +10119 419633.333 1039258.333 +10120 419636.111 781911.111 +10121 419638.889 908175.000 +10122 419655.556 716750.000 +10123 419666.667 711875.000 +10124 419666.667 925766.667 +10125 419672.222 878075.000 +10126 419675.000 1219169.444 +10127 419708.333 845258.333 +10128 419716.667 757436.111 +10129 419750.000 880072.222 +10130 419758.333 1118555.556 +10131 419761.111 725922.222 +10132 419766.667 714591.667 +10133 419788.889 765158.333 +10134 419797.222 736563.889 +10135 419816.667 726511.111 +10136 419825.000 793388.889 +10137 419833.333 980833.333 +10138 419836.111 909561.111 +10139 419841.667 846619.444 +10140 419841.667 861086.111 +10141 419847.222 880797.222 +10142 419850.000 862997.222 +10143 419852.778 724466.667 +10144 419855.556 718991.667 +10145 419855.556 739886.111 +10146 419861.111 773111.111 +10147 419861.111 895791.667 +10148 419863.889 843472.222 +10149 419866.667 838311.111 +10150 419872.222 725452.778 +10151 419872.222 969138.889 +10152 419888.889 886866.667 +10153 419902.778 709755.556 +10154 419941.667 882922.222 +10155 419944.444 707250.000 +10156 419950.000 881855.556 +10157 419955.556 919675.000 +10158 419955.556 925766.667 +10159 419969.444 918619.444 +10160 419972.222 741052.778 +10161 419975.000 765375.000 +10162 419980.556 911413.889 +10163 419983.333 921972.222 +10164 419994.444 881450.000 +10165 419994.444 975980.556 +10166 420002.778 803183.333 +10167 420022.222 906069.444 +10168 420027.778 715152.778 +10169 420036.111 798111.111 +10170 420038.889 839450.000 +10171 420038.889 879702.778 +10172 420044.444 877300.000 +10173 420061.111 841900.000 +10174 420063.889 854500.000 +10175 420069.444 927752.778 +10176 420075.000 962494.444 +10177 420083.333 916438.889 +10178 420086.111 920908.333 +10179 420111.111 878405.556 +10180 420127.778 965725.000 +10181 420127.778 1214075.000 +10182 420133.333 898905.556 +10183 420144.444 865194.444 +10184 420147.222 893322.222 +10185 420152.778 943772.222 +10186 420161.111 767272.222 +10187 420166.667 740766.667 +10188 420166.667 931633.333 +10189 420177.778 933150.000 +10190 420177.778 953550.000 +10191 420180.556 740152.778 +10192 420188.889 878027.778 +10193 420225.000 945450.000 +10194 420227.778 934522.222 +10195 420230.556 706833.333 +10196 420236.111 719502.778 +10197 420252.778 1215994.444 +10198 420255.556 881783.333 +10199 420258.333 858155.556 +10200 420266.667 960969.444 +10201 420272.222 733297.222 +10202 420316.667 942405.556 +10203 420333.333 712194.444 +10204 420333.333 877333.333 +10205 420333.333 878833.333 +10206 420333.333 880833.333 +10207 420341.667 915975.000 +10208 420347.222 936197.222 +10209 420358.333 916819.444 +10210 420372.222 882811.111 +10211 420386.111 783411.111 +10212 420391.667 940275.000 +10213 420405.556 877825.000 +10214 420411.111 876900.000 +10215 420416.667 706727.778 +10216 420427.778 880797.222 +10217 420427.778 1010422.222 +10218 420430.556 733455.556 +10219 420436.111 739477.778 +10220 420438.889 847575.000 +10221 420455.556 802700.000 +10222 420472.222 978336.111 +10223 420494.444 929077.778 +10224 420500.000 718805.556 +10225 420500.000 725833.333 +10226 420502.778 894311.111 +10227 420502.778 904138.889 +10228 420527.778 1242827.778 +10229 420533.333 1242663.889 +10230 420544.444 791583.333 +10231 420544.444 1049522.222 +10232 420569.444 947286.111 +10233 420583.333 701791.667 +10234 420583.333 739097.222 +10235 420591.667 833908.333 +10236 420591.667 910072.222 +10237 420594.444 914425.000 +10238 420597.222 938800.000 +10239 420600.000 754280.556 +10240 420638.889 832611.111 +10241 420650.000 864950.000 +10242 420650.000 1041811.111 +10243 420658.333 948666.667 +10244 420661.111 917952.778 +10245 420663.889 879372.222 +10246 420666.667 851361.111 +10247 420683.333 955913.889 +10248 420688.889 906655.556 +10249 420694.444 761550.000 +10250 420700.000 843305.556 +10251 420708.333 832466.667 +10252 420711.111 901738.889 +10253 420711.111 916666.667 +10254 420719.444 839716.667 +10255 420722.222 717138.889 +10256 420722.222 877227.778 +10257 420750.000 708805.556 +10258 420750.000 720338.889 +10259 420750.000 794833.333 +10260 420758.333 756408.333 +10261 420775.000 739533.333 +10262 420775.000 784300.000 +10263 420780.556 768455.556 +10264 420825.000 1109544.444 +10265 420833.333 710188.889 +10266 420833.333 713972.222 +10267 420841.667 880130.556 +10268 420852.778 836825.000 +10269 420858.333 877175.000 +10270 420863.889 779225.000 +10271 420866.667 714750.000 +10272 420869.444 864558.333 +10273 420886.111 852347.222 +10274 420897.222 768080.556 +10275 420900.000 784944.444 +10276 420913.889 881216.667 +10277 420916.667 707061.111 +10278 420925.000 888511.111 +10279 420930.556 707930.556 +10280 420933.333 849858.333 +10281 420936.111 926755.556 +10282 420941.667 883025.000 +10283 420944.444 901566.667 +10284 420944.444 918691.667 +10285 420950.000 831897.222 +10286 420950.000 899780.556 +10287 420952.778 879375.000 +10288 420963.889 1118758.333 +10289 420969.444 792355.556 +10290 420972.222 886927.778 +10291 420977.778 885302.778 +10292 420983.333 760497.222 +10293 420986.111 759183.333 +10294 420997.222 877808.333 +10295 421013.889 725902.778 +10296 421022.222 898333.333 +10297 421027.778 772338.889 +10298 421033.333 762625.000 +10299 421041.667 723194.444 +10300 421041.667 793333.333 +10301 421058.333 842483.333 +10302 421069.444 726208.333 +10303 421069.444 936494.444 +10304 421072.222 891791.667 +10305 421080.556 859744.444 +10306 421080.556 877358.333 +10307 421083.333 720791.667 +10308 421083.333 912850.000 +10309 421094.444 792833.333 +10310 421102.778 880341.667 +10311 421111.111 716666.667 +10312 421125.000 929883.333 +10313 421127.778 760213.889 +10314 421141.667 856377.778 +10315 421141.667 967069.444 +10316 421155.556 759591.667 +10317 421161.111 721138.889 +10318 421166.667 864541.667 +10319 421180.556 880961.111 +10320 421186.111 791986.111 +10321 421200.000 855327.778 +10322 421211.111 882577.778 +10323 421216.667 770375.000 +10324 421236.111 711791.667 +10325 421236.111 724319.444 +10326 421250.000 727500.000 +10327 421255.556 894036.111 +10328 421261.111 895791.667 +10329 421269.444 892555.556 +10330 421275.000 878288.889 +10331 421275.000 961491.667 +10332 421286.111 980294.444 +10333 421291.667 800852.778 +10334 421297.222 768211.111 +10335 421305.556 715416.667 +10336 421311.111 864072.222 +10337 421333.333 758966.667 +10338 421350.000 877580.556 +10339 421372.222 769372.222 +10340 421388.889 832416.667 +10341 421391.667 879288.889 +10342 421394.444 831783.333 +10343 421397.222 715166.667 +10344 421402.778 800152.778 +10345 421416.667 712500.000 +10346 421427.778 770550.000 +10347 421458.333 707402.778 +10348 421458.333 848088.889 +10349 421461.111 771119.444 +10350 421483.333 964880.556 +10351 421486.111 726083.333 +10352 421486.111 746486.111 +10353 421502.778 840377.778 +10354 421513.889 879597.222 +10355 421519.444 944741.667 +10356 421538.889 881361.111 +10357 421547.222 897397.222 +10358 421550.000 710091.667 +10359 421563.889 777958.333 +10360 421577.778 787152.778 +10361 421583.333 723291.667 +10362 421591.667 795955.556 +10363 421605.556 842461.111 +10364 421608.333 880813.889 +10365 421611.111 932969.444 +10366 421619.444 770944.444 +10367 421619.444 789755.556 +10368 421625.000 710416.667 +10369 421625.000 834030.556 +10370 421630.556 1236469.444 +10371 421652.778 954366.667 +10372 421655.556 882941.667 +10373 421658.333 957927.778 +10374 421663.889 935016.667 +10375 421666.667 837816.667 +10376 421669.444 768208.333 +10377 421672.222 858469.444 +10378 421675.000 878969.444 +10379 421680.556 884280.556 +10380 421686.111 920233.333 +10381 421694.444 751297.222 +10382 421705.556 880477.778 +10383 421711.111 878444.444 +10384 421716.667 923061.111 +10385 421727.778 789480.556 +10386 421777.778 846430.556 +10387 421783.333 879977.778 +10388 421811.111 723611.111 +10389 421816.667 878002.778 +10390 421816.667 883302.778 +10391 421816.667 949766.667 +10392 421861.111 863083.333 +10393 421866.667 862605.556 +10394 421872.222 935955.556 +10395 421875.000 713069.444 +10396 421877.778 927150.000 +10397 421888.889 1203447.222 +10398 421908.333 917850.000 +10399 421916.667 1122500.000 +10400 421933.333 843911.111 +10401 421933.333 878663.889 +10402 421936.111 924652.778 +10403 421944.444 712000.000 +10404 421944.444 719063.889 +10405 421947.222 1227083.333 +10406 421955.556 741341.667 +10407 421958.333 707263.889 +10408 421958.333 733625.000 +10409 421969.444 880933.333 +10410 421986.111 765527.778 +10411 421991.667 975263.889 +10412 421997.222 878091.667 +10413 422008.333 882144.444 +10414 422011.111 855800.000 +10415 422038.889 915238.889 +10416 422041.667 726166.667 +10417 422047.222 834852.778 +10418 422050.000 845527.778 +10419 422063.889 781377.778 +10420 422066.667 861666.667 +10421 422069.444 1217361.111 +10422 422075.000 880555.556 +10423 422077.778 881405.556 +10424 422094.444 857844.444 +10425 422097.222 764936.111 +10426 422119.444 882380.556 +10427 422122.222 862719.444 +10428 422125.000 721916.667 +10429 422125.000 723458.333 +10430 422125.000 881525.000 +10431 422136.111 742191.667 +10432 422138.889 721027.778 +10433 422138.889 831938.889 +10434 422155.556 798344.444 +10435 422169.444 880494.444 +10436 422172.222 738650.000 +10437 422175.000 782755.556 +10438 422177.778 858911.111 +10439 422188.889 707861.111 +10440 422191.667 860513.889 +10441 422194.444 879794.444 +10442 422208.333 709402.778 +10443 422208.333 863694.444 +10444 422222.222 710000.000 +10445 422222.222 833966.667 +10446 422230.556 780347.222 +10447 422236.111 761836.111 +10448 422241.667 918741.667 +10449 422247.222 928744.444 +10450 422250.000 1217805.556 +10451 422272.222 1114002.778 +10452 422277.778 720472.222 +10453 422280.556 755269.444 +10454 422286.111 715230.556 +10455 422305.556 970175.000 +10456 422327.778 763427.778 +10457 422327.778 962277.778 +10458 422330.556 843272.222 +10459 422338.889 738827.778 +10460 422347.222 889488.889 +10461 422352.778 721416.667 +10462 422358.333 964722.222 +10463 422383.333 853350.000 +10464 422383.333 911869.444 +10465 422408.333 832697.222 +10466 422411.111 836130.556 +10467 422411.111 883161.111 +10468 422416.667 708902.778 +10469 422416.667 711666.667 +10470 422425.000 882019.444 +10471 422430.556 847530.556 +10472 422433.333 1138811.111 +10473 422438.889 719927.778 +10474 422444.444 831458.333 +10475 422455.556 930644.444 +10476 422458.333 712833.333 +10477 422458.333 844013.889 +10478 422458.333 1227875.000 +10479 422463.889 882427.778 +10480 422483.333 736536.111 +10481 422486.111 886083.333 +10482 422500.000 710666.667 +10483 422505.556 831786.111 +10484 422508.333 842130.556 +10485 422525.000 788058.333 +10486 422527.778 710027.778 +10487 422527.778 737913.889 +10488 422538.889 795047.222 +10489 422541.667 733666.667 +10490 422541.667 777908.333 +10491 422563.889 725166.667 +10492 422563.889 902794.444 +10493 422575.000 832111.111 +10494 422577.778 983461.111 +10495 422583.333 845997.222 +10496 422586.111 904227.778 +10497 422588.889 881391.667 +10498 422597.222 722402.778 +10499 422602.778 738100.000 +10500 422613.889 940683.333 +10501 422625.000 718027.778 +10502 422630.556 880038.889 +10503 422638.889 792588.889 +10504 422638.889 888441.667 +10505 422652.778 898258.333 +10506 422661.111 892411.111 +10507 422666.667 720833.333 +10508 422669.444 797108.333 +10509 422675.000 947336.111 +10510 422688.889 715244.444 +10511 422691.667 968647.222 +10512 422694.444 716166.667 +10513 422697.222 1047411.111 +10514 422702.778 776061.111 +10515 422702.778 945483.333 +10516 422711.111 890938.889 +10517 422711.111 950927.778 +10518 422713.889 939269.444 +10519 422722.222 849633.333 +10520 422733.333 831344.444 +10521 422750.000 786730.556 +10522 422755.556 1228169.444 +10523 422761.111 881919.444 +10524 422769.444 724013.889 +10525 422780.556 749163.889 +10526 422786.111 967263.889 +10527 422788.889 878341.667 +10528 422791.667 714166.667 +10529 422805.556 942905.556 +10530 422808.333 915302.778 +10531 422813.889 833863.889 +10532 422825.000 831752.778 +10533 422830.556 879530.556 +10534 422833.333 712333.333 +10535 422833.333 837458.333 +10536 422861.111 737391.667 +10537 422866.667 917805.556 +10538 422875.000 733208.333 +10539 422886.111 772186.111 +10540 422886.111 854180.556 +10541 422900.000 882247.222 +10542 422916.667 855872.222 +10543 422933.333 754797.222 +10544 422941.667 833100.000 +10545 422944.444 791000.000 +10546 422963.889 712930.556 +10547 422966.667 896211.111 +10548 422986.111 910147.222 +10549 422988.889 739988.889 +10550 423019.444 709083.333 +10551 423030.556 855502.778 +10552 423041.667 732486.111 +10553 423055.556 933000.000 +10554 423066.667 780161.111 +10555 423083.333 852191.667 +10556 423122.222 952502.778 +10557 423125.000 722083.333 +10558 423125.000 861130.556 +10559 423136.111 1229658.333 +10560 423138.889 893591.667 +10561 423147.222 753919.444 +10562 423147.222 884486.111 +10563 423150.000 921919.444 +10564 423152.778 934341.667 +10565 423155.556 955983.333 +10566 423177.778 902213.889 +10567 423180.556 840205.556 +10568 423188.889 851425.000 +10569 423188.889 882580.556 +10570 423194.444 716416.667 +10571 423200.000 890580.556 +10572 423208.333 713647.222 +10573 423211.111 851797.222 +10574 423216.667 964891.667 +10575 423216.667 1030725.000 +10576 423222.222 777386.111 +10577 423222.222 795783.333 +10578 423222.222 831763.889 +10579 423222.222 1112969.444 +10580 423236.111 925991.667 +10581 423241.667 834002.778 +10582 423250.000 726416.667 +10583 423252.778 753127.778 +10584 423255.556 833311.111 +10585 423255.556 878411.111 +10586 423266.667 1228744.444 +10587 423277.778 776613.889 +10588 423280.556 855697.222 +10589 423286.111 881988.889 +10590 423288.889 759680.556 +10591 423291.667 757702.778 +10592 423291.667 788683.333 +10593 423313.889 830458.333 +10594 423363.889 853522.222 +10595 423366.667 767888.889 +10596 423369.444 712097.222 +10597 423369.444 773180.556 +10598 423369.444 784583.333 +10599 423369.444 832733.333 +10600 423383.333 838886.111 +10601 423402.778 725055.556 +10602 423427.778 879980.556 +10603 423427.778 890519.444 +10604 423438.889 912483.333 +10605 423441.667 793097.222 +10606 423444.444 880416.667 +10607 423447.222 882738.889 +10608 423450.000 954713.889 +10609 423458.333 715527.778 +10610 423461.111 776616.667 +10611 423472.222 768455.556 +10612 423483.333 878841.667 +10613 423497.222 900066.667 +10614 423497.222 977916.667 +10615 423508.333 738033.333 +10616 423533.333 880933.333 +10617 423563.889 732852.778 +10618 423569.444 880766.667 +10619 423583.333 710602.778 +10620 423600.000 940519.444 +10621 423600.000 975963.889 +10622 423608.333 858794.444 +10623 423608.333 930994.444 +10624 423616.667 927683.333 +10625 423636.111 878447.222 +10626 423641.667 735952.778 +10627 423641.667 790558.333 +10628 423683.333 833527.778 +10629 423683.333 882925.000 +10630 423694.444 719486.111 +10631 423702.778 879019.444 +10632 423708.333 711833.333 +10633 423708.333 725986.111 +10634 423716.667 880900.000 +10635 423736.111 725208.333 +10636 423750.000 709833.333 +10637 423758.333 829375.000 +10638 423758.333 896330.556 +10639 423763.889 712361.111 +10640 423783.333 846986.111 +10641 423786.111 973566.667 +10642 423794.444 898222.222 +10643 423800.000 881041.667 +10644 423805.556 768736.111 +10645 423811.111 881397.222 +10646 423827.778 859569.444 +10647 423861.111 829119.444 +10648 423875.000 711000.000 +10649 423883.333 958663.889 +10650 423886.111 794413.889 +10651 423886.111 895261.111 +10652 423916.667 710333.333 +10653 423916.667 715666.667 +10654 423927.778 830497.222 +10655 423933.333 883402.778 +10656 423944.444 776969.444 +10657 423944.444 917608.333 +10658 423952.778 736983.333 +10659 423952.778 946336.111 +10660 423958.333 711791.667 +10661 423966.667 881836.111 +10662 423972.222 751738.889 +10663 423986.111 880525.000 +10664 423997.222 887402.778 +10665 424030.556 862736.111 +10666 424038.889 963583.333 +10667 424066.667 924552.778 +10668 424072.222 746147.222 +10669 424075.000 1244205.556 +10670 424077.778 772238.889 +10671 424080.556 881316.667 +10672 424083.333 710125.000 +10673 424083.333 710541.667 +10674 424086.111 882063.889 +10675 424091.667 828919.444 +10676 424094.444 774216.667 +10677 424102.778 725313.889 +10678 424105.556 880261.111 +10679 424133.333 736736.111 +10680 424133.333 890091.667 +10681 424152.778 711569.444 +10682 424155.556 964180.556 +10683 424161.111 922147.222 +10684 424166.667 716833.333 +10685 424166.667 904288.889 +10686 424169.444 880738.889 +10687 424183.333 711066.667 +10688 424222.222 886136.111 +10689 424222.222 949894.444 +10690 424227.778 721055.556 +10691 424233.333 781575.000 +10692 424247.222 941500.000 +10693 424250.000 710666.667 +10694 424263.889 709194.444 +10695 424286.111 879238.889 +10696 424286.111 1121236.111 +10697 424291.667 764952.778 +10698 424294.444 970894.444 +10699 424297.222 913308.333 +10700 424311.111 834833.333 +10701 424330.556 829241.667 +10702 424333.333 714500.000 +10703 424361.111 1231708.333 +10704 424363.889 893319.444 +10705 424366.667 828769.444 +10706 424375.000 1228577.778 +10707 424391.667 1233272.222 +10708 424394.444 837438.889 +10709 424400.000 793319.444 +10710 424400.000 856488.889 +10711 424405.556 764969.444 +10712 424408.333 736613.889 +10713 424413.889 849241.667 +10714 424416.667 760325.000 +10715 424427.778 910061.111 +10716 424433.333 850180.556 +10717 424436.111 829069.444 +10718 424444.444 716875.000 +10719 424450.000 909319.444 +10720 424461.111 878327.778 +10721 424472.222 712250.000 +10722 424500.000 732458.333 +10723 424511.111 841805.556 +10724 424513.889 844325.000 +10725 424522.222 711375.000 +10726 424527.778 750641.667 +10727 424566.667 839463.889 +10728 424577.778 986472.222 +10729 424583.333 710666.667 +10730 424583.333 713958.333 +10731 424591.667 929383.333 +10732 424594.444 764869.444 +10733 424605.556 831347.222 +10734 424605.556 836516.667 +10735 424605.556 856963.889 +10736 424613.889 777772.222 +10737 424613.889 951516.667 +10738 424625.000 831041.667 +10739 424630.556 789361.111 +10740 424641.667 926280.556 +10741 424644.444 833763.889 +10742 424647.222 710105.556 +10743 424661.111 781152.778 +10744 424666.667 709500.000 +10745 424666.667 979058.333 +10746 424669.444 922563.889 +10747 424683.333 738166.667 +10748 424683.333 791772.222 +10749 424683.333 829555.556 +10750 424683.333 896438.889 +10751 424686.111 918891.667 +10752 424688.889 922194.444 +10753 424691.667 922808.333 +10754 424694.444 938158.333 +10755 424705.556 939933.333 +10756 424708.333 709180.556 +10757 424711.111 831422.222 +10758 424716.667 884322.222 +10759 424727.778 1228016.667 +10760 424733.333 832219.444 +10761 424733.333 917341.667 +10762 424738.889 964133.333 +10763 424750.000 957852.778 +10764 424755.556 920636.111 +10765 424772.222 726083.333 +10766 424772.222 880955.556 +10767 424775.000 830277.778 +10768 424788.889 878236.111 +10769 424791.667 711527.778 +10770 424794.444 793341.667 +10771 424800.000 711000.000 +10772 424805.556 831669.444 +10773 424805.556 834755.556 +10774 424816.667 912722.222 +10775 424841.667 914552.778 +10776 424844.444 911227.778 +10777 424850.000 830277.778 +10778 424858.333 831052.778 +10779 424888.889 960722.222 +10780 424891.667 784811.111 +10781 424891.667 955447.222 +10782 424894.444 831447.222 +10783 424908.333 762975.000 +10784 424922.222 906427.778 +10785 424927.778 923427.778 +10786 424930.556 890366.667 +10787 424947.222 1078266.667 +10788 424963.889 832227.778 +10789 424963.889 899894.444 +10790 424969.444 828888.889 +10791 424972.222 829372.222 +10792 424975.000 941677.778 +10793 424983.333 883297.222 +10794 424994.444 975416.667 +10795 425000.000 708583.333 +10796 425000.000 952927.778 +10797 425000.000 964000.000 +10798 425005.556 906644.444 +10799 425022.222 775075.000 +10800 425025.000 887288.889 +10801 425030.556 831836.111 +10802 425047.222 711961.111 +10803 425061.111 972033.333 +10804 425063.889 710733.333 +10805 425083.333 890316.667 +10806 425091.667 846558.333 +10807 425144.444 907513.889 +10808 425158.333 736105.556 +10809 425158.333 832733.333 +10810 425183.333 737516.667 +10811 425194.444 708972.222 +10812 425202.778 933758.333 +10813 425222.222 833061.111 +10814 425225.000 932511.111 +10815 425233.333 769769.444 +10816 425247.222 835363.889 +10817 425250.000 717602.778 +10818 425255.556 710958.333 +10819 425272.222 964827.778 +10820 425277.778 709291.667 +10821 425277.778 924452.778 +10822 425291.667 712286.111 +10823 425291.667 858552.778 +10824 425294.444 837802.778 +10825 425297.222 1143052.778 +10826 425300.000 784730.556 +10827 425311.111 755238.889 +10828 425311.111 882480.556 +10829 425311.111 885994.444 +10830 425313.889 989777.778 +10831 425327.778 904344.444 +10832 425333.333 831463.889 +10833 425338.889 784233.333 +10834 425338.889 1143638.889 +10835 425347.222 881436.111 +10836 425358.333 1137919.444 +10837 425363.889 997002.778 +10838 425377.778 834811.111 +10839 425380.556 883508.333 +10840 425383.333 1101136.111 +10841 425388.889 710486.111 +10842 425391.667 829494.444 +10843 425422.222 766663.889 +10844 425436.111 716500.000 +10845 425441.667 791669.444 +10846 425458.333 714750.000 +10847 425463.889 711741.667 +10848 425466.667 832113.889 +10849 425486.111 752455.556 +10850 425488.889 748213.889 +10851 425500.000 998622.222 +10852 425511.111 946836.111 +10853 425536.111 882944.444 +10854 425536.111 1101086.111 +10855 425541.667 930530.556 +10856 425566.667 834738.889 +10857 425577.778 888650.000 +10858 425583.333 708805.556 +10859 425586.111 1137630.556 +10860 425608.333 776963.889 +10861 425611.111 715902.778 +10862 425630.556 1144600.000 +10863 425636.111 848358.333 +10864 425669.444 926219.444 +10865 425677.778 775900.000 +10866 425697.222 903805.556 +10867 425700.000 921602.778 +10868 425702.778 1146069.444 +10869 425733.333 902308.333 +10870 425750.000 709305.556 +10871 425750.000 719986.111 +10872 425761.111 1117297.222 +10873 425775.000 881050.000 +10874 425775.000 927866.667 +10875 425777.778 1218650.000 +10876 425780.556 885408.333 +10877 425794.444 779427.778 +10878 425802.778 830302.778 +10879 425813.889 948458.333 +10880 425819.444 724930.556 +10881 425822.222 762094.444 +10882 425833.333 718027.778 +10883 425836.111 832455.556 +10884 425841.667 886325.000 +10885 425841.667 928841.667 +10886 425847.222 878211.111 +10887 425858.333 995375.000 +10888 425875.000 726000.000 +10889 425877.778 763672.222 +10890 425883.333 959672.222 +10891 425902.778 723102.778 +10892 425905.556 749455.556 +10893 425936.111 835994.444 +10894 425938.889 861016.667 +10895 425944.444 717250.000 +10896 425952.778 789413.889 +10897 425958.333 722272.222 +10898 425961.111 760936.111 +10899 425969.444 980333.333 +10900 425972.222 828780.556 +10901 425986.111 916419.444 +10902 425988.889 976452.778 +10903 425991.667 991422.222 +10904 425991.667 1147586.111 +10905 426011.111 761808.333 +10906 426011.111 896383.333 +10907 426016.667 887075.000 +10908 426025.000 965588.889 +10909 426027.778 850930.556 +10910 426041.667 725569.444 +10911 426041.667 727397.222 +10912 426055.556 904297.222 +10913 426055.556 950025.000 +10914 426072.222 839294.444 +10915 426080.556 833438.889 +10916 426080.556 1137825.000 +10917 426083.333 720763.889 +10918 426102.778 719394.444 +10919 426111.111 715750.000 +10920 426113.889 833286.111 +10921 426122.222 884822.222 +10922 426144.444 941458.333 +10923 426152.778 770925.000 +10924 426152.778 774027.778 +10925 426158.333 706625.000 +10926 426169.444 767252.778 +10927 426183.333 825311.111 +10928 426183.333 893761.111 +10929 426191.667 1136763.889 +10930 426208.333 919000.000 +10931 426213.889 951730.556 +10932 426219.444 738330.556 +10933 426225.000 972641.667 +10934 426236.111 857602.778 +10935 426241.667 731180.556 +10936 426241.667 753319.444 +10937 426241.667 790672.222 +10938 426261.111 830336.111 +10939 426272.222 905919.444 +10940 426275.000 892530.556 +10941 426277.778 962913.889 +10942 426288.889 780547.222 +10943 426288.889 850241.667 +10944 426291.667 847388.889 +10945 426319.444 707833.333 +10946 426330.556 886436.111 +10947 426333.333 713166.667 +10948 426338.889 735541.667 +10949 426341.667 745644.444 +10950 426369.444 761791.667 +10951 426375.000 709500.000 +10952 426383.333 790280.556 +10953 426388.889 832911.111 +10954 426391.667 920469.444 +10955 426405.556 845152.778 +10956 426411.111 952094.444 +10957 426425.000 737433.333 +10958 426433.333 736091.667 +10959 426444.444 914011.111 +10960 426455.556 846488.889 +10961 426461.111 924627.778 +10962 426505.556 1121922.222 +10963 426525.000 737566.667 +10964 426538.889 739291.667 +10965 426544.444 1116038.889 +10966 426550.000 862019.444 +10967 426566.667 935008.333 +10968 426583.333 711375.000 +10969 426605.556 780858.333 +10970 426605.556 840730.556 +10971 426608.333 770541.667 +10972 426611.111 709972.222 +10973 426641.667 939041.667 +10974 426652.778 715736.111 +10975 426658.333 715888.889 +10976 426658.333 743100.000 +10977 426666.667 717055.556 +10978 426669.444 841741.667 +10979 426708.333 892088.889 +10980 426713.889 923372.222 +10981 426727.778 885444.444 +10982 426733.333 919133.333 +10983 426736.111 952902.778 +10984 426738.889 856447.222 +10985 426763.889 768233.333 +10986 426777.778 744858.333 +10987 426780.556 754988.889 +10988 426780.556 882761.111 +10989 426791.667 708416.667 +10990 426805.556 831338.889 +10991 426811.111 827369.444 +10992 426822.222 768688.889 +10993 426827.778 890186.111 +10994 426830.556 901175.000 +10995 426830.556 1034122.222 +10996 426833.333 966833.333 +10997 426836.111 915338.889 +10998 426838.889 1026894.444 +10999 426855.556 787769.444 +11000 426861.111 720444.444 +11001 426880.556 880513.889 +11002 426888.889 842830.556 +11003 426894.444 907119.444 +11004 426902.778 735650.000 +11005 426911.111 738691.667 +11006 426919.444 737250.000 +11007 426950.000 738075.000 +11008 426958.333 724533.333 +11009 426980.556 878944.444 +11010 427005.556 740341.667 +11011 427005.556 749247.222 +11012 427008.333 731091.667 +11013 427011.111 898669.444 +11014 427022.222 834027.778 +11015 427022.222 922252.778 +11016 427047.222 737552.778 +11017 427069.444 711636.111 +11018 427077.778 894369.444 +11019 427102.778 925827.778 +11020 427119.444 732041.667 +11021 427125.000 764219.444 +11022 427127.778 954363.889 +11023 427130.556 854619.444 +11024 427144.444 909905.556 +11025 427155.556 780058.333 +11026 427166.667 708791.667 +11027 427177.778 738338.889 +11028 427183.333 1024636.111 +11029 427194.444 824922.222 +11030 427197.222 962483.333 +11031 427200.000 942000.000 +11032 427202.778 1118850.000 +11033 427208.333 942150.000 +11034 427222.222 844275.000 +11035 427241.667 1145177.778 +11036 427250.000 1109311.111 +11037 427255.556 778744.444 +11038 427258.333 924752.778 +11039 427261.111 877827.778 +11040 427283.333 736922.222 +11041 427288.889 974952.778 +11042 427294.444 944475.000 +11043 427300.000 737016.667 +11044 427316.667 937327.778 +11045 427325.000 845555.556 +11046 427341.667 904783.333 +11047 427355.556 946688.889 +11048 427358.333 834188.889 +11049 427361.111 903341.667 +11050 427363.889 1234222.222 +11051 427369.444 844838.889 +11052 427400.000 781330.556 +11053 427413.889 882241.667 +11054 427419.444 932022.222 +11055 427441.667 736919.444 +11056 427455.556 895947.222 +11057 427458.333 1244961.111 +11058 427469.444 737594.444 +11059 427469.444 844011.111 +11060 427494.444 955513.889 +11061 427519.444 929752.778 +11062 427527.778 927950.000 +11063 427533.333 847463.889 +11064 427538.889 767027.778 +11065 427583.333 758847.222 +11066 427597.222 1053816.667 +11067 427600.000 772266.667 +11068 427622.222 848963.889 +11069 427622.222 849925.000 +11070 427625.000 1044516.667 +11071 427630.556 882141.667 +11072 427647.222 714402.778 +11073 427652.778 714680.556 +11074 427672.222 718127.778 +11075 427675.000 787441.667 +11076 427677.778 786136.111 +11077 427702.778 832641.667 +11078 427733.333 723836.111 +11079 427738.889 918822.222 +11080 427741.667 737005.556 +11081 427755.556 889438.889 +11082 427758.333 1147033.333 +11083 427761.111 710777.778 +11084 427794.444 969288.889 +11085 427797.222 738461.111 +11086 427802.778 892991.667 +11087 427819.444 949483.333 +11088 427844.444 832397.222 +11089 427844.444 877661.111 +11090 427847.222 851383.333 +11091 427847.222 926675.000 +11092 427852.778 884050.000 +11093 427858.333 910994.444 +11094 427861.111 724869.444 +11095 427861.111 1128536.111 +11096 427875.000 861088.889 +11097 427891.667 855166.667 +11098 427913.889 838463.889 +11099 427919.444 836277.778 +11100 427925.000 736816.667 +11101 427941.667 961652.778 +11102 427955.556 747536.111 +11103 427958.333 746175.000 +11104 427958.333 778172.222 +11105 427963.889 1122533.333 +11106 427972.222 788236.111 +11107 427977.778 837050.000 +11108 427980.556 761097.222 +11109 428027.778 830130.556 +11110 428047.222 1022027.778 +11111 428080.556 922580.556 +11112 428091.667 827558.333 +11113 428102.778 898619.444 +11114 428122.222 1148977.778 +11115 428125.000 708777.778 +11116 428125.000 860186.111 +11117 428127.778 945266.667 +11118 428138.889 720236.111 +11119 428141.667 739400.000 +11120 428144.444 837825.000 +11121 428144.444 896350.000 +11122 428147.222 959730.556 +11123 428208.333 824861.111 +11124 428213.889 776688.889 +11125 428227.778 839444.444 +11126 428238.889 721816.667 +11127 428247.222 832647.222 +11128 428255.556 788236.111 +11129 428258.333 958072.222 +11130 428263.889 739647.222 +11131 428263.889 780900.000 +11132 428263.889 842194.444 +11133 428269.444 755450.000 +11134 428288.889 965591.667 +11135 428294.444 1030000.000 +11136 428297.222 786363.889 +11137 428330.556 1087300.000 +11138 428336.111 887322.222 +11139 428352.778 716494.444 +11140 428352.778 890675.000 +11141 428386.111 841783.333 +11142 428397.222 766936.111 +11143 428405.556 1063652.778 +11144 428408.333 856636.111 +11145 428416.667 708611.111 +11146 428419.444 918019.444 +11147 428433.333 717355.556 +11148 428441.667 828844.444 +11149 428461.111 936138.889 +11150 428466.667 948516.667 +11151 428475.000 907105.556 +11152 428475.000 920913.889 +11153 428508.333 725583.333 +11154 428522.222 834430.556 +11155 428533.333 749858.333 +11156 428536.111 893702.778 +11157 428538.889 914052.778 +11158 428541.667 978969.444 +11159 428558.333 726036.111 +11160 428583.333 709305.556 +11161 428597.222 895380.556 +11162 428600.000 1062677.778 +11163 428613.889 1058716.667 +11164 428641.667 782805.556 +11165 428666.667 883333.333 +11166 428666.667 1063125.000 +11167 428666.667 1098602.778 +11168 428686.111 773358.333 +11169 428686.111 912358.333 +11170 428688.889 769780.556 +11171 428691.667 849030.556 +11172 428694.444 856447.222 +11173 428705.556 719522.222 +11174 428708.333 858650.000 +11175 428711.111 973969.444 +11176 428713.889 1124447.222 +11177 428727.778 1005505.556 +11178 428738.889 987011.111 +11179 428744.444 740469.444 +11180 428777.778 885861.111 +11181 428780.556 731972.222 +11182 428786.111 840638.889 +11183 428791.667 752513.889 +11184 428794.444 884741.667 +11185 428805.556 713277.778 +11186 428813.889 882066.667 +11187 428836.111 1240719.444 +11188 428852.778 751936.111 +11189 428852.778 909233.333 +11190 428858.333 878630.556 +11191 428863.889 788786.111 +11192 428902.778 843513.889 +11193 428905.556 785780.556 +11194 428933.333 787941.667 +11195 428933.333 932150.000 +11196 428933.333 951508.333 +11197 428944.444 739283.333 +11198 428950.000 774350.000 +11199 428958.333 928022.222 +11200 428963.889 827688.889 +11201 428986.111 756405.556 +11202 429000.000 735858.333 +11203 429000.000 784922.222 +11204 429000.000 904308.333 +11205 429005.556 786705.556 +11206 429011.111 733519.444 +11207 429022.222 774200.000 +11208 429027.778 736877.778 +11209 429033.333 735630.556 +11210 429038.889 786925.000 +11211 429041.667 722083.333 +11212 429047.222 768630.556 +11213 429047.222 776116.667 +11214 429055.556 745722.222 +11215 429058.333 881388.889 +11216 429061.111 1085827.778 +11217 429072.222 857919.444 +11218 429086.111 765405.556 +11219 429097.222 857630.556 +11220 429105.556 767969.444 +11221 429105.556 878605.556 +11222 429108.333 745744.444 +11223 429113.889 988488.889 +11224 429119.444 777458.333 +11225 429119.444 839847.222 +11226 429125.000 824869.444 +11227 429133.333 857052.778 +11228 429169.444 835063.889 +11229 429169.444 892177.778 +11230 429188.889 767266.667 +11231 429205.556 830450.000 +11232 429208.333 1124652.778 +11233 429261.111 893844.444 +11234 429275.000 836300.000 +11235 429275.000 1232800.000 +11236 429288.889 888369.444 +11237 429294.444 847986.111 +11238 429294.444 852130.556 +11239 429300.000 758530.556 +11240 429302.778 732430.556 +11241 429313.889 746230.556 +11242 429316.667 765663.889 +11243 429336.111 722786.111 +11244 429336.111 853419.444 +11245 429344.444 884052.778 +11246 429347.222 746138.889 +11247 429361.111 1144050.000 +11248 429375.000 708394.444 +11249 429375.000 880486.111 +11250 429377.778 937930.556 +11251 429386.111 737902.778 +11252 429386.111 741886.111 +11253 429386.111 919500.000 +11254 429388.889 1147122.222 +11255 429391.667 754613.889 +11256 429391.667 840294.444 +11257 429405.556 879958.333 +11258 429411.111 856100.000 +11259 429413.889 832891.667 +11260 429441.667 1128375.000 +11261 429461.111 831238.889 +11262 429469.444 764294.444 +11263 429477.778 743708.333 +11264 429511.111 1233630.556 +11265 429522.222 775905.556 +11266 429527.778 925361.111 +11267 429544.444 743769.444 +11268 429550.000 1153000.000 +11269 429552.778 742855.556 +11270 429558.333 772211.111 +11271 429569.444 944408.333 +11272 429572.222 838305.556 +11273 429575.000 770577.778 +11274 429575.000 916305.556 +11275 429583.333 742333.333 +11276 429597.222 878613.889 +11277 429600.000 784058.333 +11278 429602.778 901300.000 +11279 429613.889 880125.000 +11280 429616.667 771402.778 +11281 429627.778 918080.556 +11282 429638.889 787380.556 +11283 429644.444 825230.556 +11284 429647.222 786777.778 +11285 429652.778 921994.444 +11286 429658.333 788702.778 +11287 429697.222 772305.556 +11288 429708.333 824250.000 +11289 429716.667 904330.556 +11290 429730.556 778530.556 +11291 429741.667 954972.222 +11292 429744.444 741513.889 +11293 429747.222 963180.556 +11294 429763.889 881083.333 +11295 429783.333 779844.444 +11296 429791.667 956877.778 +11297 429813.889 709483.333 +11298 429819.444 841177.778 +11299 429819.444 849469.444 +11300 429825.000 774091.667 +11301 429827.778 763408.333 +11302 429836.111 906552.778 +11303 429852.778 931916.667 +11304 429855.556 839283.333 +11305 429872.222 850711.111 +11306 429875.000 960102.778 +11307 429908.333 895330.556 +11308 429933.333 978625.000 +11309 429955.556 714552.778 +11310 429958.333 849425.000 +11311 429958.333 964850.000 +11312 429977.778 841766.667 +11313 429980.556 781877.778 +11314 430008.333 738494.444 +11315 430013.889 857680.556 +11316 430016.667 847397.222 +11317 430019.444 759772.222 +11318 430022.222 899902.778 +11319 430036.111 890163.889 +11320 430036.111 916522.222 +11321 430044.444 883766.667 +11322 430050.000 980594.444 +11323 430055.556 888072.222 +11324 430058.333 843716.667 +11325 430066.667 743680.556 +11326 430069.444 936027.778 +11327 430072.222 960580.556 +11328 430077.778 842847.222 +11329 430086.111 897383.333 +11330 430105.556 786377.778 +11331 430113.889 750044.444 +11332 430116.667 882313.889 +11333 430125.000 829280.556 +11334 430125.000 836875.000 +11335 430125.000 879725.000 +11336 430125.000 892897.222 +11337 430141.667 884725.000 +11338 430150.000 750358.333 +11339 430155.556 898952.778 +11340 430166.667 880069.444 +11341 430183.333 911825.000 +11342 430202.778 788805.556 +11343 430202.778 1232919.444 +11344 430208.333 784955.556 +11345 430213.889 966305.556 +11346 430247.222 830777.778 +11347 430250.000 1083794.444 +11348 430255.556 749863.889 +11349 430255.556 1025558.333 +11350 430258.333 777455.556 +11351 430280.556 733816.667 +11352 430297.222 760047.222 +11353 430333.333 710747.222 +11354 430344.444 764483.333 +11355 430344.444 766241.667 +11356 430347.222 835180.556 +11357 430361.111 711838.889 +11358 430386.111 788644.444 +11359 430386.111 856700.000 +11360 430388.889 750708.333 +11361 430388.889 879063.889 +11362 430391.667 763044.444 +11363 430430.556 880788.889 +11364 430433.333 748600.000 +11365 430444.444 911780.556 +11366 430450.000 758669.444 +11367 430466.667 770955.556 +11368 430466.667 903797.222 +11369 430472.222 762388.889 +11370 430475.000 762208.333 +11371 430480.556 761477.778 +11372 430483.333 753788.889 +11373 430486.111 765630.556 +11374 430494.444 880075.000 +11375 430513.889 833188.889 +11376 430516.667 911411.111 +11377 430516.667 913891.667 +11378 430519.444 890755.556 +11379 430522.222 929483.333 +11380 430527.778 743441.667 +11381 430580.556 762077.778 +11382 430586.111 741969.444 +11383 430591.667 923175.000 +11384 430605.556 881063.889 +11385 430608.333 884036.111 +11386 430619.444 944266.667 +11387 430622.222 893338.889 +11388 430630.556 838511.111 +11389 430630.556 862283.333 +11390 430638.889 772336.111 +11391 430638.889 859347.222 +11392 430641.667 769905.556 +11393 430650.000 1241377.778 +11394 430652.778 760788.889 +11395 430652.778 764733.333 +11396 430655.556 952836.111 +11397 430658.333 782700.000 +11398 430663.889 926722.222 +11399 430691.667 772991.667 +11400 430700.000 942327.778 +11401 430705.556 921500.000 +11402 430716.667 707630.556 +11403 430719.444 959041.667 +11404 430730.556 894011.111 +11405 430733.333 752880.556 +11406 430736.111 755986.111 +11407 430747.222 731544.444 +11408 430752.778 757072.222 +11409 430761.111 760011.111 +11410 430761.111 887741.667 +11411 430761.111 891994.444 +11412 430769.444 861969.444 +11413 430772.222 781872.222 +11414 430775.000 894455.556 +11415 430794.444 755397.222 +11416 430794.444 757511.111 +11417 430797.222 961752.778 +11418 430797.222 982927.778 +11419 430805.556 882611.111 +11420 430805.556 967733.333 +11421 430813.889 889116.667 +11422 430825.000 756338.889 +11423 430830.556 737850.000 +11424 430830.556 971602.778 +11425 430841.667 768697.222 +11426 430844.444 862202.778 +11427 430847.222 915680.556 +11428 430852.778 779425.000 +11429 430852.778 908830.556 +11430 430858.333 706975.000 +11431 430869.444 956269.444 +11432 430880.556 707366.667 +11433 430883.333 939900.000 +11434 430886.111 843869.444 +11435 430891.667 878875.000 +11436 430905.556 734991.667 +11437 430905.556 775152.778 +11438 430922.222 753800.000 +11439 430925.000 756516.667 +11440 430944.444 790569.444 +11441 430966.667 714655.556 +11442 430972.222 895041.667 +11443 430977.778 761455.556 +11444 430977.778 852288.889 +11445 430977.778 884022.222 +11446 430977.778 938016.667 +11447 430986.111 774422.222 +11448 431000.000 735822.222 +11449 431008.333 747733.333 +11450 431008.333 752330.556 +11451 431025.000 936016.667 +11452 431044.444 742652.778 +11453 431044.444 884591.667 +11454 431047.222 846919.444 +11455 431050.000 883419.444 +11456 431052.778 752916.667 +11457 431058.333 880694.444 +11458 431063.889 762180.556 +11459 431080.556 707780.556 +11460 431086.111 774877.778 +11461 431116.667 883922.222 +11462 431116.667 884991.667 +11463 431127.778 752713.889 +11464 431127.778 946827.778 +11465 431133.333 879000.000 +11466 431144.444 896555.556 +11467 431152.778 761461.111 +11468 431166.667 839700.000 +11469 431183.333 893794.444 +11470 431186.111 836950.000 +11471 431191.667 1244072.222 +11472 431194.444 969611.111 +11473 431200.000 855600.000 +11474 431219.444 752919.444 +11475 431225.000 1234113.889 +11476 431263.889 934775.000 +11477 431291.667 948988.889 +11478 431305.556 714536.111 +11479 431319.444 861547.222 +11480 431330.556 1156902.778 +11481 431333.333 724444.444 +11482 431338.889 709269.444 +11483 431338.889 882219.444 +11484 431344.444 907052.778 +11485 431347.222 761302.778 +11486 431372.222 897466.667 +11487 431377.778 725102.778 +11488 431380.556 755711.111 +11489 431413.889 951441.667 +11490 431427.778 930041.667 +11491 431433.333 771894.444 +11492 431461.111 881661.111 +11493 431463.889 917644.444 +11494 431466.667 883066.667 +11495 431497.222 977172.222 +11496 431500.000 786969.444 +11497 431536.111 932008.333 +11498 431547.222 776158.333 +11499 431563.889 985411.111 +11500 431566.667 834105.556 +11501 431572.222 753330.556 +11502 431575.000 879016.667 +11503 431586.111 763330.556 +11504 431600.000 953272.222 +11505 431605.556 1233666.667 +11506 431608.333 857100.000 +11507 431633.333 879644.444 +11508 431636.111 730727.778 +11509 431661.111 835244.444 +11510 431683.333 890666.667 +11511 431688.889 862638.889 +11512 431702.778 970811.111 +11513 431705.556 786905.556 +11514 431722.222 733280.556 +11515 431725.000 790361.111 +11516 431725.000 1017322.222 +11517 431741.667 879241.667 +11518 431752.778 900677.778 +11519 431766.667 838927.778 +11520 431766.667 897947.222 +11521 431769.444 730575.000 +11522 431769.444 848463.889 +11523 431772.222 1241863.889 +11524 431775.000 837341.667 +11525 431775.000 852527.778 +11526 431788.889 881172.222 +11527 431797.222 718227.778 +11528 431800.000 954766.667 +11529 431805.556 879005.556 +11530 431811.111 958558.333 +11531 431816.667 956552.778 +11532 431819.444 903244.444 +11533 431825.000 992916.667 +11534 431836.111 892136.111 +11535 431836.111 918638.889 +11536 431838.889 889883.333 +11537 431847.222 841150.000 +11538 431850.000 904430.556 +11539 431863.889 778041.667 +11540 431866.667 844744.444 +11541 431886.111 961333.333 +11542 431905.556 1123441.667 +11543 431911.111 960055.556 +11544 431919.444 894555.556 +11545 431947.222 887288.889 +11546 431972.222 766547.222 +11547 431975.000 942194.444 +11548 431977.778 708741.667 +11549 431991.667 785763.889 +11550 432011.111 862388.889 +11551 432052.778 962947.222 +11552 432080.556 715380.556 +11553 432097.222 776933.333 +11554 432122.222 774302.778 +11555 432122.222 829897.222 +11556 432122.222 850736.111 +11557 432136.111 779394.444 +11558 432166.667 1233405.556 +11559 432200.000 783872.222 +11560 432200.000 857511.111 +11561 432205.556 768152.778 +11562 432219.444 717144.444 +11563 432233.333 855513.889 +11564 432238.889 771863.889 +11565 432255.556 750616.667 +11566 432255.556 979655.556 +11567 432263.889 780269.444 +11568 432294.444 831966.667 +11569 432311.111 763011.111 +11570 432322.222 994300.000 +11571 432341.667 862483.333 +11572 432344.444 708100.000 +11573 432358.333 1081097.222 +11574 432361.111 708208.333 +11575 432363.889 879844.444 +11576 432369.444 940411.111 +11577 432375.000 879786.111 +11578 432377.778 770616.667 +11579 432377.778 947511.111 +11580 432380.556 761411.111 +11581 432386.111 724250.000 +11582 432386.111 789100.000 +11583 432397.222 975775.000 +11584 432402.778 758841.667 +11585 432416.667 752572.222 +11586 432444.444 738327.778 +11587 432463.889 781938.889 +11588 432466.667 924358.333 +11589 432472.222 767238.889 +11590 432472.222 790502.778 +11591 432477.778 760005.556 +11592 432488.889 705997.222 +11593 432505.556 895013.889 +11594 432508.333 837941.667 +11595 432547.222 861097.222 +11596 432561.111 862675.000 +11597 432586.111 828175.000 +11598 432616.667 708658.333 +11599 432625.000 936369.444 +11600 432658.333 708650.000 +11601 432669.444 735850.000 +11602 432680.556 825308.333 +11603 432694.444 914755.556 +11604 432708.333 897219.444 +11605 432716.667 769894.444 +11606 432755.556 826211.111 +11607 432788.889 900436.111 +11608 432794.444 962325.000 +11609 432813.889 835297.222 +11610 432841.667 928108.333 +11611 432866.667 761463.889 +11612 432866.667 787105.556 +11613 432869.444 897238.889 +11614 432872.222 932019.444 +11615 432880.556 777936.111 +11616 432916.667 846075.000 +11617 432925.000 850813.889 +11618 432927.778 942177.778 +11619 432947.222 945113.889 +11620 432966.667 879875.000 +11621 432983.333 724827.778 +11622 432991.667 736355.556 +11623 433000.000 736844.444 +11624 433005.556 735863.889 +11625 433008.333 965925.000 +11626 433011.111 1038250.000 +11627 433033.333 917855.556 +11628 433036.111 707338.889 +11629 433044.444 709761.111 +11630 433050.000 888447.222 +11631 433058.333 713247.222 +11632 433058.333 1006577.778 +11633 433072.222 964316.667 +11634 433094.444 736444.444 +11635 433097.222 788263.889 +11636 433102.778 885180.556 +11637 433138.889 895263.889 +11638 433175.000 908447.222 +11639 433177.778 883788.889 +11640 433186.111 983463.889 +11641 433197.222 879533.333 +11642 433211.111 765791.667 +11643 433227.778 764175.000 +11644 433238.889 881666.667 +11645 433247.222 951497.222 +11646 433266.667 783891.667 +11647 433269.444 751872.222 +11648 433269.444 830802.778 +11649 433300.000 785550.000 +11650 433316.667 837380.556 +11651 433336.111 882861.111 +11652 433344.444 757483.333 +11653 433347.222 903866.667 +11654 433361.111 858108.333 +11655 433369.444 833525.000 +11656 433377.778 787150.000 +11657 433380.556 890152.778 +11658 433438.889 960019.444 +11659 433525.000 974369.444 +11660 433541.667 968916.667 +11661 433561.111 1242036.111 +11662 433616.667 704772.222 +11663 433622.222 912163.889 +11664 433636.111 1241916.667 +11665 433638.889 925538.889 +11666 433652.778 721738.889 +11667 433680.556 1242158.333 +11668 433713.889 937733.333 +11669 433719.444 835833.333 +11670 433766.667 723472.222 +11671 433766.667 998586.111 +11672 433788.889 846597.222 +11673 433813.889 921138.889 +11674 433813.889 1121225.000 +11675 433816.667 879405.556 +11676 433838.889 705452.778 +11677 433844.444 890450.000 +11678 433858.333 939463.889 +11679 433863.889 951480.556 +11680 433869.444 988441.667 +11681 433872.222 878755.556 +11682 433897.222 710655.556 +11683 433902.778 894027.778 +11684 433902.778 1233113.889 +11685 433952.778 907741.667 +11686 433955.556 854677.778 +11687 433958.333 727011.111 +11688 433961.111 944780.556 +11689 433975.000 971361.111 +11690 433980.556 764777.778 +11691 433988.889 979833.333 +11692 433991.667 957516.667 +11693 433997.222 885325.000 +11694 434016.667 948325.000 +11695 434055.556 887050.000 +11696 434061.111 761261.111 +11697 434066.667 1242230.556 +11698 434077.778 732600.000 +11699 434080.556 844750.000 +11700 434080.556 850386.111 +11701 434097.222 843288.889 +11702 434100.000 863486.111 +11703 434113.889 1062794.444 +11704 434130.556 1062488.889 +11705 434138.889 719855.556 +11706 434141.667 734880.556 +11707 434147.222 842305.556 +11708 434161.111 955344.444 +11709 434166.667 863569.444 +11710 434194.444 839508.333 +11711 434194.444 935330.556 +11712 434197.222 858000.000 +11713 434202.778 828297.222 +11714 434222.222 951019.444 +11715 434222.222 1232972.222 +11716 434230.556 972602.778 +11717 434252.778 881833.333 +11718 434252.778 984069.444 +11719 434261.111 737127.778 +11720 434269.444 826713.889 +11721 434272.222 961755.556 +11722 434308.333 825425.000 +11723 434313.889 966969.444 +11724 434316.667 880463.889 +11725 434316.667 1034738.889 +11726 434361.111 927822.222 +11727 434391.667 707747.222 +11728 434441.667 716477.778 +11729 434441.667 932208.333 +11730 434463.889 968355.556 +11731 434477.778 892397.222 +11732 434505.556 836963.889 +11733 434513.889 886311.111 +11734 434536.111 964338.889 +11735 434552.778 765108.333 +11736 434555.556 953205.556 +11737 434577.778 888372.222 +11738 434586.111 839302.778 +11739 434594.444 762291.667 +11740 434597.222 898683.333 +11741 434636.111 1142597.222 +11742 434666.667 707941.667 +11743 434666.667 1120333.333 +11744 434675.000 859419.444 +11745 434697.222 1119658.333 +11746 434705.556 879505.556 +11747 434711.111 897441.667 +11748 434716.667 729777.778 +11749 434744.444 897702.778 +11750 434763.889 839205.556 +11751 434800.000 1107616.667 +11752 434836.111 753369.444 +11753 434908.333 854438.889 +11754 434911.111 833969.444 +11755 434919.444 1164191.667 +11756 434925.000 704538.889 +11757 434941.667 885447.222 +11758 434958.333 893083.333 +11759 434966.667 737766.667 +11760 434966.667 912894.444 +11761 434997.222 878502.778 +11762 435008.333 704433.333 +11763 435050.000 940877.778 +11764 435052.778 929438.889 +11765 435061.111 906680.556 +11766 435072.222 863475.000 +11767 435097.222 925036.111 +11768 435169.444 732366.667 +11769 435172.222 703780.556 +11770 435172.222 884511.111 +11771 435180.556 960180.556 +11772 435197.222 1143144.444 +11773 435205.556 917694.444 +11774 435208.333 882288.889 +11775 435236.111 835433.333 +11776 435244.444 846947.222 +11777 435250.000 841227.778 +11778 435263.889 1119322.222 +11779 435266.667 827352.778 +11780 435277.778 714708.333 +11781 435280.556 963583.333 +11782 435325.000 900025.000 +11783 435336.111 946313.889 +11784 435336.111 1096297.222 +11785 435363.889 937119.444 +11786 435377.778 893000.000 +11787 435391.667 890066.667 +11788 435391.667 894625.000 +11789 435408.333 1165625.000 +11790 435422.222 891072.222 +11791 435455.556 1168122.222 +11792 435500.000 967000.000 +11793 435502.778 857719.444 +11794 435516.667 975072.222 +11795 435522.222 879616.667 +11796 435552.778 920100.000 +11797 435555.556 734041.667 +11798 435569.444 908886.111 +11799 435591.667 863455.556 +11800 435611.111 916358.333 +11801 435641.667 1190800.000 +11802 435652.778 927191.667 +11803 435655.556 889063.889 +11804 435669.444 761280.556 +11805 435680.556 835141.667 +11806 435680.556 1007450.000 +11807 435688.889 860394.444 +11808 435697.222 878233.333 +11809 435725.000 932811.111 +11810 435758.333 1241738.889 +11811 435780.556 703222.222 +11812 435825.000 964675.000 +11813 435830.556 753455.556 +11814 435838.889 712077.778 +11815 435863.889 1190530.556 +11816 435911.111 717372.222 +11817 435913.889 884436.111 +11818 435930.556 730455.556 +11819 435944.444 838888.889 +11820 435947.222 732661.111 +11821 435963.889 1119630.556 +11822 435977.778 882788.889 +11823 435977.778 972902.778 +11824 435986.111 1232822.222 +11825 436008.333 831747.222 +11826 436011.111 897936.111 +11827 436033.333 840697.222 +11828 436086.111 863638.889 +11829 436105.556 729730.556 +11830 436122.222 1163905.556 +11831 436152.778 838419.444 +11832 436155.556 842472.222 +11833 436177.778 1169327.778 +11834 436191.667 879519.444 +11835 436200.000 955961.111 +11836 436208.333 949883.333 +11837 436222.222 1162372.222 +11838 436227.778 877944.444 +11839 436230.556 969422.222 +11840 436241.667 725188.889 +11841 436252.778 753675.000 +11842 436275.000 897708.333 +11843 436319.444 1117727.778 +11844 436333.333 887294.444 +11845 436347.222 914966.667 +11846 436350.000 959325.000 +11847 436366.667 1132994.444 +11848 436375.000 941019.444 +11849 436405.556 721444.444 +11850 436413.889 702413.889 +11851 436422.222 722522.222 +11852 436433.333 760688.889 +11853 436441.667 760863.889 +11854 436461.111 1082113.889 +11855 436480.556 933680.556 +11856 436488.889 723197.222 +11857 436522.222 903438.889 +11858 436522.222 944608.333 +11859 436522.222 947266.667 +11860 436527.778 902233.333 +11861 436536.111 834661.111 +11862 436536.111 977825.000 +11863 436541.667 962125.000 +11864 436569.444 908541.667 +11865 436575.000 715008.333 +11866 436583.333 880069.444 +11867 436588.889 1233175.000 +11868 436613.889 702558.333 +11869 436619.444 912183.333 +11870 436630.556 1166863.889 +11871 436647.222 968105.556 +11872 436666.667 929744.444 +11873 436669.444 946191.667 +11874 436702.778 920830.556 +11875 436702.778 935758.333 +11876 436713.889 1168152.778 +11877 436725.000 1119141.667 +11878 436727.778 723091.667 +11879 436727.778 843805.556 +11880 436766.667 1169108.333 +11881 436769.444 703716.667 +11882 436775.000 951713.889 +11883 436794.444 704447.222 +11884 436808.333 1143627.778 +11885 436861.111 885463.889 +11886 436869.444 923888.889 +11887 436936.111 883608.333 +11888 436952.778 716311.111 +11889 436958.333 1120097.222 +11890 436972.222 1143508.333 +11891 436980.556 854836.111 +11892 436983.333 863638.889 +11893 436986.111 954683.333 +11894 437022.222 722900.000 +11895 437022.222 910130.556 +11896 437025.000 1240955.556 +11897 437058.333 925719.444 +11898 437066.667 730286.111 +11899 437069.444 1166191.667 +11900 437072.222 889900.000 +11901 437094.444 980294.444 +11902 437097.222 929694.444 +11903 437100.000 749747.222 +11904 437100.000 829316.667 +11905 437155.556 984847.222 +11906 437175.000 965025.000 +11907 437208.333 919766.667 +11908 437208.333 1119891.667 +11909 437233.333 1111105.556 +11910 437241.667 973886.111 +11911 437291.667 878105.556 +11912 437322.222 834511.111 +11913 437347.222 702083.333 +11914 437352.778 887811.111 +11915 437402.778 928691.667 +11916 437408.333 902722.222 +11917 437419.444 907791.667 +11918 437461.111 937286.111 +11919 437466.667 989580.556 +11920 437466.667 1224605.556 +11921 437486.111 879769.444 +11922 437508.333 877144.444 +11923 437566.667 845858.333 +11924 437569.444 716886.111 +11925 437594.444 913463.889 +11926 437613.889 967400.000 +11927 437622.222 947069.444 +11928 437633.333 915683.333 +11929 437638.889 933288.889 +11930 437666.667 1035983.333 +11931 437677.778 941655.556 +11932 437730.556 884469.444 +11933 437816.667 864330.556 +11934 437852.778 1169422.222 +11935 437861.111 969272.222 +11936 437866.667 754922.222 +11937 437913.889 893197.222 +11938 437950.000 953200.000 +11939 437963.889 702594.444 +11940 437972.222 900772.222 +11941 437977.778 1230583.333 +11942 437980.556 730880.556 +11943 438005.556 701872.222 +11944 438013.889 912394.444 +11945 438019.444 830008.333 +11946 438066.667 917913.889 +11947 438077.778 886747.222 +11948 438083.333 917527.778 +11949 438108.333 993302.778 +11950 438113.889 884833.333 +11951 438194.444 831808.333 +11952 438194.444 847686.111 +11953 438261.111 967058.333 +11954 438261.111 1117888.889 +11955 438263.889 882461.111 +11956 438277.778 944369.444 +11957 438300.000 832700.000 +11958 438305.556 906213.889 +11959 438333.333 726344.444 +11960 438333.333 880177.778 +11961 438338.889 878200.000 +11962 438338.889 1015094.444 +11963 438341.667 704388.889 +11964 438350.000 848669.444 +11965 438419.444 938316.667 +11966 438422.222 888358.333 +11967 438441.667 889600.000 +11968 438447.222 826513.889 +11969 438455.556 921888.889 +11970 438486.111 734238.889 +11971 438500.000 963983.333 +11972 438508.333 891216.667 +11973 438522.222 696286.111 +11974 438536.111 839650.000 +11975 438547.222 1042044.444 +11976 438555.556 924883.333 +11977 438569.444 701036.111 +11978 438600.000 760058.333 +11979 438663.889 951166.667 +11980 438666.667 930508.333 +11981 438705.556 956000.000 +11982 438725.000 961283.333 +11983 438727.778 933011.111 +11984 438730.556 1117475.000 +11985 438736.111 1164983.333 +11986 438750.000 855100.000 +11987 438769.444 1169938.889 +11988 438791.667 901652.778 +11989 438822.222 844847.222 +11990 438836.111 894933.333 +11991 438844.444 912350.000 +11992 438866.667 1116769.444 +11993 438880.556 941563.889 +11994 438883.333 1007125.000 +11995 438905.556 928475.000 +11996 438930.556 909902.778 +11997 438933.333 756738.889 +11998 438938.889 934936.111 +11999 438958.333 753927.778 +12000 438991.667 910811.111 +12001 439005.556 852580.556 +12002 439011.111 858516.667 +12003 439097.222 1000583.333 +12004 439105.556 698211.111 +12005 439125.000 880355.556 +12006 439144.444 699658.333 +12007 439147.222 1136125.000 +12008 439147.222 1161969.444 +12009 439150.000 877472.222 +12010 439180.556 1230233.333 +12011 439186.111 1227825.000 +12012 439225.000 902713.889 +12013 439250.000 726663.889 +12014 439275.000 699763.889 +12015 439288.889 939558.333 +12016 439325.000 1035747.222 +12017 439388.889 949294.444 +12018 439394.444 829969.444 +12019 439411.111 832713.889 +12020 439441.667 908127.778 +12021 439461.111 761194.444 +12022 439500.000 880841.667 +12023 439547.222 862800.000 +12024 439552.778 864525.000 +12025 439583.333 947944.444 +12026 439633.333 912561.111 +12027 439680.556 889433.333 +12028 439700.000 1168180.556 +12029 439705.556 898166.667 +12030 439741.667 756155.556 +12031 439747.222 759111.111 +12032 439780.556 756097.222 +12033 439786.111 905038.889 +12034 439791.667 711208.333 +12035 439808.333 844863.889 +12036 439822.222 1172372.222 +12037 439825.000 968141.667 +12038 439827.778 1240986.111 +12039 439830.556 839588.889 +12040 439844.444 918691.667 +12041 439877.778 957555.556 +12042 439883.333 922283.333 +12043 439925.000 721294.444 +12044 439925.000 1022411.111 +12045 439961.111 700611.111 +12046 440005.556 963172.222 +12047 440011.111 759666.667 +12048 440047.222 940655.556 +12049 440055.556 914419.444 +12050 440061.111 971136.111 +12051 440077.778 760447.222 +12052 440077.778 1169155.556 +12053 440108.333 975263.889 +12054 440125.000 757947.222 +12055 440152.778 731677.778 +12056 440163.889 709811.111 +12057 440169.444 1079547.222 +12058 440191.667 847994.444 +12059 440216.667 924697.222 +12060 440247.222 885425.000 +12061 440261.111 900738.889 +12062 440266.667 1169619.444 +12063 440275.000 917697.222 +12064 440280.556 928544.444 +12065 440288.889 881627.778 +12066 440300.000 927505.556 +12067 440327.778 926452.778 +12068 440394.444 887441.667 +12069 440394.444 1016647.222 +12070 440419.444 890983.333 +12071 440422.222 954358.333 +12072 440444.444 929975.000 +12073 440461.111 829941.667 +12074 440463.889 1230208.333 +12075 440483.333 734602.778 +12076 440486.111 836958.333 +12077 440488.889 1233497.222 +12078 440494.444 965950.000 +12079 440500.000 916391.667 +12080 440508.333 944180.556 +12081 440522.222 1230855.556 +12082 440536.111 711288.889 +12083 440536.111 982752.778 +12084 440547.222 707133.333 +12085 440583.333 1213141.667 +12086 440625.000 916955.556 +12087 440661.111 878841.667 +12088 440669.444 761305.556 +12089 440691.667 927555.556 +12090 440716.667 882988.889 +12091 440716.667 1114475.000 +12092 440747.222 892877.778 +12093 440758.333 885250.000 +12094 440777.778 935072.222 +12095 440783.333 1169327.778 +12096 440788.889 691822.222 +12097 440791.667 985691.667 +12098 440805.556 1032305.556 +12099 440816.667 913488.889 +12100 440838.889 932258.333 +12101 440872.222 697994.444 +12102 440880.556 758075.000 +12103 440886.111 876575.000 +12104 440952.778 693761.111 +12105 440977.778 702316.667 +12106 440977.778 918166.667 +12107 440997.222 1046275.000 +12108 441002.778 702152.778 +12109 441025.000 851469.444 +12110 441036.111 691094.444 +12111 441036.111 1231300.000 +12112 441058.333 942186.111 +12113 441102.778 949044.444 +12114 441108.333 887125.000 +12115 441116.667 703922.222 +12116 441125.000 1030677.778 +12117 441161.111 937077.778 +12118 441197.222 701080.556 +12119 441277.778 763333.333 +12120 441302.778 922513.889 +12121 441305.556 909980.556 +12122 441319.444 917186.111 +12123 441333.333 730794.444 +12124 441372.222 1230652.778 +12125 441402.778 881638.889 +12126 441447.222 878213.889 +12127 441511.111 726569.444 +12128 441511.111 1033075.000 +12129 441522.222 720377.778 +12130 441536.111 879566.667 +12131 441536.111 928994.444 +12132 441538.889 875691.667 +12133 441544.444 757091.667 +12134 441572.222 1088708.333 +12135 441597.222 750319.444 +12136 441636.111 939991.667 +12137 441650.000 921713.889 +12138 441650.000 938811.111 +12139 441661.111 925347.222 +12140 441672.222 732544.444 +12141 441733.333 940336.111 +12142 441741.667 932461.111 +12143 441769.444 725061.111 +12144 441772.222 880641.667 +12145 441838.889 734361.111 +12146 441858.333 884625.000 +12147 441936.111 852133.333 +12148 441969.444 725025.000 +12149 441991.667 756072.222 +12150 441994.444 877213.889 +12151 442013.889 926461.111 +12152 442022.222 884463.889 +12153 442044.444 938152.778 +12154 442097.222 690652.778 +12155 442097.222 951283.333 +12156 442133.333 719113.889 +12157 442138.889 705452.778 +12158 442138.889 894922.222 +12159 442152.778 757975.000 +12160 442188.889 935677.778 +12161 442194.444 1232044.444 +12162 442230.556 954691.667 +12163 442236.111 705138.889 +12164 442272.222 934444.444 +12165 442275.000 918350.000 +12166 442300.000 697758.333 +12167 442302.778 697672.222 +12168 442311.111 952638.889 +12169 442333.333 956188.889 +12170 442333.333 958719.444 +12171 442361.111 964808.333 +12172 442388.889 949755.556 +12173 442391.667 876411.111 +12174 442394.444 760861.111 +12175 442444.444 697719.444 +12176 442444.444 862961.111 +12177 442444.444 863241.667 +12178 442511.111 1169683.333 +12179 442519.444 854011.111 +12180 442527.778 915013.889 +12181 442597.222 888647.222 +12182 442600.000 725758.333 +12183 442611.111 962872.222 +12184 442619.444 884152.778 +12185 442633.333 1049497.222 +12186 442658.333 883141.667 +12187 442694.444 835147.222 +12188 442722.222 883388.889 +12189 442722.222 929852.778 +12190 442727.778 1211727.778 +12191 442730.556 925447.222 +12192 442741.667 1231694.444 +12193 442761.111 941872.222 +12194 442763.889 842386.111 +12195 442780.556 724269.444 +12196 442780.556 882719.444 +12197 442783.333 961344.444 +12198 442794.444 739802.778 +12199 442794.444 834902.778 +12200 442797.222 683255.556 +12201 442800.000 883183.333 +12202 442841.667 966852.778 +12203 442858.333 697913.889 +12204 442911.111 1055016.667 +12205 442911.111 1215480.556 +12206 442925.000 939647.222 +12207 442941.667 926688.889 +12208 442944.444 912350.000 +12209 442947.222 908513.889 +12210 442950.000 932686.111 +12211 442972.222 947238.889 +12212 443044.444 927902.778 +12213 443050.000 699775.000 +12214 443061.111 717705.556 +12215 443105.556 697800.000 +12216 443113.889 967980.556 +12217 443125.000 899041.667 +12218 443125.000 944602.778 +12219 443147.222 847647.222 +12220 443200.000 919147.222 +12221 443213.889 889336.111 +12222 443236.111 969261.111 +12223 443244.444 752513.889 +12224 443255.556 938375.000 +12225 443258.333 881627.778 +12226 443294.444 741316.667 +12227 443347.222 886380.556 +12228 443352.778 852150.000 +12229 443358.333 759180.556 +12230 443366.667 754633.333 +12231 443377.778 727566.667 +12232 443477.778 878272.222 +12233 443483.333 1066983.333 +12234 443508.333 898652.778 +12235 443513.889 1172655.556 +12236 443522.222 1037647.222 +12237 443536.111 1003733.333 +12238 443569.444 914202.778 +12239 443580.556 890858.333 +12240 443633.333 982138.889 +12241 443636.111 862050.000 +12242 443636.111 973769.444 +12243 443644.444 971327.778 +12244 443675.000 913163.889 +12245 443683.333 1003505.556 +12246 443730.556 716105.556 +12247 443766.667 1037291.667 +12248 443800.000 1080383.333 +12249 443836.111 898172.222 +12250 443838.889 920327.778 +12251 443841.667 1231086.111 +12252 443875.000 682044.444 +12253 443875.000 975500.000 +12254 443877.778 711736.111 +12255 443894.444 937300.000 +12256 443897.222 1189491.667 +12257 443927.778 887397.222 +12258 443936.111 1229836.111 +12259 443977.778 1227350.000 +12260 444005.556 926236.111 +12261 444019.444 952555.556 +12262 444052.778 729933.333 +12263 444063.889 1043752.778 +12264 444077.778 740875.000 +12265 444097.222 1035086.111 +12266 444108.333 833322.222 +12267 444108.333 853988.889 +12268 444161.111 1189519.444 +12269 444169.444 949252.778 +12270 444177.778 1191125.000 +12271 444202.778 833308.333 +12272 444213.889 841166.667 +12273 444238.889 897802.778 +12274 444258.333 690069.444 +12275 444269.444 1240675.000 +12276 444388.889 935811.111 +12277 444391.667 901244.444 +12278 444411.111 921477.778 +12279 444447.222 885788.889 +12280 444466.667 943950.000 +12281 444469.444 957880.556 +12282 444488.889 880602.778 +12283 444494.444 922666.667 +12284 444508.333 892847.222 +12285 444511.111 908411.111 +12286 444563.889 895438.889 +12287 444583.333 689247.222 +12288 444583.333 875030.556 +12289 444583.333 931613.889 +12290 444611.111 1036380.556 +12291 444633.333 962469.444 +12292 444633.333 1187088.889 +12293 444644.444 889197.222 +12294 444652.778 726850.000 +12295 444669.444 731713.889 +12296 444686.111 711855.556 +12297 444752.778 701886.111 +12298 444758.333 732125.000 +12299 444775.000 884505.556 +12300 444802.778 934283.333 +12301 444813.889 702000.000 +12302 444822.222 899638.889 +12303 444888.889 715697.222 +12304 444891.667 1080555.556 +12305 444905.556 731113.889 +12306 444908.333 1038588.889 +12307 444913.889 731861.111 +12308 444936.111 895586.111 +12309 444983.333 845919.444 +12310 445047.222 723686.111 +12311 445047.222 1142308.333 +12312 445050.000 734805.556 +12313 445069.444 929052.778 +12314 445072.222 964238.889 +12315 445080.556 891305.556 +12316 445150.000 883302.778 +12317 445163.889 1160408.333 +12318 445183.333 989880.556 +12319 445191.667 880197.222 +12320 445194.444 895458.333 +12321 445213.889 994411.111 +12322 445236.111 895744.444 +12323 445258.333 1212119.444 +12324 445263.889 1090558.333 +12325 445283.333 939075.000 +12326 445291.667 947205.556 +12327 445327.778 675988.889 +12328 445336.111 720036.111 +12329 445338.889 704563.889 +12330 445338.889 945261.111 +12331 445366.667 1229058.333 +12332 445386.111 877038.889 +12333 445394.444 951166.667 +12334 445402.778 697225.000 +12335 445402.778 1233663.889 +12336 445430.556 943661.111 +12337 445433.333 684200.000 +12338 445433.333 935758.333 +12339 445469.444 696216.667 +12340 445497.222 913925.000 +12341 445513.889 949841.667 +12342 445519.444 696322.222 +12343 445530.556 942202.778 +12344 445536.111 705513.889 +12345 445600.000 905961.111 +12346 445608.333 705458.333 +12347 445616.667 725988.889 +12348 445625.000 925336.111 +12349 445647.222 1232608.333 +12350 445677.778 916708.333 +12351 445722.222 912272.222 +12352 445736.111 687961.111 +12353 445747.222 969019.444 +12354 445758.333 914700.000 +12355 445855.556 924502.778 +12356 445883.333 695991.667 +12357 445908.333 897672.222 +12358 445927.778 702286.111 +12359 445955.556 751694.444 +12360 445986.111 715116.667 +12361 446002.778 909627.778 +12362 446083.333 940802.778 +12363 446088.889 874325.000 +12364 446088.889 956738.889 +12365 446180.556 754075.000 +12366 446194.444 862263.889 +12367 446205.556 887622.222 +12368 446216.667 1239372.222 +12369 446227.778 937683.333 +12370 446263.889 919655.556 +12371 446269.444 900075.000 +12372 446277.778 893086.111 +12373 446291.667 921922.222 +12374 446336.111 862344.444 +12375 446336.111 1211283.333 +12376 446355.556 726808.333 +12377 446366.667 1231047.222 +12378 446369.444 1240522.222 +12379 446377.778 688455.556 +12380 446377.778 695036.111 +12381 446397.222 731108.333 +12382 446402.778 931433.333 +12383 446497.222 932425.000 +12384 446530.556 1231005.556 +12385 446563.889 832947.222 +12386 446613.889 847147.222 +12387 446622.222 1111033.333 +12388 446688.889 901716.667 +12389 446697.222 749816.667 +12390 446705.556 701516.667 +12391 446713.889 1038516.667 +12392 446722.222 882425.000 +12393 446802.778 911197.222 +12394 446811.111 1230602.778 +12395 446930.556 735625.000 +12396 446941.667 754866.667 +12397 446994.444 734533.333 +12398 447050.000 1228480.556 +12399 447080.556 1000594.444 +12400 447088.889 962761.111 +12401 447130.556 697911.111 +12402 447133.333 934225.000 +12403 447147.222 1034202.778 +12404 447150.000 674619.444 +12405 447197.222 1230091.667 +12406 447213.889 737241.667 +12407 447219.444 1239188.889 +12408 447227.778 970297.222 +12409 447300.000 1164372.222 +12410 447319.444 932175.000 +12411 447319.444 943500.000 +12412 447322.222 924872.222 +12413 447341.667 851758.333 +12414 447369.444 904958.333 +12415 447372.222 946166.667 +12416 447394.444 931255.556 +12417 447402.778 884447.222 +12418 447408.333 890630.556 +12419 447433.333 928522.222 +12420 447438.889 947152.778 +12421 447444.444 688375.000 +12422 447458.333 966805.556 +12423 447480.556 721766.667 +12424 447488.889 928019.444 +12425 447513.889 749947.222 +12426 447538.889 1087566.667 +12427 447541.667 1224769.444 +12428 447577.778 902966.667 +12429 447630.556 856205.556 +12430 447636.111 912769.444 +12431 447636.111 936255.556 +12432 447650.000 697197.222 +12433 447675.000 948952.778 +12434 447677.778 932775.000 +12435 447680.556 939272.222 +12436 447691.667 941513.889 +12437 447716.667 937811.111 +12438 447747.222 1226138.889 +12439 447763.889 949894.444 +12440 447783.333 1178283.333 +12441 447811.111 921458.333 +12442 447822.222 886088.889 +12443 447825.000 693838.889 +12444 447827.778 939133.333 +12445 447869.444 953513.889 +12446 447891.667 952113.889 +12447 447894.444 936019.444 +12448 447905.556 958083.333 +12449 447919.444 950969.444 +12450 447930.556 897030.556 +12451 447963.889 1085058.333 +12452 447966.667 687619.444 +12453 447972.222 1069555.556 +12454 447975.000 698802.778 +12455 447980.556 935266.667 +12456 448008.333 749913.889 +12457 448008.333 1227933.333 +12458 448011.111 687783.333 +12459 448011.111 900791.667 +12460 448047.222 914430.556 +12461 448086.111 1240619.444 +12462 448100.000 955452.778 +12463 448113.889 914983.333 +12464 448116.667 722036.111 +12465 448125.000 920713.889 +12466 448147.222 718808.333 +12467 448272.222 891694.444 +12468 448277.778 929436.111 +12469 448297.222 1227933.333 +12470 448302.778 745138.889 +12471 448341.667 873769.444 +12472 448352.778 692744.444 +12473 448375.000 1083888.889 +12474 448386.111 687058.333 +12475 448408.333 932980.556 +12476 448411.111 1228697.222 +12477 448433.333 1229516.667 +12478 448480.556 930425.000 +12479 448486.111 742952.778 +12480 448486.111 1232327.778 +12481 448508.333 937866.667 +12482 448513.889 1231855.556 +12483 448530.556 887880.556 +12484 448547.222 934705.556 +12485 448586.111 936613.889 +12486 448613.889 926236.111 +12487 448622.222 935305.556 +12488 448644.444 752044.444 +12489 448663.889 930002.778 +12490 448663.889 1234347.222 +12491 448730.556 916908.333 +12492 448738.889 881427.778 +12493 448752.778 1072616.667 +12494 448755.556 919191.667 +12495 448758.333 985183.333 +12496 448777.778 977327.778 +12497 448830.556 686725.000 +12498 448833.333 694480.556 +12499 448833.333 932827.778 +12500 448836.111 931380.556 +12501 448838.889 940413.889 +12502 448872.222 878644.444 +12503 448872.222 896200.000 +12504 448877.778 943694.444 +12505 448897.222 933497.222 +12506 448900.000 883072.222 +12507 448944.444 714963.889 +12508 448955.556 854163.889 +12509 448994.444 971147.222 +12510 449008.333 935888.889 +12511 449022.222 850608.333 +12512 449027.778 927833.333 +12513 449033.333 935661.111 +12514 449033.333 941952.778 +12515 449061.111 669905.556 +12516 449069.444 728069.444 +12517 449086.111 935927.778 +12518 449088.889 1071627.778 +12519 449097.222 896044.444 +12520 449100.000 903155.556 +12521 449111.111 1160977.778 +12522 449133.333 935030.556 +12523 449150.000 935530.556 +12524 449180.556 731247.222 +12525 449194.444 1233158.333 +12526 449250.000 934625.000 +12527 449263.889 913008.333 +12528 449272.222 899633.333 +12529 449280.556 748922.222 +12530 449297.222 935222.222 +12531 449327.778 960541.667 +12532 449338.889 951872.222 +12533 449341.667 686458.333 +12534 449352.778 936319.444 +12535 449361.111 946963.889 +12536 449363.889 722055.556 +12537 449366.667 936658.333 +12538 449369.444 913927.778 +12539 449397.222 935763.889 +12540 449425.000 957233.333 +12541 449430.556 1230338.889 +12542 449461.111 686444.444 +12543 449480.556 911505.556 +12544 449508.333 929763.889 +12545 449511.111 880466.667 +12546 449519.444 910347.222 +12547 449530.556 922911.111 +12548 449530.556 929950.000 +12549 449550.000 953661.111 +12550 449563.889 905975.000 +12551 449563.889 927655.556 +12552 449583.333 1240166.667 +12553 449591.667 896300.000 +12554 449600.000 909369.444 +12555 449611.111 907997.222 +12556 449633.333 735877.778 +12557 449636.111 938469.444 +12558 449638.889 940472.222 +12559 449666.667 923741.667 +12560 449694.444 935138.889 +12561 449713.889 936041.667 +12562 449713.889 1162830.556 +12563 449747.222 927566.667 +12564 449766.667 856505.556 +12565 449788.889 924355.556 +12566 449800.000 932636.111 +12567 449802.778 852111.111 +12568 449808.333 888308.333 +12569 449838.889 925558.333 +12570 449861.111 1229816.667 +12571 449863.889 734469.444 +12572 449866.667 935713.889 +12573 449902.778 1230250.000 +12574 449916.667 931661.111 +12575 449930.556 927566.667 +12576 449938.889 733652.778 +12577 449944.444 724002.778 +12578 449958.333 928791.667 +12579 449969.444 726716.667 +12580 449975.000 917269.444 +12581 449983.333 1202150.000 +12582 449986.111 932055.556 +12583 449991.667 883719.444 +12584 450030.556 903355.556 +12585 450050.000 720994.444 +12586 450052.778 1227819.444 +12587 450061.111 931563.889 +12588 450072.222 936555.556 +12589 450097.222 933488.889 +12590 450097.222 961955.556 +12591 450105.556 934552.778 +12592 450116.667 999552.778 +12593 450158.333 952383.333 +12594 450213.889 927808.333 +12595 450230.556 1020355.556 +12596 450238.889 692902.778 +12597 450269.444 930875.000 +12598 450275.000 846747.222 +12599 450313.889 927927.778 +12600 450322.222 933383.333 +12601 450327.778 933600.000 +12602 450330.556 900738.889 +12603 450350.000 991236.111 +12604 450380.556 933863.889 +12605 450408.333 932627.778 +12606 450419.444 937888.889 +12607 450436.111 920408.333 +12608 450475.000 1016005.556 +12609 450502.778 931563.889 +12610 450533.333 932472.222 +12611 450541.667 929563.889 +12612 450544.444 877491.667 +12613 450563.889 928058.333 +12614 450575.000 930736.111 +12615 450586.111 698827.778 +12616 450586.111 921722.222 +12617 450608.333 940730.556 +12618 450616.667 834327.778 +12619 450650.000 880341.667 +12620 450650.000 939108.333 +12621 450655.556 932016.667 +12622 450680.556 1227988.889 +12623 450697.222 929513.889 +12624 450700.000 852644.444 +12625 450725.000 934555.556 +12626 450758.333 941897.222 +12627 450761.111 933325.000 +12628 450788.889 1234847.222 +12629 450791.667 931469.444 +12630 450816.667 943066.667 +12631 450847.222 930097.222 +12632 450861.111 932630.556 +12633 450883.333 937341.667 +12634 450900.000 929722.222 +12635 450941.667 933561.111 +12636 450952.778 935472.222 +12637 450994.444 1233936.111 +12638 451000.000 876305.556 +12639 451002.778 914886.111 +12640 451027.778 930788.889 +12641 451050.000 932083.333 +12642 451077.778 876141.667 +12643 451077.778 932377.778 +12644 451083.333 1228963.889 +12645 451158.333 1232061.111 +12646 451194.444 934022.222 +12647 451200.000 932875.000 +12648 451219.444 950430.556 +12649 451230.556 925363.889 +12650 451244.444 926733.333 +12651 451272.222 945277.778 +12652 451313.889 856166.667 +12653 451386.111 903400.000 +12654 451388.889 947777.778 +12655 451402.778 891522.222 +12656 451427.778 846602.778 +12657 451438.889 1228541.667 +12658 451475.000 1225758.333 +12659 451486.111 931513.889 +12660 451505.556 946827.778 +12661 451558.333 936661.111 +12662 451569.444 674052.778 +12663 451580.556 851241.667 +12664 451600.000 929930.556 +12665 451602.778 930886.111 +12666 451608.333 932347.222 +12667 451672.222 911491.667 +12668 451688.889 693850.000 +12669 451719.444 938744.444 +12670 451758.333 1138950.000 +12671 451805.556 896833.333 +12672 451825.000 1228066.667 +12673 451833.333 692275.000 +12674 451858.333 1092461.111 +12675 451872.222 871208.333 +12676 451888.889 672791.667 +12677 451888.889 933972.222 +12678 451930.556 953202.778 +12679 451969.444 960194.444 +12680 451977.778 933869.444 +12681 452086.111 1178641.667 +12682 452102.778 1231975.000 +12683 452163.889 1126366.667 +12684 452166.667 850138.889 +12685 452191.667 966352.778 +12686 452208.333 1230750.000 +12687 452291.667 940016.667 +12688 452311.111 1227547.222 +12689 452325.000 880075.000 +12690 452330.556 949397.222 +12691 452333.333 932911.111 +12692 452344.444 1201838.889 +12693 452377.778 936541.667 +12694 452386.111 686641.667 +12695 452436.111 997766.667 +12696 452438.889 935147.222 +12697 452444.444 1231136.111 +12698 452519.444 922711.111 +12699 452536.111 689863.889 +12700 452627.778 941241.667 +12701 452630.556 1226913.889 +12702 452661.111 932341.667 +12703 452783.333 1230097.222 +12704 452788.889 929850.000 +12705 452897.222 1223325.000 +12706 452916.667 964625.000 +12707 452944.444 1231752.778 +12708 452958.333 1089130.556 +12709 453000.000 1227725.000 +12710 453002.778 1229719.444 +12711 453011.111 949438.889 +12712 453038.889 935669.444 +12713 453047.222 964444.444 +12714 453055.556 937938.889 +12715 453069.444 923619.444 +12716 453141.667 916508.333 +12717 453144.444 1073625.000 +12718 453150.000 955997.222 +12719 453152.778 944083.333 +12720 453175.000 902083.333 +12721 453180.556 852583.333 +12722 453194.444 932022.222 +12723 453205.556 927047.222 +12724 453247.222 1180866.667 +12725 453261.111 945458.333 +12726 453319.444 973047.222 +12727 453322.222 975197.222 +12728 453325.000 937458.333 +12729 453363.889 929969.444 +12730 453416.667 1231861.111 +12731 453488.889 1117288.889 +12732 453533.333 1195566.667 +12733 453544.444 1172286.111 +12734 453561.111 926333.333 +12735 453566.667 1228388.889 +12736 453575.000 842238.889 +12737 453575.000 1226055.556 +12738 453622.222 685055.556 +12739 453658.333 1226111.111 +12740 453708.333 879522.222 +12741 453733.333 849552.778 +12742 453736.111 928897.222 +12743 453805.556 947116.667 +12744 453808.333 1225936.111 +12745 453841.667 1227627.778 +12746 453894.444 928477.778 +12747 453933.333 938766.667 +12748 453944.444 921422.222 +12749 453975.000 1222602.778 +12750 453980.556 929872.222 +12751 454013.889 918488.889 +12752 454019.444 926522.222 +12753 454022.222 1227516.667 +12754 454086.111 917438.889 +12755 454086.111 968575.000 +12756 454152.778 876075.000 +12757 454169.444 920327.778 +12758 454208.333 1226694.444 +12759 454213.889 838183.333 +12760 454222.222 1163144.444 +12761 454263.889 1172777.778 +12762 454313.889 1227702.778 +12763 454316.667 849919.444 +12764 454438.889 1054069.444 +12765 454441.667 847866.667 +12766 454444.444 990288.889 +12767 454463.889 1226380.556 +12768 454466.667 1227577.778 +12769 454469.444 1225291.667 +12770 454475.000 980983.333 +12771 454513.889 925538.889 +12772 454522.222 924544.444 +12773 454530.556 996536.111 +12774 454533.333 1211294.444 +12775 454541.667 945180.556 +12776 454555.556 1121961.111 +12777 454558.333 944286.111 +12778 454563.889 1238427.778 +12779 454569.444 912730.556 +12780 454594.444 695911.111 +12781 454602.778 964333.333 +12782 454630.556 911038.889 +12783 454647.222 984861.111 +12784 454686.111 1226083.333 +12785 454711.111 897297.222 +12786 454719.444 943405.556 +12787 454833.333 1188288.889 +12788 454836.111 1227538.889 +12789 454852.778 929616.667 +12790 454852.778 1089697.222 +12791 454872.222 1228025.000 +12792 454902.778 932475.000 +12793 454944.444 1228658.333 +12794 454975.000 957963.889 +12795 454983.333 1224302.778 +12796 454988.889 1227633.333 +12797 455011.111 951241.667 +12798 455041.667 1225363.889 +12799 455050.000 1227972.222 +12800 455061.111 917380.556 +12801 455063.889 1000316.667 +12802 455113.889 929800.000 +12803 455200.000 1230586.111 +12804 455200.000 1231094.444 +12805 455227.778 1238880.556 +12806 455230.556 1229886.111 +12807 455236.111 1226750.000 +12808 455261.111 925083.333 +12809 455322.222 920191.667 +12810 455344.444 1224175.000 +12811 455372.222 1004275.000 +12812 455394.444 1223861.111 +12813 455461.111 902863.889 +12814 455527.778 847838.889 +12815 455572.222 942238.889 +12816 455597.222 1225591.667 +12817 455650.000 1179163.889 +12818 455691.667 964341.667 +12819 455700.000 935813.889 +12820 455702.778 1175272.222 +12821 455716.667 961730.556 +12822 455719.444 889027.778 +12823 455727.778 932241.667 +12824 455761.111 924825.000 +12825 455827.778 1223522.222 +12826 455861.111 959136.111 +12827 455863.889 929744.444 +12828 455872.222 1223983.333 +12829 455919.444 941658.333 +12830 455952.778 968330.556 +12831 455972.222 1229922.222 +12832 456091.667 944513.889 +12833 456136.111 1239419.444 +12834 456144.444 955308.333 +12835 456216.667 942066.667 +12836 456275.000 685750.000 +12837 456300.000 945697.222 +12838 456366.667 894119.444 +12839 456366.667 1092513.889 +12840 456388.889 1226602.778 +12841 456469.444 844744.444 +12842 456502.778 953894.444 +12843 456572.222 687102.778 +12844 456591.667 924669.444 +12845 456625.000 1105602.778 +12846 456627.778 946897.222 +12847 456647.222 939094.444 +12848 456647.222 970494.444 +12849 456666.667 1225597.222 +12850 456691.667 1087708.333 +12851 456700.000 1218894.444 +12852 456716.667 1226616.667 +12853 456722.222 1187875.000 +12854 456747.222 948072.222 +12855 456797.222 1110377.778 +12856 456855.556 929652.778 +12857 456966.667 904002.778 +12858 457055.556 1215202.778 +12859 457150.000 1214633.333 +12860 457169.444 1201997.222 +12861 457227.778 931705.556 +12862 457227.778 989405.556 +12863 457277.778 1214852.778 +12864 457311.111 944697.222 +12865 457325.000 1076113.889 +12866 457375.000 949522.222 +12867 457394.444 919252.778 +12868 457425.000 1191944.444 +12869 457452.778 870644.444 +12870 457544.444 1228763.889 +12871 457558.333 936541.667 +12872 457575.000 929622.222 +12873 457694.444 996191.667 +12874 457713.889 879947.222 +12875 457761.111 1111761.111 +12876 457763.889 926825.000 +12877 457805.556 1192161.111 +12878 457811.111 1225322.222 +12879 457833.333 1085000.000 +12880 457838.889 847277.778 +12881 457858.333 923808.333 +12882 457869.444 879036.111 +12883 457916.667 977505.556 +12884 457950.000 880719.444 +12885 458044.444 964988.889 +12886 458086.111 961430.556 +12887 458119.444 1184894.444 +12888 458138.889 1184236.111 +12889 458144.444 1008100.000 +12890 458152.778 1227413.889 +12891 458202.778 880658.333 +12892 458208.333 1208205.556 +12893 458225.000 918891.667 +12894 458261.111 929683.333 +12895 458294.444 957916.667 +12896 458300.000 942933.333 +12897 458347.222 1000688.889 +12898 458350.000 1099547.222 +12899 458400.000 1196994.444 +12900 458405.556 1192883.333 +12901 458405.556 1228405.556 +12902 458527.778 870216.667 +12903 458566.667 1113316.667 +12904 458588.889 1231916.667 +12905 458661.111 1224050.000 +12906 458669.444 951519.444 +12907 458708.333 1120966.667 +12908 458769.444 932936.111 +12909 458775.000 923672.222 +12910 458841.667 1066230.556 +12911 458852.778 953772.222 +12912 458888.889 1045522.222 +12913 458902.778 1228058.333 +12914 458919.444 1239602.778 +12915 458958.333 1194902.778 +12916 459047.222 1227427.778 +12917 459172.222 892441.667 +12918 459175.000 1193413.889 +12919 459266.667 1161213.889 +12920 459344.444 904413.889 +12921 459408.333 1021588.889 +12922 459577.778 862461.111 +12923 459747.222 948652.778 +12924 459763.889 943622.222 +12925 459816.667 941044.444 +12926 459933.333 1239213.889 +12927 459941.667 959763.889 +12928 459963.889 684466.667 +12929 460013.889 1026363.889 +12930 460027.778 985266.667 +12931 460041.667 956825.000 +12932 460086.111 1228433.333 +12933 460113.889 929441.667 +12934 460130.556 914844.444 +12935 460227.778 1141772.222 +12936 460244.444 1239100.000 +12937 460313.889 993786.111 +12938 460341.667 1125350.000 +12939 460494.444 1183872.222 +12940 460522.222 1184016.667 +12941 460641.667 886313.889 +12942 460647.222 1183419.444 +12943 460697.222 969013.889 +12944 460705.556 936675.000 +12945 460755.556 971513.889 +12946 460811.111 886269.444 +12947 460858.333 948655.556 +12948 460891.667 1229347.222 +12949 460911.111 945033.333 +12950 460922.222 1006286.111 +12951 460927.778 886422.222 +12952 460980.556 883338.889 +12953 460994.444 918247.222 +12954 461013.889 1232055.556 +12955 461077.778 976361.111 +12956 461261.111 678408.333 +12957 461302.778 949483.333 +12958 461311.111 928672.222 +12959 461336.111 1001611.111 +12960 461380.556 934705.556 +12961 461383.333 1229369.444 +12962 461386.111 980900.000 +12963 461450.000 1159769.444 +12964 461469.444 1229072.222 +12965 461530.556 953286.111 +12966 461644.444 1229402.778 +12967 461650.000 950388.889 +12968 461652.778 1239225.000 +12969 461830.556 1033944.444 +12970 461875.000 1229041.667 +12971 461880.556 1238300.000 +12972 462002.778 1239502.778 +12973 462033.333 1233819.444 +12974 462069.444 1197677.778 +12975 462113.889 1191361.111 +12976 462150.000 1199955.556 +12977 462258.333 976622.222 +12978 462272.222 1160283.333 +12979 462286.111 1190994.444 +12980 462350.000 1162397.222 +12981 462366.667 1121200.000 +12982 462413.889 1164661.111 +12983 462469.444 1141594.444 +12984 462511.111 1199005.556 +12985 462591.667 974558.333 +12986 462633.333 1194866.667 +12987 462636.111 965877.778 +12988 462652.778 966055.556 +12989 462663.889 1066772.222 +12990 462666.667 950625.000 +12991 462666.667 971319.444 +12992 462666.667 1002325.000 +12993 462705.556 1181522.222 +12994 462752.778 1229063.889 +12995 462805.556 957133.333 +12996 462811.111 874408.333 +12997 462830.556 960772.222 +12998 462858.333 1192833.333 +12999 463011.111 989541.667 +13000 463044.444 1193602.778 +13001 463191.667 1115200.000 +13002 463216.667 954450.000 +13003 463255.556 906608.333 +13004 463322.222 1132933.333 +13005 463394.444 1170472.222 +13006 463422.222 1201861.111 +13007 463433.333 942863.889 +13008 463525.000 1240530.556 +13009 463533.333 918222.222 +13010 463550.000 855094.444 +13011 463555.556 947919.444 +13012 463572.222 982941.667 +13013 463580.556 942005.556 +13014 463591.667 987152.778 +13015 463669.444 1042841.667 +13016 463725.000 1023266.667 +13017 463761.111 1159372.222 +13018 463775.000 1203075.000 +13019 463958.333 1127291.667 +13020 463983.333 950144.444 +13021 464022.222 1202608.333 +13022 464038.889 1018455.556 +13023 464050.000 1168038.889 +13024 464080.556 943555.556 +13025 464083.333 1058400.000 +13026 464111.111 866477.778 +13027 464163.889 1170441.667 +13028 464166.667 1170166.667 +13029 464280.556 902458.333 +13030 464355.556 1098336.111 +13031 464400.000 1228455.556 +13032 464416.667 976808.333 +13033 464425.000 951358.333 +13034 464452.778 1085411.111 +13035 464477.778 1204191.667 +13036 464497.222 901863.889 +13037 464541.667 927616.667 +13038 464547.222 901708.333 +13039 464736.111 938986.111 +13040 464750.000 1176016.667 +13041 464752.778 899397.222 +13042 464775.000 939775.000 +13043 464794.444 1162541.667 +13044 464813.889 900527.778 +13045 464822.222 939575.000 +13046 464855.556 943602.778 +13047 464886.111 876675.000 +13048 464911.111 1157980.556 +13049 464913.889 1229366.667 +13050 464947.222 873541.667 +13051 464991.667 876116.667 +13052 465083.333 997708.333 +13053 465100.000 1140922.222 +13054 465150.000 916997.222 +13055 465180.556 953758.333 +13056 465205.556 942883.333 +13057 465330.556 937100.000 +13058 465391.667 1028677.778 +13059 465436.111 873952.778 +13060 465483.333 1109013.889 +13061 465508.333 1169244.444 +13062 465538.889 1203819.444 +13063 465566.667 874372.222 +13064 465575.000 1204738.889 +13065 465586.111 1222738.889 +13066 465622.222 921472.222 +13067 465705.556 1232961.111 +13068 465708.333 960827.778 +13069 465747.222 1229069.444 +13070 465788.889 1167050.000 +13071 465838.889 917988.889 +13072 465897.222 1119147.222 +13073 465925.000 908836.111 +13074 465927.778 1120352.778 +13075 465944.444 955722.222 +13076 466022.222 1205047.222 +13077 466030.556 943091.667 +13078 466063.889 1204386.111 +13079 466180.556 1205519.444 +13080 466230.556 976011.111 +13081 466300.000 950886.111 +13082 466486.111 970166.667 +13083 466522.222 964194.444 +13084 466541.667 1205288.889 +13085 466622.222 1229627.778 +13086 466636.111 1188600.000 +13087 466638.889 924247.222 +13088 466733.333 908947.222 +13089 466811.111 680163.889 +13090 466866.667 1237316.667 +13091 467022.222 1207541.667 +13092 467066.667 924280.556 +13093 467163.889 1229530.556 +13094 467180.556 944038.889 +13095 467208.333 921038.889 +13096 467216.667 924591.667 +13097 467280.556 957005.556 +13098 467311.111 939577.778 +13099 467311.111 1206983.333 +13100 467313.889 1171786.111 +13101 467325.000 1169991.667 +13102 467352.778 1229877.778 +13103 467369.444 1167686.111 +13104 467472.222 922252.778 +13105 467538.889 895838.889 +13106 467538.889 950977.778 +13107 467566.667 884527.778 +13108 467588.889 1140800.000 +13109 467722.222 678344.444 +13110 467786.111 884888.889 +13111 467833.333 921063.889 +13112 467900.000 681580.556 +13113 467911.111 1172494.444 +13114 467930.556 1053116.667 +13115 467991.667 1228686.111 +13116 467994.444 1165550.000 +13117 468083.333 1007833.333 +13118 468108.333 908180.556 +13119 468150.000 1018294.444 +13120 468172.222 958450.000 +13121 468261.111 1191741.667 +13122 468266.667 1008891.667 +13123 468405.556 1232311.111 +13124 468450.000 1014108.333 +13125 468547.222 999155.556 +13126 468569.444 1228516.667 +13127 468605.556 680125.000 +13128 468633.333 1140475.000 +13129 468675.000 1222652.778 +13130 468708.333 1139436.111 +13131 468711.111 893138.889 +13132 468722.222 1139930.556 +13133 468738.889 967672.222 +13134 468750.000 969000.000 +13135 468752.778 965786.111 +13136 468766.667 967030.556 +13137 468772.222 967894.444 +13138 468791.667 1027891.667 +13139 468802.778 1173633.333 +13140 468808.333 963163.889 +13141 468838.889 1023152.778 +13142 468852.778 1031991.667 +13143 468863.889 960941.667 +13144 468883.333 1226872.222 +13145 468902.778 1241027.778 +13146 468938.889 992994.444 +13147 469005.556 972108.333 +13148 469005.556 1020450.000 +13149 469011.111 1196294.444 +13150 469086.111 678263.889 +13151 469102.778 1170747.222 +13152 469105.556 987080.556 +13153 469180.556 1040038.889 +13154 469216.667 1168972.222 +13155 469222.222 950583.333 +13156 469233.333 980027.778 +13157 469291.667 929194.444 +13158 469422.222 1226047.222 +13159 469555.556 1237725.000 +13160 469630.556 1241638.889 +13161 469677.778 1190386.111 +13162 469722.222 1186141.667 +13163 469736.111 1236911.111 +13164 469811.111 1238880.556 +13165 469813.889 1236013.889 +13166 469833.333 1204158.333 +13167 469850.000 1041877.778 +13168 469933.333 935983.333 +13169 469966.667 1205466.667 +13170 470036.111 1234075.000 +13171 470075.000 1229080.556 +13172 470080.556 1171400.000 +13173 470227.778 916705.556 +13174 470344.444 1228219.444 +13175 470380.556 1228994.444 +13176 470533.333 1232641.667 +13177 470625.000 1094275.000 +13178 470700.000 886430.556 +13179 470788.889 962586.111 +13180 470969.444 1226300.000 +13181 470980.556 1222030.556 +13182 471013.889 945869.444 +13183 471041.667 1224333.333 +13184 471052.778 1047119.444 +13185 471163.889 1012991.667 +13186 471219.444 885688.889 +13187 471269.444 885808.333 +13188 471275.000 1183788.889 +13189 471302.778 1192769.444 +13190 471536.111 1102175.000 +13191 471555.556 1224327.778 +13192 471572.222 679358.333 +13193 471586.111 1007830.556 +13194 471633.333 1220255.556 +13195 471700.000 1226013.889 +13196 471733.333 884291.667 +13197 471772.222 1221852.778 +13198 471911.111 1222894.444 +13199 471916.667 1148908.333 +13200 471941.667 884072.222 +13201 471955.556 1209380.556 +13202 472033.333 1222391.667 +13203 472044.444 1219902.778 +13204 472155.556 1230961.111 +13205 472233.333 1170711.111 +13206 472236.111 1209919.444 +13207 472283.333 934888.889 +13208 472344.444 1198513.889 +13209 472358.333 1225491.667 +13210 472361.111 1173688.889 +13211 472372.222 935300.000 +13212 472375.000 884430.556 +13213 472394.444 1223558.333 +13214 472397.222 1225147.222 +13215 472466.667 884538.889 +13216 472483.333 1223116.667 +13217 472530.556 1224430.556 +13218 472586.111 685900.000 +13219 472602.778 962586.111 +13220 472633.333 1017775.000 +13221 472647.222 1222488.889 +13222 472711.111 1116997.222 +13223 472791.667 1222508.333 +13224 472863.889 1019222.222 +13225 472888.889 934275.000 +13226 472891.667 1010286.111 +13227 472944.444 912572.222 +13228 472944.444 1016222.222 +13229 472955.556 934186.111 +13230 472994.444 1225069.444 +13231 472997.222 965150.000 +13232 473075.000 1222272.222 +13233 473088.889 1220019.444 +13234 473152.778 959683.333 +13235 473177.778 1195525.000 +13236 473205.556 932983.333 +13237 473211.111 1013811.111 +13238 473294.444 1225788.889 +13239 473330.556 937925.000 +13240 473333.333 1186897.222 +13241 473352.778 1168875.000 +13242 473458.333 1055916.667 +13243 473516.667 968283.333 +13244 473719.444 1027536.111 +13245 473794.444 946038.889 +13246 473802.778 931680.556 +13247 473811.111 1222336.111 +13248 473852.778 1171705.556 +13249 473861.111 1109247.222 +13250 473894.444 1194894.444 +13251 473997.222 930722.222 +13252 474019.444 1223230.556 +13253 474038.889 970616.667 +13254 474158.333 1202919.444 +13255 474236.111 1203091.667 +13256 474363.889 1223394.444 +13257 474444.444 981236.111 +13258 474497.222 991258.333 +13259 474563.889 1011366.667 +13260 474602.778 1148819.444 +13261 474625.000 925397.222 +13262 474702.778 1158008.333 +13263 474705.556 1223455.556 +13264 474736.111 948800.000 +13265 474741.667 1159269.444 +13266 474741.667 1222597.222 +13267 474811.111 1182533.333 +13268 474830.556 1222158.333 +13269 474844.444 1222933.333 +13270 474858.333 1004427.778 +13271 474875.000 1175747.222 +13272 474888.889 924647.222 +13273 474891.667 928836.111 +13274 474936.111 927777.778 +13275 474958.333 1217855.556 +13276 474980.556 973241.667 +13277 474983.333 973700.000 +13278 475000.000 1113000.000 +13279 475061.111 1159983.333 +13280 475141.667 978355.556 +13281 475197.222 921383.333 +13282 475200.000 1008897.222 +13283 475216.667 953980.556 +13284 475225.000 1204686.111 +13285 475233.333 925363.889 +13286 475236.111 1226230.556 +13287 475288.889 1141005.556 +13288 475288.889 1218241.667 +13289 475300.000 922369.444 +13290 475302.778 1220313.889 +13291 475325.000 926233.333 +13292 475330.556 923400.000 +13293 475361.111 962800.000 +13294 475383.333 1161183.333 +13295 475405.556 1226350.000 +13296 475411.111 1221752.778 +13297 475427.778 1161805.556 +13298 475536.111 1226633.333 +13299 475605.556 1115450.000 +13300 475669.444 1221572.222 +13301 475675.000 1226313.889 +13302 475708.333 1222208.333 +13303 475730.556 1176811.111 +13304 475763.889 957511.111 +13305 475830.556 1227072.222 +13306 475850.000 1225975.000 +13307 475963.889 1206602.778 +13308 475972.222 1153433.333 +13309 476000.000 1226916.667 +13310 476063.889 1223308.333 +13311 476091.667 1146677.778 +13312 476091.667 1226538.889 +13313 476105.556 1221994.444 +13314 476113.889 1192911.111 +13315 476147.222 1119794.444 +13316 476211.111 1222263.889 +13317 476225.000 1220669.444 +13318 476247.222 1225200.000 +13319 476319.444 1222166.667 +13320 476369.444 958861.111 +13321 476397.222 974530.556 +13322 476447.222 1175922.222 +13323 476463.889 1222161.111 +13324 476472.222 1200700.000 +13325 476480.556 1219127.778 +13326 476483.333 1170913.889 +13327 476491.667 996288.889 +13328 476522.222 1014152.778 +13329 476541.667 1181488.889 +13330 476569.444 1171952.778 +13331 476569.444 1172822.222 +13332 476575.000 1172388.889 +13333 476588.889 1174250.000 +13334 476675.000 960097.222 +13335 476741.667 1221202.778 +13336 476777.778 1167794.444 +13337 476800.000 991375.000 +13338 476813.889 1172816.667 +13339 476816.667 1222075.000 +13340 476919.444 954308.333 +13341 476936.111 1141622.222 +13342 477033.333 1222058.333 +13343 477086.111 919444.444 +13344 477166.667 1041558.333 +13345 477180.556 1169505.556 +13346 477297.222 1167691.667 +13347 477313.889 1225511.111 +13348 477330.556 945483.333 +13349 477341.667 975663.889 +13350 477361.111 1226452.778 +13351 477425.000 1219844.444 +13352 477505.556 903341.667 +13353 477569.444 1222797.222 +13354 477575.000 1222427.778 +13355 477588.889 1187044.444 +13356 477600.000 1222044.444 +13357 477613.889 1223450.000 +13358 477638.889 981769.444 +13359 477661.111 1167855.556 +13360 477697.222 999350.000 +13361 477736.111 971094.444 +13362 477741.667 966077.778 +13363 477847.222 1222730.556 +13364 477883.333 1223075.000 +13365 477963.889 1223816.667 +13366 478022.222 1032827.778 +13367 478055.556 922744.444 +13368 478108.333 1223761.111 +13369 478125.000 1168955.556 +13370 478138.889 1126791.667 +13371 478200.000 1106722.222 +13372 478211.111 1223138.889 +13373 478222.222 1222808.333 +13374 478391.667 958541.667 +13375 478411.111 1200152.778 +13376 478525.000 926894.444 +13377 478555.556 1219697.222 +13378 478563.889 1040444.444 +13379 478569.444 1216958.333 +13380 478627.778 1218152.778 +13381 478822.222 962738.889 +13382 479033.333 918669.444 +13383 479066.667 976263.889 +13384 479130.556 1220969.444 +13385 479188.889 973647.222 +13386 479252.778 970325.000 +13387 479300.000 970241.667 +13388 479325.000 1190369.444 +13389 479416.667 1190022.222 +13390 479447.222 1223033.333 +13391 479505.556 1243841.667 +13392 479533.333 1021344.444 +13393 479625.000 995297.222 +13394 479655.556 1189750.000 +13395 479663.889 1168675.000 +13396 479772.222 1024963.889 +13397 479791.667 1222008.333 +13398 480083.333 1196700.000 +13399 480402.778 1224050.000 +13400 480427.778 983358.333 +13401 480511.111 1199022.222 +13402 480519.444 1221758.333 +13403 480561.111 1009288.889 +13404 480633.333 1140716.667 +13405 480797.222 1231005.556 +13406 480841.667 1219675.000 +13407 480905.556 1056400.000 +13408 480961.111 1197794.444 +13409 480980.556 1090480.556 +13410 481127.778 988647.222 +13411 481130.556 1051977.778 +13412 481172.222 1227591.667 +13413 481183.333 1234294.444 +13414 481191.667 961808.333 +13415 481333.333 1036333.333 +13416 481444.444 1045163.889 +13417 481702.778 1119452.778 +13418 481786.111 1101113.889 +13419 481808.333 1170358.333 +13420 481958.333 1143119.444 +13421 481966.667 967725.000 +13422 481969.444 1066361.111 +13423 481988.889 1221238.889 +13424 482200.000 1226850.000 +13425 482258.333 1142752.778 +13426 482325.000 1012958.333 +13427 482363.889 1011330.556 +13428 482413.889 1223694.444 +13429 482555.556 1216002.778 +13430 482752.778 1014283.333 +13431 482763.889 1177144.444 +13432 482766.667 1165522.222 +13433 482888.889 994372.222 +13434 482916.667 973711.111 +13435 482933.333 1226419.444 +13436 483077.778 1122488.889 +13437 483172.222 1023900.000 +13438 483327.778 968205.556 +13439 483444.444 1031647.222 +13440 483458.333 1004050.000 +13441 483597.222 1078736.111 +13442 483613.889 1195822.222 +13443 483636.111 1201211.111 +13444 483688.889 999958.333 +13445 483725.000 1141805.556 +13446 483883.333 1155550.000 +13447 483925.000 1224936.111 +13448 483972.222 1029377.778 +13449 483986.111 977408.333 +13450 483988.889 935555.556 +13451 484111.111 1143366.667 +13452 484111.111 1195263.889 +13453 484122.222 974102.778 +13454 484213.889 1223327.778 +13455 484500.000 968722.222 +13456 484633.333 1158886.111 +13457 484758.333 1223241.667 +13458 484866.667 992094.444 +13459 485038.889 1222361.111 +13460 485052.778 1118561.111 +13461 485105.556 1109666.667 +13462 485127.778 1226113.889 +13463 485333.333 1087833.333 +13464 485344.444 1230158.333 +13465 485394.444 1217450.000 +13466 485466.667 1179044.444 +13467 485500.000 1096833.333 +13468 485569.444 1130125.000 +13469 485711.111 971775.000 +13470 485775.000 965202.778 +13471 485866.667 933988.889 +13472 485900.000 1092305.556 +13473 486011.111 934108.333 +13474 486108.333 1180547.222 +13475 486330.556 1123252.778 +13476 486483.333 1187366.667 +13477 486608.333 998411.111 +13478 486747.222 1020822.222 +13479 486913.889 1163152.778 +13480 487005.556 961813.889 +13481 487052.778 1194383.333 +13482 487125.000 945997.222 +13483 487411.111 1174161.111 +13484 487458.333 1224005.556 +13485 487597.222 1224869.444 +13486 487600.000 983677.778 +13487 487633.333 1015127.778 +13488 487744.444 969461.111 +13489 487747.222 1045619.444 +13490 487925.000 1054202.778 +13491 487938.889 976219.444 +13492 488030.556 1022455.556 +13493 488130.556 1000605.556 +13494 488272.222 1004452.778 +13495 488391.667 997444.444 +13496 488461.111 957625.000 +13497 488466.667 1225897.222 +13498 488577.778 996175.000 +13499 488800.000 1150525.000 +13500 489052.778 953141.667 +13501 489094.444 1010202.778 +13502 489141.667 1032944.444 +13503 489202.778 1223413.889 +13504 489233.333 979177.778 +13505 489391.667 1194344.444 +13506 489466.667 1224508.333 +13507 489663.889 972433.333 +13508 489938.889 1227458.333 +13509 490000.000 1222636.111 +EOF \ No newline at end of file diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/city_swap.cpp b/trunk/paradiseo-old-mo/tutorial/examples/tsp/city_swap.cpp new file mode 100644 index 000000000..e47a4e31b --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/city_swap.cpp @@ -0,0 +1,50 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include + +#include "city_swap.h" + +bool CitySwap :: operator () (Route & __route) +{ + + std :: swap (__route [rng.random (__route.size ())], + __route [rng.random (__route.size ())]) ; + + __route.invalidate () ; + + return true ; +} diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/city_swap.h b/trunk/paradiseo-old-mo/tutorial/examples/tsp/city_swap.h new file mode 100644 index 000000000..eda897f0f --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/city_swap.h @@ -0,0 +1,55 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef city_swap_h +#define city_swap_h + +#include + +#include "route.h" + +/** Its swaps two vertices + randomly choosen */ +class CitySwap : public eoMonOp + { + + public : + + bool operator () (Route & __route) ; + + } ; + +#endif diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/edge_xover.cpp b/trunk/paradiseo-old-mo/tutorial/examples/tsp/edge_xover.cpp new file mode 100644 index 000000000..a8b6a8532 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/edge_xover.cpp @@ -0,0 +1,169 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include + +#include + +#include "edge_xover.h" +#include "route_valid.h" + +#define MAXINT 1000000 + +void +EdgeXover :: build_map (const Route & __par1, const Route & __par2) +{ + + unsigned int len = __par1.size () ; + + /* Initialization */ + _map.clear () ; + _map.resize (len) ; + + for (unsigned int i = 0 ; i < len ; i ++) + { + _map [__par1 [i]].insert (__par1 [(i + 1) % len]) ; + _map [__par2 [i]].insert (__par2 [(i + 1) % len]) ; + _map [__par1 [i]].insert (__par1 [(i - 1 + len) % len]) ; + _map [__par2 [i]].insert (__par2 [(i - 1 + len) % len]) ; + } + + visited.clear () ; + visited.resize (len, false) ; +} + +void +EdgeXover :: remove_entry (unsigned int __vertex, std :: vector > & __map) + { + + std :: set & neigh = __map [__vertex] ; + + for (std :: set :: iterator it = neigh.begin () ; it != neigh.end () ; it ++) + { + __map [* it].erase (__vertex) ; + } + + } + +void +EdgeXover :: add_vertex (unsigned int __vertex, Route & __child) +{ + visited [__vertex] = true ; + __child.push_back (__vertex) ; + remove_entry (__vertex, _map) ; /* Removing entries */ +} + +void +EdgeXover :: cross (const Route & __par1, const Route & __par2, Route & __child) +{ + + build_map (__par1, __par2) ; + + unsigned int len = __par1.size () ; + + /* Go ! */ + __child.clear () ; + + unsigned int cur_vertex = rng.random (len) ; + + add_vertex (cur_vertex, __child) ; + + for (unsigned int i = 1 ; i < len ; i ++) + { + + unsigned int len_min_entry = MAXINT ; + + std :: set & neigh = _map [cur_vertex] ; + + for (std :: set :: iterator it = neigh.begin () ; it != neigh.end () ; it ++) + { + unsigned int l = _map [* it].size () ; + if (len_min_entry > l) + { + len_min_entry = l ; + } + } + + std :: vector cand ; /* Candidates */ + + for (std :: set :: iterator it = neigh.begin () ; it != neigh.end () ; it ++) + { + unsigned int l = _map [* it].size () ; + if (len_min_entry == l) + { + cand.push_back (* it) ; + } + } + + if (! cand.size ()) + { + + /* Oh no ! Implicit mutation */ + for (unsigned int j = 0 ; j < len ; j ++) + { + if (! visited [j]) + { + cand.push_back (j) ; + } + } + } + + cur_vertex = cand [rng.random (cand.size ())] ; + + add_vertex (cur_vertex, __child) ; + } +} + +bool +EdgeXover :: operator () (Route & __route1, Route & __route2) +{ + + // Init. copy + Route par [2] ; + par [0] = __route1 ; + par [1] = __route2 ; + + cross (par [0], par [1], __route1) ; + cross (par [1], par [0], __route2) ; + + assert (valid (__route1)) ; + assert (valid (__route2)) ; + + __route1.invalidate () ; + __route2.invalidate () ; + + return true ; +} diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/edge_xover.h b/trunk/paradiseo-old-mo/tutorial/examples/tsp/edge_xover.h new file mode 100644 index 000000000..3e97d6d48 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/edge_xover.h @@ -0,0 +1,72 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef edge_xover_h +#define edge_xover_h + +#include +#include + +#include + +#include "route.h" + +/** Edge Crossover */ +class EdgeXover : public eoQuadOp + { + + public : + + bool operator () (Route & __route1, Route & __route2) ; + + private : + + void cross (const Route & __par1, const Route & __par2, Route & __child) ; /* Binary */ + + void remove_entry (unsigned int __vertex, std :: vector > & __map) ; + /* Updating the map of entries */ + + void build_map (const Route & __par1, const Route & __par2) ; + + void add_vertex (unsigned int __vertex, Route & __child) ; + + std :: vector > _map ; /* The handled map */ + + std :: vector visited ; /* Vertices that are already visited */ + + } ; + +#endif diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/graph.cpp b/trunk/paradiseo-old-mo/tutorial/examples/tsp/graph.cpp new file mode 100644 index 000000000..412b9263a --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/graph.cpp @@ -0,0 +1,207 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "graph.h" + +using std::cout; +using std::endl; + +namespace Graph + { + + static std :: vector > vectCoord ; // Coordinates + + static std :: vector > dist ; // Distances Mat. + + unsigned size () + { + return dist.size () ; + } + + void computeDistances () + { + + // Dim. + unsigned int numCities = vectCoord.size () ; + dist.resize (numCities) ; + for (unsigned int i = 0 ; i < dist.size () ; i ++) + { + dist [i].resize (numCities) ; + } + + // Computations. + for (unsigned int i = 0 ; i < dist.size () ; i ++) + { + for (unsigned int j = i + 1 ; j < dist.size () ; j ++) + { + double distX = (double)(vectCoord [i].first - vectCoord [j].first) ; + double distY = (double)(vectCoord [i].second - vectCoord [j].second) ; + dist [i] [j] = dist [j] [i] = (unsigned int) (sqrt ((float) (distX * distX + distY * distY)) + 0.5) ; + } + } + } + + void load (const char * _fileName) + { + unsigned int i, dimension; + + std::string string_read, buffer; + + std :: ifstream file (_fileName) ; + + cout << endl << "\tLoading [" << _fileName << "]" << endl << endl; + + if( file.is_open() ) + { + // Read NAME: + file >> string_read; + if (string_read.compare("NAME:")!=0) + { + cout << "ERROR: \'NAME:\' espected, \'" << string_read << "\' found" << endl; + exit(EXIT_FAILURE); + } + // Read instance name + file >> string_read; + cout << "\t\tInstance Name = " << string_read << endl; + // Read TYPE: + file >> string_read; + if (string_read.compare("TYPE:")!=0) + { + cout << "ERROR: \'TYPE:\' espected, \'" << string_read << "\' found" << endl; + exit(EXIT_FAILURE); + } + // Read instance type; + file >> string_read; + cout << "\t\tInstance type = " << string_read << endl; + if (string_read.compare("TSP")!=0) + { + cout << "ERROR: only TSP type instance can be loaded" << endl; + exit(EXIT_FAILURE); + } + // Read COMMENT: + file >> string_read; + if (string_read.compare("COMMENT:")!=0) + { + cout << "ERROR: \'COMMENT:\' espected, \'" << string_read << "\' found" << endl; + exit(EXIT_FAILURE); + } + // Read comments + cout << "\t\tInstance comments = "; + file >> string_read; + buffer = string_read+"_first"; + while((string_read.compare("DIMENSION:")!=0) && (string_read.compare(buffer)!=0)) + { + if(string_read.compare("COMMENT:")!=0) + { + cout << string_read << " "; + } + else + { + cout << endl << "\t "; + } + buffer = string_read; + file >> string_read; + } + + cout << endl; + + // Read dimension; + file >> dimension ; + cout << "\t\tInstance dimension = " << dimension << endl; + vectCoord.resize (dimension) ; + + // Read EDGE_WEIGHT_TYPE + file >> string_read; + if (string_read.compare("EDGE_WEIGHT_TYPE:")!=0) + { + cout << "ERROR: \'EDGE_WEIGHT_TYPE:\' espected, \'" << string_read << "\' found" << endl; + exit(EXIT_FAILURE); + } + + // Read edge weight type + file >> string_read; + cout << "\t\tInstance edge weight type = " << string_read << endl; + if (string_read.compare("EUC_2D")!=0) + { + cout << "ERROR: only EUC_2D edge weight type instance can be loaded" << endl; + exit(EXIT_FAILURE); + } + + // Read NODE_COORD_SECTION + file >> string_read; + if (string_read.compare("NODE_COORD_SECTION")!=0) + { + cout << "ERROR: \'NODE_COORD_SECTION\' espected, \'" << string_read << "\' found" << endl; + exit(EXIT_FAILURE); + } + + // Read coordonates. + for(i=0;i> string_read; + //Read Coordinate + file >> vectCoord [i].first >> vectCoord [i].second ; + } + + // Read EOF + file >> string_read; + if(string_read.compare("EOF")!=0) + { + cout << "ERROR: \'EOF\' espected, \'" << string_read << "\' found" << endl; + exit(EXIT_FAILURE); + } + + cout << endl; + + file.close () ; + + computeDistances () ; + } + else + { + cout << _fileName << " does not exist !!!" << endl ; + exit(EXIT_FAILURE) ; + } + } + + float distance (unsigned int _from, unsigned int _to) + { + return (float)(dist [_from] [_to]) ; + } +} + + diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/graph.h b/trunk/paradiseo-old-mo/tutorial/examples/tsp/graph.h new file mode 100644 index 000000000..94b66d7f6 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/graph.h @@ -0,0 +1,61 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef graph_h +#define graph_h + +#include +#include +#include +#include +#include +#include +#include + + +namespace Graph +{ + void load (const char * _file_name) ; + /* Loading cities + (expressed by their coordinates) + from the given file name */ + + float distance (unsigned int _from, unsigned int _to) ; + + unsigned int size () ; // How many cities ? +} + +#endif diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/mix.h b/trunk/paradiseo-old-mo/tutorial/examples/tsp/mix.h new file mode 100644 index 000000000..fc570a939 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/mix.h @@ -0,0 +1,50 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef mix_h +#define mix_h + +#include + +template void mix (std :: vector & __vect) +{ + for (unsigned int i = 0 ; i < __vect.size () ; i ++) + { + std :: swap (__vect [i], __vect [rng.random (__vect.size ())]) ; + } +} + +#endif diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/order_xover.cpp b/trunk/paradiseo-old-mo/tutorial/examples/tsp/order_xover.cpp new file mode 100644 index 000000000..9e2c1f408 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/order_xover.cpp @@ -0,0 +1,119 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include +#include + +#include + +#include "order_xover.h" +#include "route_valid.h" + +void OrderXover :: cross (const Route & __par1, const Route & __par2, Route & __child) +{ + + unsigned int cut = rng.random (__par1.size ()) ; + + /* To store vertices that have + already been crossed */ + std::vector v; + v.resize(__par1.size()); + + for (unsigned int i = 0 ; i < __par1.size () ; i ++) + { + v [i] = false ; + } + + /* Copy of the left partial + route of the first parent */ + for (unsigned int i = 0 ; i < cut ; i ++) + { + __child [i] = __par1 [i] ; + v [__par1 [i]] = true ; + } + + /* Searching the vertex of the second path, that ended + the previous first one */ + unsigned int from = 0 ; + for (unsigned int i = 0 ; i < __par2.size () ; i ++) + { + if (__par2 [i] == __child [cut - 1]) + { + from = i ; + break ; + } + } + + /* Selecting a direction + Left or Right */ + char direct = rng.flip () ? 1 : -1 ; + + /* Copy of the left vertices from + the second parent path */ + unsigned int l = cut ; + + for (unsigned int i = 0 ; i < __par2.size () ; i ++) + { + unsigned int bidule /* :-) */ = (direct * i + from + __par2.size ()) % __par2.size () ; + if (! v [__par2 [bidule]]) + { + __child [l ++] = __par2 [bidule] ; + v [__par2 [bidule]] = true ; + } + } + + v.clear(); +} + +bool OrderXover :: operator () (Route & __route1, Route & __route2) +{ + + // Init. copy + Route par [2] ; + par [0] = __route1 ; + par [1] = __route2 ; + + cross (par [0], par [1], __route1) ; + cross (par [1], par [0], __route2) ; + + assert (valid (__route1)) ; + assert (valid (__route2)) ; + + __route1.invalidate () ; + __route2.invalidate () ; + + return true ; +} diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/order_xover.h b/trunk/paradiseo-old-mo/tutorial/examples/tsp/order_xover.h new file mode 100644 index 000000000..924eb4dfd --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/order_xover.h @@ -0,0 +1,57 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef order_xover_h +#define order_xover_h + +#include + +#include "route.h" + +/** Order Crossover */ +class OrderXover : public eoQuadOp + { + + public : + + bool operator () (Route & __route1, Route & __route2) ; + + private : + + void cross (const Route & __par1, const Route & __par2, Route & __child) ; + } ; + +#endif diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/part_route_eval.cpp b/trunk/paradiseo-old-mo/tutorial/examples/tsp/part_route_eval.cpp new file mode 100644 index 000000000..1639e002a --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/part_route_eval.cpp @@ -0,0 +1,53 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "part_route_eval.h" +#include "graph.h" + +PartRouteEval :: PartRouteEval (float __from, float __to) : from (__from), to (__to) +{} + +void PartRouteEval :: operator () (Route & __route) +{ + float len = 0 ; + + for (unsigned int i = (unsigned int) (__route.size () * from) ; i < (unsigned int ) (__route.size () * to) ; i ++) + { + len += Graph :: distance (__route [i], __route [(i + 1) % Graph :: size ()]) ; + } + + __route.fitness (len) ; +} diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/part_route_eval.h b/trunk/paradiseo-old-mo/tutorial/examples/tsp/part_route_eval.h new file mode 100644 index 000000000..a92fad2ce --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/part_route_eval.h @@ -0,0 +1,62 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef part_route_eval_h +#define part_route_eval_h + +#include + +#include "route.h" + +/** Route Evaluator */ +class PartRouteEval : public eoEvalFunc + { + + public : + + /** Constructor */ + PartRouteEval (float __from, float __to) ; + + void operator () (Route & __route) ; + + private : + + float from, to ; + + } ; + + +#endif diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/part_two_opt_init.cpp b/trunk/paradiseo-old-mo/tutorial/examples/tsp/part_two_opt_init.cpp new file mode 100644 index 000000000..357b7ecbe --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/part_two_opt_init.cpp @@ -0,0 +1,45 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include + +#include "part_two_opt_init.h" + +void PartTwoOptInit :: operator () (TwoOpt & __move, const Route & __route) +{ + __move.first = rng.random (__route.size () - 6) ; + __move.second = __move.first + 2 ; +} diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/part_two_opt_init.h b/trunk/paradiseo-old-mo/tutorial/examples/tsp/part_two_opt_init.h new file mode 100644 index 000000000..490fe61bf --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/part_two_opt_init.h @@ -0,0 +1,54 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef part_two_opt_init_h +#define part_two_opt_init_h + +#include + +#include "two_opt.h" + +/** It sets the first couple of edges */ +class PartTwoOptInit : public moMoveInit + { + + public : + + void operator () (TwoOpt & __move, const Route & __route) ; + + } ; + +#endif diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/part_two_opt_next.cpp b/trunk/paradiseo-old-mo/tutorial/examples/tsp/part_two_opt_next.cpp new file mode 100644 index 000000000..7abc14012 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/part_two_opt_next.cpp @@ -0,0 +1,57 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "part_two_opt_next.h" +#include "graph.h" + +bool PartTwoOptNext :: operator () (TwoOpt & __move, const Route & __route) +{ + if (__move.first == Graph :: size () - 4 && __move.second == __move.first + 2) + { + return false ; + } + else + { + __move.second ++ ; + if (__move.second == Graph :: size () - 1) + { + __move.first ++ ; + __move.second = __move.first + 2 ; + } + + return true ; + } +} diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/part_two_opt_next.h b/trunk/paradiseo-old-mo/tutorial/examples/tsp/part_two_opt_next.h new file mode 100644 index 000000000..e2a0c05cc --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/part_two_opt_next.h @@ -0,0 +1,53 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef part_two_opt_next_h +#define part_two_opt_next_h + +#include +#include "two_opt.h" + +/** It updates a couple of edges */ +class PartTwoOptNext : public moNextMove + { + + public : + + bool operator () (TwoOpt & __move, const Route & __route) ; + + } ; + +#endif diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/partial_mapped_xover.cpp b/trunk/paradiseo-old-mo/tutorial/examples/tsp/partial_mapped_xover.cpp new file mode 100644 index 000000000..ab92d2a3b --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/partial_mapped_xover.cpp @@ -0,0 +1,118 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include + +#include + +#include + +#include "partial_mapped_xover.h" +#include "route_valid.h" +#include "mix.h" + +void PartialMappedXover :: repair (Route & __route, unsigned __cut1, unsigned __cut2) +{ + + std::vector v; // Number of times a cities are visited ... + + v.resize(__route.size ()); + + for (unsigned int i = 0 ; i < __route.size () ; i ++) + { + v [i] = 0 ; + } + + for (unsigned int i = 0 ; i < __route.size () ; i ++) + { + v [__route [i]] ++ ; + } + + std :: vector vert ; + + for (unsigned int i = 0 ; i < __route.size () ; i ++) + { + if (! v [i]) + { + vert.push_back (i) ; + } + } + + mix (vert) ; + + for (unsigned int i = 0 ; i < __route.size () ; i ++) + { + if (i < __cut1 || i >= __cut2) + { + if (v [__route [i]] > 1) + { + __route [i] = vert.back () ; + vert.pop_back () ; + } + } + } + + v.clear(); +} + +bool PartialMappedXover :: operator () (Route & __route1, Route & __route2) +{ + unsigned int cut1 = rng.random (__route1.size ()), cut2 = rng.random (__route2.size ()) ; + + if (cut2 < cut1) + { + std :: swap (cut1, cut2) ; + } + + // Between the cuts + for (unsigned int i = cut1 ; i < cut2 ; i ++) + { + std :: swap (__route1 [i], __route2 [i]) ; + } + + // Outside the cuts + repair (__route1, cut1, cut2) ; + repair (__route2, cut1, cut2) ; + + // Debug + assert (valid (__route1)) ; + assert (valid (__route2)) ; + + __route1.invalidate () ; + __route2.invalidate () ; + + return true ; +} diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/partial_mapped_xover.h b/trunk/paradiseo-old-mo/tutorial/examples/tsp/partial_mapped_xover.h new file mode 100644 index 000000000..65c6474de --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/partial_mapped_xover.h @@ -0,0 +1,57 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef partial_mapped_xover_h +#define partial_mapped_xover_h + +#include + +#include "route.h" + +/** Partial Mapped Crossover */ +class PartialMappedXover : public eoQuadOp + { + + public : + + bool operator () (Route & __route1, Route & __route2) ; + + private : + + void repair (Route & __route, unsigned __cut1, unsigned __cut2) ; + } ; + +#endif diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/route.h b/trunk/paradiseo-old-mo/tutorial/examples/tsp/route.h new file mode 100644 index 000000000..ac9629cbb --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/route.h @@ -0,0 +1,48 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef route_h +#define route_h + +#include +#include + +// A float that has to be minimized. +typedef eoScalarFitness< float, std::greater > tspFitness ; + +typedef eoVector Route ; // [Fitness (length), Gene (city)] + +#endif diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/route_eval.cpp b/trunk/paradiseo-old-mo/tutorial/examples/tsp/route_eval.cpp new file mode 100644 index 000000000..abde85b99 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/route_eval.cpp @@ -0,0 +1,51 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "route_eval.h" +#include "graph.h" + +void RouteEval :: operator () (Route & __route) +{ + + float len = 0.0 ; + + for (unsigned int i = 0 ; i < Graph :: size () ; i ++) + { + len += Graph :: distance (__route [i], __route [(i + 1) % Graph :: size ()]) ; + } + + __route.fitness (len) ; +} diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/route_eval.h b/trunk/paradiseo-old-mo/tutorial/examples/tsp/route_eval.h new file mode 100644 index 000000000..474075cf0 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/route_eval.h @@ -0,0 +1,55 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef route_eval_h +#define route_eval_h + +#include + +#include "route.h" + +/** Route Evaluator */ +class RouteEval : public eoEvalFunc + { + + public : + + void operator () (Route & __route) ; + + } ; + + +#endif diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/route_init.cpp b/trunk/paradiseo-old-mo/tutorial/examples/tsp/route_init.cpp new file mode 100644 index 000000000..09a2c40cb --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/route_init.cpp @@ -0,0 +1,63 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include + +#include "route_init.h" +#include "graph.h" + +void RouteInit :: operator () (Route & __route) +{ + + // Init. + __route.clear () ; + for (unsigned int i = 0 ; i < Graph :: size () ; i ++) + { + __route.push_back (i) ; + } + + // Swap. cities + + for (unsigned int i = 0 ; i < Graph :: size () ; i ++) + { + //unsigned int j = rng.random (Graph :: size ()) ; + + unsigned int j = (unsigned int) (Graph :: size () * (rand () / (RAND_MAX + 1.0))) ; + unsigned int city = __route [i] ; + __route [i] = __route [j] ; + __route [j] = city ; + } +} diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/route_init.h b/trunk/paradiseo-old-mo/tutorial/examples/tsp/route_init.h new file mode 100644 index 000000000..466345c1b --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/route_init.h @@ -0,0 +1,53 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef route_init_h +#define route_init_h + +#include + +#include "route.h" + +class RouteInit : public eoInit + { + + public : + + void operator () (Route & __route) ; + + } ; + +#endif diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/route_valid.cpp b/trunk/paradiseo-old-mo/tutorial/examples/tsp/route_valid.cpp new file mode 100644 index 000000000..844cebf82 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/route_valid.cpp @@ -0,0 +1,68 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "route_valid.h" + +#include + +bool valid (Route & __route) +{ + + std::vector t; + t.resize(__route.size()); + + for (unsigned int i = 0 ; i < __route.size () ; i ++) + { + t [i] = 0 ; + } + + for (unsigned int i = 0 ; i < __route.size () ; i ++) + { + t [__route [i]] ++ ; + } + + for (unsigned int i = 0 ; i < __route.size () ; i ++) + { + if (t [i] != 1) + { + t.clear(); + return false ; + } + } + + t.clear(); + return true ; // OK. +} diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/route_valid.h b/trunk/paradiseo-old-mo/tutorial/examples/tsp/route_valid.h new file mode 100644 index 000000000..607728e8b --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/route_valid.h @@ -0,0 +1,44 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef route_valid_h +#define route_valid_h + +#include "route.h" + +bool valid (Route & __route) ; + +#endif diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/tsp b/trunk/paradiseo-old-mo/tutorial/examples/tsp/tsp new file mode 100644 index 000000000..adf8189ca --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/tsp @@ -0,0 +1,41 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +#ifndef __tsp +#define __tsp + +#include "tsp.h" + +#endif diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/tsp.h b/trunk/paradiseo-old-mo/tutorial/examples/tsp/tsp.h new file mode 100644 index 000000000..ba249a794 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/tsp.h @@ -0,0 +1,60 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __tsp_h +#define __tsp_h + +#include "city_swap.h" +#include "edge_xover.h" +#include "graph.h" +#include "mix.h" +#include "order_xover.h" +#include "partial_mapped_xover.h" +#include "part_route_eval.h" +#include "part_two_opt_init.h" +#include "part_two_opt_next.h" +#include "route_eval.h" +#include "route.h" +#include "route_init.h" +#include "route_valid.h" +#include "two_opt.h" +#include "two_opt_incr_eval.h" +#include "two_opt_init.h" +#include "two_opt_next.h" +#include "two_opt_rand.h" +#include "two_opt_tabu_list.h" + +#endif diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt.cpp b/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt.cpp new file mode 100644 index 000000000..146c6c6c2 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt.cpp @@ -0,0 +1,72 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "two_opt.h" + +TwoOpt TwoOpt :: operator ! () const + { + TwoOpt move = * this ; + std :: swap (move.first, move.second) ; + + return move ; + } + +void TwoOpt :: operator () (Route & __route) +{ + + std :: vector seq_cities ; + + for (unsigned int i = second ; i > first ; i --) + { + seq_cities.push_back (__route [i]) ; + } + + unsigned int j = 0 ; + for (unsigned int i = first + 1 ; i < second + 1 ; i ++) + { + __route [i] = seq_cities [j ++] ; + } +} + +void TwoOpt :: readFrom (std :: istream & __is) +{ + __is >> first >> second ; +} + +void TwoOpt :: printOn (std :: ostream & __os) const + { + __os << first << ' ' << second ; + } diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt.h b/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt.h new file mode 100644 index 000000000..6b9cf435f --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt.h @@ -0,0 +1,61 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef two_opt_h +#define two_opt_h + +#include + +#include +#include + +#include "route.h" + +class TwoOpt : public moMove , public std :: pair , public eoPersistent + { + + public : + + TwoOpt operator ! () const ; + + void operator () (Route & __route) ; + + void readFrom (std :: istream & __is) ; + + void printOn (std :: ostream & __os) const ; + } ; + +#endif diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt_incr_eval.cpp b/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt_incr_eval.cpp new file mode 100644 index 000000000..2d4657b73 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt_incr_eval.cpp @@ -0,0 +1,53 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "two_opt_incr_eval.h" +#include "graph.h" + +tspFitness TwoOptIncrEval :: operator () (const TwoOpt & __move, const Route & __route) +{ + // From + unsigned int v1 = __route [__move.first], v1_next = __route [__move.first + 1] ; + + // To + unsigned int v2 = __route [__move.second], v2_next = __route [__move.second + 1] ; + + return __route.fitness () + + Graph :: distance (v1, v2) + + Graph :: distance (v1_next, v2_next) + - Graph :: distance (v1, v1_next) + - Graph :: distance (v2, v2_next) ; +} diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt_incr_eval.h b/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt_incr_eval.h new file mode 100644 index 000000000..91ffca098 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt_incr_eval.h @@ -0,0 +1,51 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef two_optincr_eval_h +#define two_optincr_eval_h + +#include +#include "two_opt.h" + +class TwoOptIncrEval : public moMoveIncrEval + { + public : + + tspFitness operator () (const TwoOpt & __move, const Route & __route) ; + + } ; + +#endif diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt_init.cpp b/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt_init.cpp new file mode 100644 index 000000000..2e593db0a --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt_init.cpp @@ -0,0 +1,45 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "two_opt_init.h" + +void TwoOptInit :: operator () (TwoOpt & _move, const Route & _route) +{ + Route route=_route; + + _move.first = 0 ; + _move.second = 2 ; +} diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt_init.h b/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt_init.h new file mode 100644 index 000000000..1b2a5e376 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt_init.h @@ -0,0 +1,54 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef two_opt_init_h +#define two_opt_init_h + +#include + +#include "two_opt.h" + +/** It sets the first couple of edges */ +class TwoOptInit : public moMoveInit + { + + public : + + void operator () (TwoOpt & _move, const Route & _route) ; + + } ; + +#endif diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt_next.cpp b/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt_next.cpp new file mode 100644 index 000000000..2438390fd --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt_next.cpp @@ -0,0 +1,59 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "two_opt_next.h" +#include "graph.h" + +bool TwoOptNext :: operator () (TwoOpt & _move, const Route & _route) +{ + Route route=_route; + + if (_move.first == Graph :: size () - 4 && _move.second == _move.first + 2) + { + return false ; + } + else + { + _move.second ++ ; + if (_move.second == Graph :: size () - 1) + { + _move.first ++ ; + _move.second = _move.first + 2 ; + } + + return true ; + } +} diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt_next.h b/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt_next.h new file mode 100644 index 000000000..f57595cd6 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt_next.h @@ -0,0 +1,53 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef two_opt_next_h +#define two_opt_next_h + +#include +#include "two_opt.h" + +/** It updates a couple of edges */ +class TwoOptNext : public moNextMove + { + + public : + + bool operator () (TwoOpt & _move, const Route & _route) ; + + } ; + +#endif diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt_rand.cpp b/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt_rand.cpp new file mode 100644 index 000000000..956bddfb0 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt_rand.cpp @@ -0,0 +1,45 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "two_opt_rand.h" +#include "graph.h" +#include + +void TwoOptRand :: operator () (TwoOpt & __move) +{ + __move.first = rng.random (Graph :: size () - 3) ; + __move.second = __move.first + 2 + rng.random (Graph :: size () - __move.first - 3) ; +} diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt_rand.h b/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt_rand.h new file mode 100644 index 000000000..e6e0bdff2 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt_rand.h @@ -0,0 +1,53 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef two_opt_rand_h +#define two_opt_rand_h + +#include + +#include "two_opt.h" + +class TwoOptRand : public moRandMove + { + + public : + + void operator () (TwoOpt & __move) ; + + } ; + +#endif diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt_tabu_list.cpp b/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt_tabu_list.cpp new file mode 100644 index 000000000..290eef7f7 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt_tabu_list.cpp @@ -0,0 +1,93 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "two_opt_tabu_list.h" +#include "graph.h" + +#define TABU_LENGTH 10 + +void +TwoOptTabuList :: init () +{ + // Size (eventually) + tabu_span.resize (Graph :: size ()) ; + for (unsigned int i = 0 ; i < tabu_span.size () ; i ++) + { + tabu_span [i].resize (Graph :: size ()) ; + } + + // Clear + for (unsigned int i = 0 ; i < tabu_span.size () ; i ++) + { + for (unsigned int j = 0 ; j < tabu_span [i].size () ; j ++) + { + tabu_span [i] [j] = 0 ; + } + } +} + +bool +TwoOptTabuList :: operator () (const TwoOpt & _move, const Route & _route) +{ + Route route=_route; + + return tabu_span [_move.first] [_move.second] > 0 ; +} + +void +TwoOptTabuList :: add (const TwoOpt & _move, const Route & _route) + { + Route route=_route; + + tabu_span [_move.first] [_move.second] = tabu_span [_move.second] [_move.first] = TABU_LENGTH ; + } + +void +TwoOptTabuList :: update () +{ + unsigned int i,j; + + for (i = 0 ; i < tabu_span.size () ; i ++) + { + for (j = 0 ; j < tabu_span [i].size () ; j ++) + { + if ( tabu_span [i] [j] > 0 ) + { + tabu_span [i] [j] -- ; + } + } + } +} diff --git a/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt_tabu_list.h b/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt_tabu_list.h new file mode 100644 index 000000000..236919f69 --- /dev/null +++ b/trunk/paradiseo-old-mo/tutorial/examples/tsp/two_opt_tabu_list.h @@ -0,0 +1,63 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sébastien Cahon, Jean-Charles Boisson +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef two_opt_tabu_list_h +#define two_opt_tabu_list_h + +#include +#include "two_opt.h" +#include "route.h" + +/** The table of tabu movements, i.e. forbidden edges */ +class TwoOptTabuList : public moTabuList + { + public : + + bool operator () (const TwoOpt & _move, const Route & _route) ; + + void add (const TwoOpt & _move, const Route & _route) ; + + void update () ; + + void init () ; + + private : + + std :: vector > tabu_span ; + + } ; + +#endif